📜  使用 Django REST 框架实现令牌认证

📅  最后修改于: 2022-05-13 01:54:37.668000             🧑  作者: Mango

使用 Django REST 框架实现令牌认证

令牌认证是指将用户名和密码交换为令牌,该令牌将在所有后续请求中使用,以便在服务器端识别用户。本文围绕使用Django REST Framework制作API实现令牌认证。令牌身份验证通过提供令牌来交换用户名和密码来工作。

所需模块:

  • django:
pip install django
  • 脆皮表格:
pip install --upgrade django-crispy-forms 
  • django rest_framework:
pip install djangorestframework
  • HTTPie:
pip install httpie

和一个添加 API 的项目,这里我们使用 Sign Up 并登录

创建视图集和序列化器

转到给定项目中的用户文件夹
并创建一个 api 文件夹来保存所有 api 相关文件

cd user && mkdir api 

现在,在 api 文件夹中创建user/api/serializers.pyuser/api/viewsets.py

cd user/api && touch serializers.py viewsets.py 

现在编辑user/api/serializers.py

Python3
from rest_framework import serializers
from django.contrib.auth.models import User
 
 
class userSerializers(serializers.ModelSerializer):
 
    class Meta:
        model = User
        fields =  '__all__'


Python3
from rest_framework import viewsets
from .serializers import userSerializers
from django.contrib.auth.models import User
 
 
class userviewsets(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = userSerializers


Python3
from user.api.viewsets import userviewsets
from rest_framework import routers
 
router = routers.DefaultRouter()
router.register('user', userviewsets, base_name ='user_api')


Python3
from .router import router
from rest_framework.authtoken import views


Python3
path('api/', include(router.urls)),
path('api-token-auth/', views.obtain_auth_token, name='api-token-auth'),


还编辑user/api/viewsets.py

Python3

from rest_framework import viewsets
from .serializers import userSerializers
from django.contrib.auth.models import User
 
 
class userviewsets(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = userSerializers

编辑设置.py
在setting.py的INSTALLED_APPS中添加rest_framework和rest_framework.authtoken

编辑 rest_framework 设置如下

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
               'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES':(
                'rest_framework.permissions.IsAuthenticated',
    ),

}

创建路由器
转到项目/并创建 router.py

cd project/ && touch router.py 

编辑project/router.py

Python3

from user.api.viewsets import userviewsets
from rest_framework import routers
 
router = routers.DefaultRouter()
router.register('user', userviewsets, base_name ='user_api')

编辑 url.py
转到项目/urls.py
并编辑它
导入 router 和 rest_framework.authtoken 进行令牌认证

Python3

from .router import router
from rest_framework.authtoken import views

添加API相关路径

Python3

path('api/', include(router.urls)),
path('api-token-auth/', views.obtain_auth_token, name='api-token-auth'),


测试 API
一、迁移模型

python manage.py migrate 

使用以下命令启动服务器

python manage.py runserver

打开另一个终端,让我们使用 HTTP POST 请求检查我们的 API 以获取令牌并粘贴用户名和密码。

http POST http://localhost:8081/api-token-auth/ username='your_username' password="your_password"

现在使用此令牌从 API 获取数据,放置您的 API 令牌

http http://localhost:8081/api/user/ "Authorization: Token API_KEY_HERE"