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

Python中RESTFramework的Token身份验证示例代码

发布时间:2023-12-24 13:14:30

在Python中,Django REST Framework(简称DRF)是一个功能强大且代码简洁的库,用于构建Web API。其中有一个重要的功能就是身份验证,而使用Token进行身份验证是一种常见的做法。下面是一个示例代码,用于演示在DRF中使用Token进行身份验证。

首先,确保已经安装了Django和Django REST Framework,并且已经设置好了Django项目。接下来,我们将从创建模型开始。

首先,在项目的models.py文件中定义一个名为TokenAuthentication的模型类,用于表示Token:

from django.db import models
from django.contrib.auth.models import User
from django.utils.crypto import get_random_string

class TokenAuthentication(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    token = models.CharField(max_length=40, unique=True, default=get_random_string)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.token

在这个模型类中,我们使用了Django自带的User模型,以及一个字段用于存储Token值。这里的Token值是通过get_random_string函数生成的随机字符串,默认长度为40。

接下来,我们需要创建Token的API,用于生成和获取Token。在项目的views.py文件中定义如下视图函数:

from rest_framework.authtoken.models import Token
from rest_framework import viewsets
from .models import TokenAuthentication
from .serializers import TokenSerializer

class TokenViewSet(viewsets.ModelViewSet):
    queryset = TokenAuthentication.objects.all()
    serializer_class = TokenSerializer

    def create(self, request, *args, **kwargs):
        user = request.user
        token, created = Token.objects.get_or_create(user=user)
        return Response({'token': token.key})

    def destroy(self, request, *args, **kwargs):
        token = self.get_object()
        token.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

在这个视图函数中,我们继承了DRF中的viewsets.ModelViewSet类,用于实现标准的CRUD操作。我们定义了create和destroy两个函数,分别用于生成Token和删除Token。

最后,在项目的serializers.py文件中定义一个名为TokenSerializer的序列化器,用于将Token模型类转换为JSON格式:

from rest_framework import serializers
from .models import TokenAuthentication

class TokenSerializer(serializers.ModelSerializer):
    class Meta:
        model = TokenAuthentication
        fields = '__all__'

到此,我们已经完成了Token身份验证模块的实现。接下来,我们可以在视图函数中使用Token进行身份验证。例如,在某个需要身份验证的视图函数中,我们可以使用以下代码来验证Token:

from rest_framework.decorators import authentication_classes, permission_classes
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def example_view(request):
    # 这里的request.user就是已经被验证的用户
    ...

在这个视图函数中,我们使用了DRF中的authentication_classes和permission_classes装饰器,分别指定了使用Token进行身份验证和只有已经被验证的用户才能访问该函数。

以上就是一个使用Token进行身份验证的示例代码。当用户注册或登录时,就可以生成一个Token给予用户进行身份验证。当用户需要访问需要身份验证的接口时,只需将Token值附加到请求头中即可。

希望对你有帮助!