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']
}
目录
相关文章
|
9月前
|
SQL XML Java
若依框架 --- 使用数据权限功能
若依框架 --- 使用数据权限功能
935 0
|
前端开发
jeecgboot数据权限用法
jeecgboot数据权限用法
1165 0
jeecgboot数据权限用法
|
8月前
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之默认用户的生成流程
该文档介绍了SpringSecurity6中默认用户的生成流程。在`SecurityAutoConfiguration`源码中,通过`SecurityProperties`配置类,系统默认创建了一个名为"user"的用户,其密码是一个随机生成的UUID。这个用户是在没有在`application.properties`中设置相关配置时自动创建的。
|
4月前
|
数据安全/隐私保护 网络架构 Python
DRF-Permission组件源码分析及改编源码
【10月更文挑战第25天】本文分析了 Django REST Framework (DRF) 的 Permission 组件源码,并提供了自定义权限类的示例。首先介绍了 `BasePermission` 类的基础结构和常见的内置权限类,如 `IsAuthenticated` 和 `IsAdminUser`。接着详细说明了权限检查的流程,并展示了如何创建一个自定义权限类 `IsSpecificIPPermission`,仅允许特定 IP 地址的用户访问。最后,演示了如何在视图中使用自定义权限类。通过这些内容,读者可以更好地理解和定制 DRF 的权限管理功能。
|
4月前
|
前端开发 安全 API
前端全栈之路Deno篇(三):一次性搞懂和学会用Deno 2.0 的权限系统详解和多种权限配置权限声明方式
本文深入解析了 Deno 2.0 的权限系统,涵盖主包和第三方包的权限控制机制,探讨了通过命令行参数、权限 API 和配置文件等多种权限授予方式,并提供了代码示例和运行指导,帮助开发者有效管理权限,提升应用安全性。
104 0
|
数据安全/隐私保护
fastadmin中写接口是时Validate规则验证自定义如何用
fastadmin中写接口是时Validate规则验证自定义如何用
305 0
|
缓存 前端开发 NoSQL
vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单
vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单
|
前端开发
react实战笔记174:权限案例创建1
react实战笔记174:权限案例创建1
72 0
react实战笔记174:权限案例创建1
|
前端开发
react实战笔记175:权限案例创建2
react实战笔记175:权限案例创建2
74 0
react实战笔记175:权限案例创建2
|
缓存 前端开发 JavaScript
如何优化Yii2视图文件的加载速度?具体步骤是怎样的?底层原理是什么?
如何优化Yii2视图文件的加载速度?具体步骤是怎样的?底层原理是什么?
171 0

热门文章

最新文章