如何在Django REST框架中实现身份验证和授权

2023-04-11 00:00:00 框架 授权 身份验证

Django REST框架默认提供了基于Token的身份验证和授权机制,可以通过以下步骤来实现:

  1. 在Django的settings.py文件中添加REST框架的配置项:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

这里指定了默认的身份验证类为TokenAuthentication,授权类为IsAuthenticated。

  1. 在应用的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模型建立了关联。

  1. 在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视图,并指定了必须登录才能访问该视图。

  1. 在路由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并进行访问权限验证。

相关文章