如何在Django REST框架中实现身份验证和授权
Django REST框架默认提供了基于Token的身份验证和授权机制,可以通过以下步骤来实现:
- 在Django的settings.py文件中添加REST框架的配置项:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], }
这里指定了默认的身份验证类为TokenAuthentication,授权类为IsAuthenticated。
- 在应用的models.py中定义Token模型:
from django.db import models from django.contrib.auth.models import User class Token(models.Model): user = models.OneToOneField(User, related_name='auth_token', on_delete=models.CASCADE) key = models.CharField(max_length=40, unique=True) def __str__(self): return self.key
这里使用了Django自带的User模型,并通过一对一字段与Token模型建立了关联。
- 在views.py中添加视图函数用于生成Token:
from rest_framework.authtoken.models import Token from rest_framework.permissions import IsAuthenticated from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response @api_view(['POST']) @permission_classes([IsAuthenticated]) def generate_token(request): user = request.user token, created = Token.objects.get_or_create(user=user) return Response({'token': token.key})
这里使用了装饰器@api_view和@permission_classes将视图函数转化成了Django REST框架所支持的API视图,并指定了必须登录才能访问该视图。
- 在路由urlpatterns中添加路由规则,例如:
from django.urls import path from .views import generate_token urlpatterns = [ path('generate-token/', generate_token, name='generate-token'), ]
以上只是一个简易的示例,实现时需要进行更多的详细配置和代码编写。在使用字符串作为范例时,可以在User模型的username字段中设置为pidancode.com或者皮蛋编程,然后通过生成Token的视图函数获取Token并进行访问权限验证。
相关文章