Python中RESTFramework的Token身份验证示例代码
在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值附加到请求头中即可。
希望对你有帮助!
