rest_framework 权限功能

本文详细介绍了Django Rest Framework(DRF)中的权限系统,包括如何自定义权限类、全局及局部应用权限验证的方法,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

权限:
    问题:不用视图不用权限可以访问

    基本使用

    写上一个权限类  创建utils 中 permission.py文件
    class SvipPermisson(object):
        message = "必须是SVIP用户,否则无权访问"  #页面无权时报错提示
        def has_permission(self, request, view):
            if request.user.user_type != 3:
                return False
            return True

    class OrderView(APIView):
        """
        订单相关业务 (只有SVIP用户有权限)
        """
        #authentication_classes = [FirstAuthtication, Authtication]
        permission_classes = [MyPermission, ]
        def get(self, request, *args, **kwargs):
            self.dispatch
            ret = {'code':1000, "msg":None, 'data':None }
            try:
                ret['data'] = ORDER_DICT
            except Exception as e:
                pass
            return JsonResponse(ret)


self.check_permissons(request)

#返回权限的对象列表  或者说 [权限类的对象]
for permission in self.get_permissions():
    if not permission.has_permisstion(requst, self):  #如果ha_permisstion返回True 就不执行该函数 就可以通过权限认证
        self.permission_denied(
            request, message = getattr(permission, 'message', None)
        )
可以在全局配置 也可以自己定制

REST_FRAMEWORK = {
    #全局使用的认证类
    #认证
    "DEFAULT_AUTHENTICATION_CLASSES":['api.utils.auth.FirstAuthtication',]
    "UNAUTHENTICATED_USER":None  #匿名用户 request.user = None

    #权限
    "DEFAULT_PERMISSION_CLASSES":['api.utils.permission.SvipPermisson']
}

如果要自定义
可以在class UserInfoVIew(APIView):
    """
    订单相关业务(普通用户)
    """
    permission_classes = [PublicPermission,]  #写完这样 就不会读全局的权限访问 也可以为空 如permission_classes= []

源码流程:
    dispatch
    initial
    permission

内置的权限
from rest_framework.permissions import BasePermission
class SVIPPermission(BasePermission):   #按规范 需要继承BasePermission
    message = "必须是SVIP才能访问"
    def has_permission(self, request, view):
        if request.user.user_type != 3:
            return False
        return True


梳理:
    1.使用
        -类: 继承 BasePermission 必须实现 has_permission方法
        from rest_framework.permissions import BasePermission
        class SVIPPermission(BasePermission):   #按规范 需要继承BasePermission
            message = "必须是SVIP才能访问"
            def has_permission(self, request, view):
                if request.user.user_type != 3:
                    return False
                return True

        -返回值:
            True   #有权访问
            False  #无权访问
            抛出异常  一般不做异常抛出异常
            message = "SVIP"

        局部:
        permission_classes = [Mypermission]
        全局:
        REST_FRAMEWORK = {
            "EDEFAULT_PERMISSION_CLASSES" :['api.utils.perimission.MyPermission']
        }
        2.源码流程

 

转载于:https://www.cnblogs.com/Liang-jc/p/9314059.html

### 实现JWT认证 为了实现JSON Web Token (JWT) 认证,在`settings.py`文件中需向Django REST框架的默认认证类列表添加`JSONWebTokenAuthentication`[^1]。 配置如下所示: ```python REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), } ``` 安装必要的包对于集成JWT至关重要。通过pip可以轻松完成DRF及其JWT支持库的安装[^4]。 ```bash python -m pip install djangorestframework python -m pip install djangorestframework-jwt ``` 当请求到达时,`request.user`属性会返回由当前请求的身份验证类所确认的相关用户对象[^3]。此过程涉及调用内部方法来处理实际的身份验证逻辑并设置用户实例。 创建视图函数或类时,可以通过装饰器或者基于类的方法限制访问权限,仅允许经过适当授权的用户继续操作。例如: ```python from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView class ExampleView(APIView): permission_classes = [IsAuthenticated] def get(self, request, format=None): content = {'message': 'Hello, you are authenticated!'} return Response(content) ``` 上述代码片段展示了如何定义一个简单的API端点,并确保只有已登录且有效令牌存在的客户端才能成功发起GET请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值