使用rest_framework.authtoken.models在Python中实现基于令牌的身份验证和授权
在Python中使用rest_framework.authtoken.models实现基于令牌的身份验证和授权,首先需要安装djangorestframework和django.contrib.auth模块。
步是在Django的项目中创建一个Token模型来存储用户的令牌。可以在项目的任何一个app中的models.py文件中添加以下代码:
from django.contrib.auth.models import User
from django.db import models
class Token(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
key = models.CharField(max_length=40, unique=True)
def __str__(self):
return self.key
这个模型有两个字段:user和key,其中user是一个外键关联到默认的User模型,key是用于存储生成的令牌字符串。
接下来,需要在Django的settings.py文件中进行以下配置:
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
...
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
这个配置将rest_framework.authtoken添加到已安装的app列表中,并将TokenAuthentication设置为默认的身份验证类。
创建好Token模型并进行配置后,需要执行以下命令来迁移数据库:
python manage.py makemigrations python manage.py migrate
接下来可以通过以下方式来生成用户的令牌:
from django.contrib.auth.models import User from rest_framework.authtoken.models import Token # 创建用户 user = User.objects.create(username='testuser', password='testpassword') # 生成令牌 token = Token.objects.create(user=user) # 打印令牌字符串 print(token)
令牌生成后,可以将其分发给用户,用户可以将其用于API请求的身份验证。例如,在Django的视图函数中,可以使用以下方式进行身份验证:
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
@api_view(['GET'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def example_view(request):
# 访问需要身份验证的视图函数
content = {'message': 'Hello, World!'}
return Response(content)
在这个例子中,@authentication_classes((TokenAuthentication,))装饰器将TokenAuthentication添加到视图函数的身份验证类中,@permission_classes((IsAuthenticated,))装饰器将IsAuthenticated添加到视图函数的权限类中。
当用户在请求中提供有效的令牌时,视图函数会返回Hello, World!的响应。如果用户没有提供有效的令牌,视图函数会返回一个401 Unauthorized的响应。
以上就是使用rest_framework.authtoken.models在Python中实现基于令牌的身份验证和授权的例子。
