認證組件權限組件與頻率組件

認證組件

認證簡介

只有認證經過的用戶才能訪問指定的url地址,好比:查詢課程信息,須要登陸以後才能查看,沒有登陸,就不能查看,這時候須要用到認證組件app

組件的使用

1)models層: class User(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=32) user_type=models.IntegerField(choices=((1,'超級用戶'),(2,'普通用戶'),(3,'二筆用戶'))) class UserToken(models.Model): user=models.OneToOneField(to='User') token=models.CharField(max_length=64) 2)新建認證類(驗證經過return兩個參數) from rest_framework.authentication import BaseAuthentication class TokenAuth(): def authenticate(self, request): token = request.GET.get('token') token_obj = models.UserToken.objects.filter(token=token).first() if token_obj: return else: raise AuthenticationFailed('認證失敗') def authenticate_header(self,request): pass 3)viewdef get_random(name): import hashlib import time md=hashlib.md5() md.update(bytes(str(time.time()),encoding='utf-8')) md.update(bytes(name,encoding='utf-8')) return md.hexdigest() class Login(APIView): def post(self,reuquest): back_msg={'status':1001,'msg':None} try: name=reuquest.data.get('name') pwd=reuquest.data.get('pwd') user=models.User.objects.filter(username=name,password=pwd).first() if user: token=get_random(name) models.UserToken.objects.update_or_create(user=user,defaults={'token':token}) back_msg['status']='1000' back_msg['msg']='登陸成功' back_msg['token']=token else: back_msg['msg'] = '用戶名或密碼錯誤' except Exception as e: back_msg['msg']=str(e) return Response(back_msg) class Course(APIView): authentication_classes = [TokenAuth, ] def get(self, request): return HttpResponse('get') def post(self, request): return HttpResponse('post') 

全局使用

在setting中dom

REST_FRAMEWORK={
    "DEFAULT_AUTHENTICATION_CLASSES":["app01.service.auth.Authentication",] } 

局部使用

在views須要認證的類中 authentication_classes = [TokenAuth, ] 

權限組件

與認證相似ide

1 寫一個類 class MyPermission(): def has_permission(self,request,view): token=request.query_params.get('token') ret=models.UserToken.objects.filter(token=token).first() if ret.user.type==2: # 超級用戶能夠訪問 return True else: return False 2 局部使用: permission_classes=[MyPermission,] 3 全局使用: REST_FRAMEWORK={ 'DEFAULT_PERMISSION_CLASSES':['utils.common.MyPermission',] } 

頻率組件

與認證相似post

1 寫一個類: from rest_framework.throttling import SimpleRateThrottle class VisitThrottle(SimpleRateThrottle): scope = 'xxx' def get_cache_key(self, request, view): return self.get_ident(request) 2 在setting裏配置: 'DEFAULT_THROTTLE_RATES':{ 'xxx':'5/h', } 3 局部使用 throttle_classes=[VisitThrottle,] 4 全局使用 REST_FRAMEWORK={ 'DEFAULT_THROTTLE_CLASSES':['utils.common.MyPermission',] }
相關文章
相關標籤/搜索