博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rest_framework组件
阅读量:4325 次
发布时间:2019-06-06

本文共 2985 字,大约阅读时间需要 9 分钟。

 

认证组件

局部认证

在需要认证的视图类里加上authentication_classes = [认证组件1类名,认证组件2类名....]

示例如下:

seralizers.py

from rest_framework import serializersfrom app01 import modelsclass PublishSerializers(serializers.ModelSerializer):    class Meta:        model = models.Publish        fields = '__all__'

auth.py

from rest_framework.authentication import BaseAuthenticationfrom rest_framework import exceptionsfrom app01 import modelsclass TokenAuth(BaseAuthentication):    def authenticate(self,request):        '''函数名必须叫authenticate'''        # 验证条件根据需求设置(此示例为需要有token值)        token = request.GET.get('token')        token_obj = models.Token.objects.filter(token=token).first()        if not token_obj:            # 如果验证失败,需要跑出AuthenticationFailed错误            raise exceptions.AuthenticationFailed("验证失败!")        else:            user = token_obj.user            # 如果验证成功,需要返回一个元组,分别是用户以及验证类的实例对象,然后内部会赋值给request.user和request.auth            return user.username,token_obj

views.py

from rest_framework import viewsetsfrom app01.auth import TokenAuthclass PublishViewSet(viewsets.ModelViewSet):    # 在这里配置authentication_classes    # 注意,值为一个列表,可以放多个认证组件类名       authentication_classes = [TokenAuth]    queryset = models.Publish.objects.all()    serializer_class = serializer.PublishSerializers

全局认证

在setting.py里配置如下:

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

  这样配置之后,每个视图类都要经过认证成功之后才能执行下一步,

如果有某些方法不需要认证,如login函数,则需要在login函数中单独加入一个配置属性:

authentication_classes = [] #自己的类里有的话就调用此类的配置,为空既什么都不做

权限认证

局部认证

permission.py

from app01 import modelsclass VipPermission():    def has_permission(self,request,view):        # 经过认证组件之后将用户名赋值给了request.user        # 这里可以直接取到        username = request.user        user = models.User.objects.filter(username=username).first()        # 如果用户的vip值为1,即为True,则通过认证,否则return False        if user.vip:            return True        else:            return False

views.py

from rest_framework import viewsetsfrom app01.auth import TokenAuthfrom app01.permission import VipPermissionclass PublishViewSet(viewsets.ModelViewSet):    authentication_classes = [TokenAuth]    permission_classes = [VipPermission]    queryset = models.Publish.objects.all()    serializer_class = serializer.PublishSerializers

  这个时候如果登录用户是vip,则会继续执行下一步,如果是普通用户,则会返回错误信息,如下:

{"detail":"You do not have permission to perform this action."}

  如果需要自定义错误信息,只需要在类里定义一个message属性即可,如下:

message="只有超级用户才能访问"

全局认证

REST_FRAMEWORK = {    # 认证组件    "DEFAULT_AUTHENTICATION_CLASSES": ["app01.auth.TokenAuth",],    # 权限组件    "DEFAULT_PERMISSION_CLASSES": ["app01.permission.VipPermission",],}

频率认证

局部认证

这是用DRF 自己的频率限制

 格式如下:

class VisitRateThrottle(object):    def allow_request(self,request,view):        # 要求访问站点的频率不能超过每分钟20次等等        if 1:            # 如果在限制之内,则返回True            return True        else:            return False

  然后在需要进行限制的视图类中加入如下配置:

throttle_classes = [VisitRateThrottle]

 

全局认证

全局认证

这个是  用DRF 自己的频率限制

 

 。。。

 
 

转载于:https://www.cnblogs.com/jiangchunsheng/p/9117418.html

你可能感兴趣的文章
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
阶段3 2.Spring_01.Spring框架简介_03.spring概述
查看>>
阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合
查看>>
阶段3 2.Spring_01.Spring框架简介_04.spring发展历程
查看>>
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门
查看>>
阶段3 2.Spring_04.Spring的常用注解_3 用于创建的Component注解
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_04.Spring的常用注解_5 自动按照类型注入
查看>>
阶段3 2.Spring_04.Spring的常用注解_7 改变作用范围以及和生命周期相关的注解
查看>>