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

使用rest_framework.authtoken.views在Django中实现基于Token的身份认证

发布时间:2024-01-09 10:28:59

在Django中,可以使用rest_framework.authtoken.views模块实现基于Token的身份认证。这个模块提供了一个视图类obtain_auth_token,可以用于生成和验证Token。下面是一个使用例子。

首先,需要在Django的settings.py文件中配置Token认证相关的设置。

INSTALLED_APPS = [
    ...
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    ...
    'rest_framework',
    'rest_framework.authtoken',
]

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

接下来,可以在urls.py文件中配置Token认证相关的路由。

from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token

urlpatterns = [
    path('api-token/', obtain_auth_token, name='api_token_auth'),
]

这样就可以在/api-token/路径下发送POST请求来获取一个Token。

现在可以创建一个简单的视图函数来演示Token认证的使用。

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def protected_view(request):
    content = {
        'message': '这是一个受保护的视图',
    }
    return Response(content)

在这个例子中,protected_view是一个需要进行Token认证的视图函数,通过permission_classes([IsAuthenticated])装饰器,指定了只有经过身份认证的用户才能访问该视图。

现在可以使用Token进行身份认证来访问这个视图。可以通过以下请求来测试:

POST /api-token/ HTTP/1.1
Content-Type: application/json

{
    "username": "username",
    "password": "password"
}

该请求会返回一个包含Token的JSON响应,得到这个Token后,可以使用它来访问protected_view视图。

GET /protected-view/ HTTP/1.1
Authorization: Token <Token>

如果Token是有效的,protected_view会返回一个JSON响应,内容如下:

{
    "message": "这是一个受保护的视图"
}

如果Token不是有效的,protected_view会返回一个401状态码的响应。

以上就是使用rest_framework.authtoken.views模块在Django中实现基于Token的身份认证的示例。通过配置Token认证相关的设置和路由,并使用TokenAuthentication类进行身份认证,可以轻松地为Django应用添加Token认证功能。