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