DRF框架之 用户角色权限与访问频率的权限设置
1. 简单演示,创建一个models的数据库表
class User(models.Model):
name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
choice=((1,'超级用户'),(2,'普通用户'),(3,'穷逼用户'))
type=models.IntegerField(choices=choice,null=True)
# typ=models.ForeignKey(to='Type') # class Type(models.Model):
# id=models.AutoField(primary_key=True)
# name=models.CharField() class UserToken(models.Model):
token = models.CharField(max_length=64)
user=models.OneToOneField(to='User')
2. 编写一个角色权限的方法
#权限类
from rest_framework.permissions import BasePermission
class MyPermissions(BasePermission):
# message='你是2b'
def has_permission(self,request,view):
#代表是超级用户
if request.user.type ==1:
#如何去除type对应的文字 get_字段名_display()
user_str=request.user.get_type_display()
print(user_str) #超级用户,校验通过,返回true,校验失败,返回false
return True
else: return False
3. 演示调用方法
from rest_framework.request import Request
from rest_framework.authentication import SessionAuthentication
# from app01.MyAuth import MyAuthetication
from app01.MyAuth import MyPermissions
from app01.MyAuth import MyThrottling
class BooksView(APIView):
# authentication_classes=[MyAuthetication]
# permission_classes=[MyPermissions]
permission_classes=[]
throttle_classes=[MyThrottling]
def get(self,request):
#request.user就是当前登录用户
print(request.user)
print(request.auth)
return Response('ok')
4. 如何全局使用呢?
# 认证的全局配置
REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.MyAuthetication',],
'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.MyPermissions',], }
5.如何局部使用呢?
from app01.MyAuth import MyPermissions
class BooksView(APIView):
permission_classes=[MyPermissions]
def get(self,request):
#request.user就是当前登录用户
print(request.user)
print(request.auth)
return Response('ok')
# 这样就是简单的局部使用了
drj框架之 访问频率类设置
频率
频率是什么?
同一时间段内,只能访问多少次 频率的使用:
-写一个类:
from rest_framework.throttling import SimpleRateThrottle
class MyThrottling(SimpleRateThrottle):
scope='xxx'
#必须重写get_cache_key,返回什么,频率组件会以什么做限制(比如返回ip,它就以ip做限制,如果返回user_id,它会以用户id做限制)
def get_cache_key(self, request, view): return request.META.get('REMOTE_ADDR')
什么是频率,如何做设置
#drf给我们提供的频率控制类
from rest_framework.throttling import SimpleRateThrottle
class MyThrottling(SimpleRateThrottle):
scope='luffy'
def get_cache_key(self, request, view):
self.get_ident(request)
return request.META.get('REMOTE_ADDR') #注意: 这里的scope='luffy' 是按照项目名字来的,
# 认证的全局配置
REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.MyAuthetication',],
'DEFAULT_PERMISSION_CLASSES':['app01.MyAuth.MyPermissions',],
# 'DEFAULT_THROTTLE_CLASSES':['app01.MyAuth.MyThrottling'],
'DEFAULT_THROTTLE_RATES': {
'luffy': '10/day'
}
#注意 在做全局生效的时候 'luffy' : 必须和之前写的策略的scope = 'luffy' 要对应起来
#注意 '10/day' 这里可以自己定义, 一天访问10次,如果想要 一分钟访问6次 就是 '6/m'
}
from app01.MyAuth import MyPermissions
from app01.MyAuth import MyThrottling
class BooksView(APIView): throttle_classes=[MyThrottling] #局部使用
#注意: 在编写程序的时候访问频率还是很重要的,这样东西只要复制简单修改下就可以使用了!!!!
补充:
1 如果token信息放到请求头中,如何取?
# request._request.META
token=request.META.get('token')
2 django的GET,POST,META,body分别对应HTTP请求的哪部分?
-GET---->http请求路径中数据部分
-POST--->http请求以urlencode/formdata形式编码的body体部分
-META--->http请求头部信息
-body--->http请求请求体部分
-path,get_full_path(),FILES
DRF框架之 用户角色权限与访问频率的权限设置的更多相关文章
- django Rest Framework----认证/访问权限控制/访问频率限制 执行流程 Authentication/Permissions/Throttling 源码分析
url: url(r'books/$',views.BookView.as_view({'get':'list','post':'create'})) 为例 当django启动的时候,会调用执行vie ...
- rest_framework组件之认证,权限,访问频率
共用的models from django.db import models # Create your models here. class User(models.Model): username ...
- Django REST framework 自定义(认证、权限、访问频率)组件
本篇随笔在 "Django REST framework 初识" 基础上扩展 一.认证组件 # models.py class Account(models.Model): &qu ...
- Linux ftp访问控制配置,包括访问ftp权限和访问ftp目录权限
在Linux 上建立用户为website1 home目录是/data/home/website1 但是用ftp登录以后,路径可以随便切换,并且可以进入别的站点下 进行增.删.改 本篇的目的是:在lin ...
- WordPress用户角色及其权限管理编辑插件:User Role Editor汉化版
如果Wordpress默认的用户角色及权限不能满足您的需求,又觉得修改代码编辑用户权限太麻烦.那不妨试试User Role Editor,Wordpress用户角色及其权限管理编辑插件. User R ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- RestFramework自定制之认证和权限、限制访问频率
认证和权限 所谓认证就是检测用户登陆与否,通常与权限对应使用.网站中都是通过用户登录后由该用户相应的角色认证以给予对应的权限. 权限是对用户对网站进行操作的限制,只有在拥有相应权限时才可对网站中某个功 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
随机推荐
- How to run Python code from Sublime
How to run Python Code from Sublime,and How to run Python Code with input from sublime Using Sublime ...
- 我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore
我之前还发起过一个 项目, 名字也叫 HtmlCore, 见 <我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore> https://www.cnblo ...
- eclipse项目改为maven项目导致svn无法比较历史数据的解决办法
这个问题没有找到合适的答案,最终自己想出了一个解决方案,在此记录下. 问题描述 在将老的eclipse项目重构为maven项目时,我这边是新建了一个maven项目,然后将对应的数据分别放到相应的位置, ...
- linux 域名解析
vi /etc/hosts 中添加ip地址和域名 111.111.111.111 aa.swddjtc.cn 然后重启 /etc/init.d/network restart
- Taro 生命周期
Taro 新加的生命周期 说明 网址 componentDidShow() 在此生命周期中通过 this.$router.params,可以访问到程序初始化参数 https://nervjs.gith ...
- 剑指offer 9.递归和循环 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题还是编程题? 数学渣渣看到心拔凉拔凉的, 要用到数学归纳法来 ...
- Javascript 使用postMessage对iframe跨域传值或通信
实现目标:两个网站页面实现跨域相互通信 当前例子依赖于 jQuery 3.0 父页面代码:www.a.com/a.html <iframe id="myIframe" src ...
- Eclipse中Java build path的使用
1.Eclipse中,工程属性的Java Build Path的Library标签页下,有如下几个按钮:Add Jars...添加JAR包,是指本Eclipse当前包含的工程中的,在工程列表下选取即可 ...
- 必须学会git和maven
转自: http://tieba.baidu.com/p/3458400116 很多人应该用过svn cvs之类的代码版本管理工具,git也是其中之一. svn和git最大的几个区别要点,svn必须要 ...
- 错误界面 SQL2008备份集中的数据库备份与现有的数据库不同,错误号码:3154。
转载来源 https://blog.csdn.net/zaocha321/article/details/8466735 因为我也用这个方法成功了.所以记录下来 错误界面 SQL2005备份集中的数 ...