欢迎访问宙启技术站
智能推送

使用rest_framework.authtoken.views创建Token认证系统的步骤和示例

发布时间:2024-01-09 10:35:14

使用rest_framework.authtoken.views模块可以为你的Django项目创建一个简单的Token认证系统。下面是使用该模块创建Token认证系统的步骤,并附带一个示例:

步骤1:安装Token认证插件

使用以下命令安装Django Rest Framework插件以及相关的Token认证插件:

pip install djangorestframework
pip install django-rest-framework-tokenauth

步骤2:在Django项目的设置中启用Token认证

将以下行添加到Django项目的settings.py文件中:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken'
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

步骤3:为用户模型创建Token

运行以下命令为用户模型创建Token:

python manage.py migrate

步骤4:创建Token View

在你的Django项目的views.py文件中导入rest_framework.authtoken.views

from rest_framework.authtoken.views import ObtainAuthToken

创建自定义视图类,并继承自ObtainAuthToken视图:

class CustomAuthToken(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({'token': token.key})

步骤5:配置URL

在你的Django项目的urls.py文件中添加以下URL配置:

from django.urls import path, include
from .views import CustomAuthToken

urlpatterns = [
    ...
    path('api-token-auth/', CustomAuthToken.as_view()),
]

示例:

现在我们将创建一个简单的API,该API要求用户进行身份验证才能访问。

首先,我们需要定义一个模型来保存用户数据,创建一个名为User的模型,其中包含usernamepassword字段。然后,在Django的settings.py中添加以下内容:

# settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',
    'exampleapp'
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

现在,我们将创建一个简单的视图函数和URL来处理用户身份验证:

# views.py
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response

class CustomAuthToken(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data, context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({'token': token.key})

urls.py文件中添加以下内容:

# urls.py
from django.urls import path
from exampleapp.views import CustomAuthToken

urlpatterns = [
    path('api-token-auth/', CustomAuthToken.as_view()),
]

现在,你可以使用POST方法向/api-token-auth/ URL发出请求来获取用户的Token:

POST /api-token-auth/

{
    "username": "your_username",
    "password": "your_password"
}

Response: 

{
    "token": "your_token"
}

你可以使用获得的Token来进行进一步的API请求,例如,在请求标头中添加Authorization: Token <your_token>来进行身份验证。