Django - DRF权限认证组件

  • 作者:lwj
  • 分类:Django
  • 发表日期:2021-12-11 15:36:03
  • 阅读(348)
  • 评论(0)

与身份认证和限制一起,权限决定了是否应该授予或拒绝访问请求;权限检查总是在视图的最开始运行,在任何其他代码被允许继续之前;权限用于授予或拒绝不同类别的用户访问 API 的不同部分


当权限检查失败时,将根据以下规则返回“403”或“401”响应:

    1. 请求已成功通过身份验证,但权限被拒绝。— 将返回 HTTP 403 Forbidden 响应。

    2. 请求未成功通过身份验证,并且最高优先级的身份验证类不使用WWW-Authenticate标头。— 将返回 HTTP 403 Forbidden 响应。

    3. 请求未成功通过身份验证,并且最高优先级的身份验证类确实使用了WWW-Authenticate标头。—WWW-Authenticate将返回带有适当标头的 HTTP 401 未授权响应。


DRF四种权限

IsAuthenticated只有登录用户才能范文视图中的所有接口
AllowAny 允许所有用户
IsAdminUser 仅管理员用户
IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取

DRF权限认证配置策略:全局配置和视图配置

全局权限认证需要在setting.py文件夹中添加配置 - 配置后所有接口均要进行权限认证:

# DRF的所有配置项
REST_FRAMEWORK = {
    # 全局权限认证
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',            # IsAuthenticated 仅通过登录认证的用户
        'rest_framework.permissions.AllowAny',                   # AllowAny 允许所有用户
        'rest_framework.permissions.IsAdminUser',                # IsAdminUser 仅管理员用户
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',  # IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
    ),
}

视图权限认证只需要在需要权限认证的视图中配置,如下只有视图只有管理员账号才能请求该视图接口:

from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAdminUser

from .models import BookInfo
from .serializers import BookInfoSerializers

class ViewAuth(ModelViewSet, GenericAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializers

    # 指定身份认证
    authentication_classes = [TokenAuthentication, ]

    # 指定当前视图访问权限:仅管理员用户
    permission_classes = [IsAdminUser]

普通用户Token请求接口,HTTP返回401

管理员用户Token请求接口,HTTP返回200

觉得不错,支持一下!

提交评论

您尚未登录,登录之后方可评论~ 登录 or 注册

评论列表

暂无评论
返回顶部

建议反馈

1. 可在博文底部留言评论

2. 发邮件到i_suichuan@163.com