DRF-权限源码流程和基本使用

简介: django rest_framework 权限在视图里面去设置权限class OrderView(APIView): authentication_classes = [MyAuthtication] def get(self,...

django rest_framework 权限

在视图里面去设置权限

class OrderView(APIView):
    authentication_classes = [MyAuthtication]

    def get(self, request, *args, **kwargs):
        ret = {"state_code": 1000, "msg": "数据请求成功", "data": ORDER_DICT}
        if request.user.user_type != 3:
            ret = {"state_code": 1001, "msg": "无权限", "data": []}

        return JsonResponse(ret)
img_412a243fd3a39392c822d09205f944b1.png
微信截图_20190111090323
  • postman校验
img_18f82d3991fcde081dd9705cd62f0317.png
微信截图_20190111090426

基本使用

class MyPermission(object):

    def has_permission(self,request,view):
        if request.user.user_type != 3:
            return False
        return True
                                            
            
class OrderView(APIView):
    """
    订单相关业务(只有SVIP用户有权限)
    """
    permission_classes = [MyPermission,]
                    
    def get(self,request,*args,**kwargs):
        # request.user
        # request.auth
        self.dispatch
        ret = {'code':1000,'msg':None,'data':None}
        try:
            ret['data'] = ORDER_DICT
        except Exception as e:
            pass
        return JsonResponse(ret)
img_b0ff4aa75942e02083d0570e12ca1f4f.png
微信截图_20190111090732
  • 我们可以添加一个message
class MyPermission(object):
    message = "无权访问"
    def has_permission(self, request, view):
        if request.user.user_type != 3:
            return False
        return True
img_3f5058f58f23637b9ddc2d18db3ea9d9.png
微信截图_20190111091047

源码流程

梳理:

  1. 使用
    • 类,必须继承:BasePermission,必须实现:has_permission方法
from rest_framework.permissions import BasePermission

class SVIPPermission(BasePermission):
    message = "必须是SVIP才能访问"
    dehas_permission(self,request,view):
        if request.useuser_type != 3:
            return False
        return True
  • 返回值:
    • True, 有权访问
    • False,无权访问
  • 局部
class UserInfoView(APIView):
    """
    订单相关业务(普通用户、VIP)
    """
    permission_classes = [MyPermission1, ]

    def get(self,request,*args,**kwargs):
        return HttpResponse('用户信息')
  • 全局
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES":['api.utils.permission.SVIPPermission']
}
目录
相关文章
|
3月前
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之默认用户的生成流程
该文档介绍了SpringSecurity6中默认用户的生成流程。在`SecurityAutoConfiguration`源码中,通过`SecurityProperties`配置类,系统默认创建了一个名为"user"的用户,其密码是一个随机生成的UUID。这个用户是在没有在`application.properties`中设置相关配置时自动创建的。
|
4月前
|
安全 前端开发 Java
针对 SpringSecurity 鉴权流程做了一个详细分析,让你明白它是如何执行的!
针对 SpringSecurity 鉴权流程做了一个详细分析,让你明白它是如何执行的!
225 0
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
57 0
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
45 0
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装1
前端学习笔记202305学习笔记第二十二天-新增修改api的封装1
44 0
Yii2的文档怎么写?具体步骤是怎样的?底层原理是什么?
Yii2的文档怎么写?具体步骤是怎样的?底层原理是什么?
121 0
|
API 开发工具 数据库
Yii2.0中如何配置xunsearch?具体步骤是怎样的?底层原理是什么?
Yii2.0中如何配置xunsearch?具体步骤是怎样的?底层原理是什么?
122 0
|
缓存 自然语言处理 搜索推荐
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
145 0
|
API 开发者
Yii2如何使用RESTful API?具体步骤是怎样的?写出实例代码
Yii2如何使用RESTful API?具体步骤是怎样的?写出实例代码
102 0
如何使用Yii2.0框架API文档中的ErrorHandler类?具体步骤是怎样的?
如何使用Yii2.0框架API文档中的ErrorHandler类?具体步骤是怎样的?
196 0