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']
}
目录
相关文章
|
前端开发
jeecgboot数据权限用法
jeecgboot数据权限用法
1130 0
jeecgboot数据权限用法
|
3月前
|
数据安全/隐私保护 网络架构 Python
DRF-Permission组件源码分析及改编源码
【10月更文挑战第25天】本文分析了 Django REST Framework (DRF) 的 Permission 组件源码,并提供了自定义权限类的示例。首先介绍了 `BasePermission` 类的基础结构和常见的内置权限类,如 `IsAuthenticated` 和 `IsAdminUser`。接着详细说明了权限检查的流程,并展示了如何创建一个自定义权限类 `IsSpecificIPPermission`,仅允许特定 IP 地址的用户访问。最后,演示了如何在视图中使用自定义权限类。通过这些内容,读者可以更好地理解和定制 DRF 的权限管理功能。
|
3月前
|
前端开发 安全 API
前端全栈之路Deno篇(三):一次性搞懂和学会用Deno 2.0 的权限系统详解和多种权限配置权限声明方式
本文深入解析了 Deno 2.0 的权限系统,涵盖主包和第三方包的权限控制机制,探讨了通过命令行参数、权限 API 和配置文件等多种权限授予方式,并提供了代码示例和运行指导,帮助开发者有效管理权限,提升应用安全性。
|
前端开发 JavaScript
dva的简单使用流程
dva的简单使用流程
95 0
|
JSON 前端开发 Shell
重点内容回顾-DRF
重点内容回顾-DRF
|
JSON 数据格式 Python
【阶段小结】--使用Django写接口实现数据的增删改查操作
【阶段小结】--使用Django写接口实现数据的增删改查操作
|
缓存 自然语言处理 搜索推荐
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
169 0
|
API 开发工具 数据库
Yii2.0中如何配置xunsearch?具体步骤是怎样的?底层原理是什么?
Yii2.0中如何配置xunsearch?具体步骤是怎样的?底层原理是什么?
136 0
Yii2的文档怎么写?具体步骤是怎样的?底层原理是什么?
Yii2的文档怎么写?具体步骤是怎样的?底层原理是什么?
131 0
|
jenkins 持续交付 Python
python接口自动化(十四)--session关联接口(详解)
上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下。
230 0
python接口自动化(十四)--session关联接口(详解)