python学习第九十八天:认证组件权限组件与频率组件

Posted luck_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习第九十八天:认证组件权限组件与频率组件相关的知识,希望对你有一定的参考价值。

认证组件

认证简介

只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件

组件的使用

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中

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

局部使用

在views需要认证的类中
authentication_classes = [TokenAuth, ]

权限组件

与认证类似

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‘,]
		}

频率组件

与认证类似

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‘,]
		}

以上是关于python学习第九十八天:认证组件权限组件与频率组件的主要内容,如果未能解决你的问题,请参考以下文章

“全栈2019”Java第九十八章:局部内部类访问作用域成员详解

DjangoRestFramework学习三之认证组件权限组件频率组件url注册器响应器分页组件

python学习第十八天

LeetCode第九十八题—验证二叉搜索树—Python实现

drf-jwt认证组件权限组件频率组件的使用

认证组件权限组件频率组件