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

Python实现的RESTFramework中Token用户认证实例

发布时间:2023-12-24 13:15:39

Django REST Framework是一个用于构建Web API的功能强大的框架。它提供了许多强大的功能,如身份验证和授权,使得开发者可以轻松地构建安全的API。

在使用Django REST Framework的API中,我们可以使用Token用户认证来确保只有授权的用户才能访问某些特定的资源。

Token用户认证使用一个特定的Token来表示用户的身份,这个Token可以通过用户登录成功后生成,并保存在数据库中。当用户发送请求时,我们可以使用Token用户认证来验证请求头部中的Token是否有效。

下面我们来看一个使用Django REST Framework的Token用户认证的例子:

首先,我们需要在Django的settings.py文件中设置一些相关的配置:

# settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',  # 添加Token用户认证
        'rest_framework.authentication.SessionAuthentication',  # 添加Session用户认证(可选)
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',  # 仅允许已经认证的用户访问
    ]
}

上述代码设置了默认的身份验证类为TokenAuthentication,并且仅允许已经认证的用户访问。

接下来,我们来创建一个用户认证的视图。

# views.py

from rest_framework import generics, permissions
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView

# 登录视图
class LoginView(generics.GenericAPIView):
    permission_classes = [permissions.AllowAny]

    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')

        # 在此进行用户验证逻辑,并创建Token
        # 这里使用Django内置的User模型作为示例
        token, created = Token.objects.get_or_create(user=request.user)

        return Response({'token': token.key})

# 保护的资源视图
class ProtectedView(APIView):
    permission_classes = [permissions.IsAuthenticated]

    def get(self, request):
        return Response({'content': '这是保护的资源'})

上述代码中,我们首先创建了一个LoginView视图,用于处理用户登录的请求。在post方法中,我们从请求数据中获取用户名和密码,并进行用户验证逻辑。

用户验证通过后,我们通过调用Token的get_or_create方法来创建或获取用户对应的Token,并将Token的key返回给客户端。

接下来,我们创建了一个ProtectedView视图,用于展示一个受保护的资源。我们将permissions.IsAuthenticated设置为视图的权限类,这将确保只有已经认证的用户才能访问这个视图。

最后,我们需要配置URL来映射我们的视图:

# urls.py

from django.urls import path
from .views import LoginView, ProtectedView

urlpatterns = [
    path('login/', LoginView.as_view(), name='login'),
    path('protected/', ProtectedView.as_view(), name='protected'),
]

上述代码中,我们将LoginView视图映射到/login/路径,将ProtectedView视图映射到/protected/路径。

现在我们已经完成了使用Django REST Framework的Token用户认证的实现。当用户访问/login/路径时,他们将通过POST请求发送用户名和密码来进行身份验证。验证成功后,将返回一个Token给客户端。

客户端可以在请求头部中添加Authorization字段,将Token以Token <token>的格式发送。例如,Authorization: Token 0123456789abcdef0123456789abcdef01234567

当用户访问/protected/路径时,他们需要在请求中添加正确的Token才能访问。

这就是一个使用Django REST Framework的Token用户认证的例子和使用说明。希望对你有帮助!