DRF-认证权限频率

DRF认证权限频率 通过引发RestrictError(django.db.IntegrityError的一个子类)来防止删除被引用的对象, 与PROTECT不同的是, 如果被引用的对象也引用了一个在统一操作中被删除的不同对象, 但通过CASCADE关系,则允许删除被引用的对象。【当主表中的一条数据删除时, 从表中所有的关联数据字段设置为SET()中设置的值, 与models.SET_DEFAULT相似, 只不过此时从表中的相关字段不需要设置default参数】3. 重写authenticate方法。 阅读详情

Python微信订餐小程序课程视频

https://edu.youkuaiyun.com/course/detail/36074

Python实战量化交易理财系统

https://edu.youkuaiyun.com/course/detail/35475
目录* DRF-认证权限频率

DRF-认证权限频率

DRF 路由组件

前后端混合开发,可以通过HttpResponse对象来设置cookie进而校验登录,现在前后端分离开发,用不到cookie,那么该怎么认证?DRF提供了认证的方法

我们知道在APIView执行的过程中,在dispatch方法中走了三大认证self.initial(request, *args, **kwargs)

def initial(self, request, *args, **kwargs):
	···
    self.perform_authentication(request)  # 认证
    self.check_permissions(request)    # 权限
    self.check_throttles(request)    # 频率

认证

需求

我们通过登录接口,来模拟认证登录,登录成功返回json字符串,并且携带随机字符串(uuid模拟生成token),通过token随机字符串来判断用户是否登录,登录了就更新token,首次登录就存token;

分析

  • 创建User表
  • 创建UserToken表,和User一对一关系
  • 前端传入用户名,密码
  • 数据库取校验用户信息
  • 校验成功,Token表内新增一条记录,返回给前端json格式字符串,字符串中带一个随机字符串

登录接口

模型

from django.db import models


class User(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=16)
    user_type = models.IntegerField(choices=((1, '超级管理员'), (2, '普通管理员'), (3, '普通用户')))

    def get\_code(self):
        self.get_user_type_display()
        print(self.get_user_type_display())

class UserToken(models.Model):
    user = models.OneToOneField(to=User,on_delete=models.CASCADE)
    token = models.CharField(max_length=32)

视图

from rest_framework.response import Response
from rest_framework.viewsets import ViewSet
from rest_framework.decorators import action
from app01 import models


class UserView(ViewSet):
    @action(methods=['POST'], detail=False)
    def login(self, request, *args, **kwargs):
        # 获取数据
        username = request.data.get('username')
        password = request.data.get('password')
        user = models.User.objects.filter(username=username, password=password).first()
        if user:
            # 如果user有值说明登录成功,生产随机字符串,存入数据库,如果重复登录那么就更新随机字符串
            import uuid
            uuid_str = uuid.uuid4()
            # print(type(uuid\_str)) # 
            token = str(uuid_str)
            # 如果存在就更新,如果不存在就新增,指定搜索对象,然后defaults指定更新内容
            models.UserToken.objects.update_or_create(user=user,defaults={'token': token} )
            # 返回随机字符串
            return Response({'code': 100, 'msg': '登录成功', 'token': token})
        return Response({'code': 101, 'msg': '登录失败,用户名或密码错误'})


路由

from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('user',views.UserView,'user')
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(router.urls))
]

image

image

认证

  • 局部使用:写一个认证类,通过authentication_classes参数指定认证类
class BookView(ModelViewSet):
    # 局部使用
    authentication_classes = [LoginAuth,]

  • 全局使用:写一个认证类,settings.py配置,所有的视图类生效
REST_FRAMEWORK={
      "DEFAULT\_AUTHENTICATION\_CLASSES":["app01.auth.LoginAuth",]
  		}

  • 局部禁用:authentication_classes = []

我们知道平时生活中,有一些接口是认证后才能调用的,比如我们登录后才能查看个人站点内容等···

在执行视图函数之前执行了认证方法:self.perform_authentication(request)

这里写一个认证demo,只有登录过的才能查看Book表

'''auth.py'''
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01 import models

# 写一个类继承BaseAuthentication
class LoginAuth(BaseAuthentication):
    # 重写authenticate方法
    def authenticate(self, request):
        # 获取前端携带的token,token放在哪是自己规定的,比如从查询参数中获取
        token = request.query_params.get('token')
        # 比对随机字符串
        user_token = models.UserToken.objects.filter(token=token).first()
        if user_token:
            # 登录了,返回当前登录用户和token
            return user_token.user,token
        else:
            # 没有登录,抛异常
            raise AuthenticationFailed('您没有登录,请登录')
            
'''serializer.py'''
from rest_framework import serializers
from app01 import models
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        fields = '\_\_all\_\_'
'''models.py'''
class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(decimal_places=2,max_digits=5)
    author = models.CharField(max_length=32)
'''urls.py'''
from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('user',views.UserView,'user')
router.register('books',views.BookView,'books')
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(router.urls))
]

  • 返回的user_token和token值可以通过在视图类里重写list方法拿到
'''views.py'''
from .auth import LoginAuth
class BookView(ModelViewSet):
    # 局部使用
    authentication_classes = [LoginAuth,]
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer
	
    def list(self, request, *args, **kwargs):
        print(request.user) # User object (1)
        print(request.user.username) # HammerZe
        print(request.auth) # de914129-2f08-41a4-a7a9-de289badb659
        return super().list(request, *args, **kwargs)


总结

  • 返回的第一个(user_token.user),给了request.user,就是当前登录用户对象
  • 返回的第二个(token),给了request.auth,就是token串
  • 局部禁用和全局配置使用的时候要注意,全局如果认证的时候是每个视图函数都认证,就比如登录视图认证登录,那么就死循环了,不认证不能登录,就相当于做核酸需要核酸单···

权限

和认证一样,都是写一个类去继承,写权限继承BasePermission,重写has_permission方法,判断如果有权限,返回True,如果没有权限,返回False

然后局部使用或者全局使用,或局部禁用

作用

  • 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问
  • 认证通过, 可以进行下一步验证 (频率认证)
  • 认证失败, 抛出权限异常结果

使用

  • 局部使用:permission_classes = [UserPermission, ]
  • 全局使用:
REST_FRAMEWORK={
			"DEFAULT\_PERMISSION\_CLASSES":["app01.auth.UserPermission",]
		}

  • 局部禁用:permission_classes = []

需求

  • 认证登录成功后,普通用户只能查询一条或所有
  • 管理员登录后才能通过权限认证进行修改,增加,删除操作

权限类

class UserPermission(BasePermission):
    def has\_permission(self, request, view):
        # 没有权限的提示信息
        self.message = '您是:%s,没有权限' % request.user.get_user_type_display()
        # 如果有权限,返回True,没有权限返回False
        # 权限类,在认证类之后,request.user有了当前登录用户
        user_type = request.user.user_type
        print(user_type)
        if user_type < 3:  # 只要不是1,2,就没有权限
            return True
        else:
            return False

视图

from .auth import LoginAuth, UserPermission
from rest_framework.mixins import RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin,ListModelMixin,CreateModelMixin
from rest_framework.viewsets import GenericViewSet

class BookView(RetrieveModelMixin,ListModelMixin,GenericViewSet):
    # 局部使用,普通用户登录后只能获取一条或所有
    authentication_classes = [LoginAuth, ]
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer

class BookDetailView(CreateModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
    # 局部使用,普通用户没有权限
    authentication_classes = [LoginAuth, ]
    permission_classes = [UserPermission, ]
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer


路由

from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('user',views.UserView,'user')
router.register('books',views.BookView,'books')
router.register('bookdetail',views.BookDetailView,'bookdetail')
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(router.urls))
]

image

总结

  • 5个接口分成了俩视图类写
  • BookView:获取所有,获取单条API
  • BookDetailView:删除,修改,新增API
  • 这俩视图都需要登录:authentication_classes = [LoginAuth, ]
  • BookView只要登陆就可以操作
  • BookDetailView必须有权限才能,加了一个权限,permission_classes = [UserPermission, ]

步骤

  • 第一步:写一个类,继承BasePermission,重写has_permission,判断如果有权限,返回True,如果没有权限,返回False
  • 第二步:局部使用和全局使用

注意

  • 如果使用ModelViewSet快速写五个接口,那么在验证认证和权限的时候就会错乱,获取和修改等操作都在一个视图里了,分开写会好一点

频率

作用

  • 限制视图接口被访问的频率次数
  • 限制条件 : IP、ID、唯一键
  • 频率周期 : 时(h)、分(m)、秒(s)
  • 频率次数 : [num] / s
  • 没有达到限制频率可正常访问接口
  • 达到了频率限制次数, 在限制时间内不能进行访问, 超过时间后可以正常访问

使用

频率类

# 频率类
class IPThrottle(SimpleRateThrottle):
    scope = 'ip'

    # get\_cache\_key返回什么就以什么方法做限制,限制条件必须唯一,比如用户id
    def get\_cache\_key(self, request, view):
        # 限制ip地址,从request.META字典中获取ip
        '''
 request.META:请求头中的数据
 '''
        return request.META.get('REMOTE\_ADDR')  # 客户端ip

配置文件

REST_FRAMEWORK={
    'DEFAULT\_THROTTLE\_RATES': {
        'ip': '3/m'  # minute\_3是scope的字符串,一分钟访问3次
}

局部使用

class BookView(RetrieveModelMixin, ListModelMixin, GenericViewSet):
    authentication_classes = [LoginAuth, ] # 登录认证
    permission_classes = [UserPermission, ] # 权限限制
    throttle_classes = [IPThrottle, ]  # 频率限制
    
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer

全局使用

REST_FRAMEWORK={

    'DEFAULT\_THROTTLE\_CLASSES': (  # 全局配置频率类
        'app01.auth.IPThrottle'
    ),
  		}

image

总结

  1. 写一个类,继承SimpleRateThrottle,重写类属性scope,scope值自定义,配置文件中一致就行,重写get_cache_key方法,返回什么限制什么
  2. 在配置文件中配置,限制频率
  3. 局部/全局使用

认证权限频率+五个接口

模型

from django.db import models


# Create your models here.


class User(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=16)
    user_type = models.IntegerField(choices=((1, '超级管理员'), (2, '普通管理员'), (3, '普通用户')))


class UserToken(models.Model):
    user = models.OneToOneField(to=User,on_delete=models.CASCADE)
    token = models.CharField(max_length=32)

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(decimal_places=2,max_digits=5)
    author = models.CharField(max_length=32)

视图

from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet

from app01 import models
from app01 import serializer


class UserView(ViewSet):
    @action(methods=['POST'], detail=False)
    def login(self, request, *args, **kwargs):
        # 获取数据
        username = request.data.get('username')
        password = request.data.get('password')
        user = models.User.objects.filter(username=username, password=password).first()
        if user:
            # 如果user有值说明登录成功,生产随机字符串,存入数据库,如果重复登录那么就更新随机字符串
            import uuid
            uuid_str = uuid.uuid4()
            # print(type(uuid\_str)) # 
            token = str(uuid_str)
            # 如果存在就更新,如果不存在就新增,指定搜索对象,然后defaults指定更新内容
            models.UserToken.objects.update_or_create(user=user, defaults={'token': token})
            # 返回随机字符串
            return Response({'code': 100, 'msg': '登录成功', 'token': token})
        return Response({'code': 101, 'msg': '登录失败,用户名或密码错误'})


from .auth import LoginAuth, UserPermission, IPThrottle

from rest_framework.mixins import RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, ListModelMixin, \
    CreateModelMixin
from rest_framework.viewsets import GenericViewSet


class BookView(RetrieveModelMixin, ListModelMixin, GenericViewSet):
    # 局部使用,普通用户登录后只能获取一条或所有
    authentication_classes = [LoginAuth, ]
    throttle_classes = [IPThrottle, ]
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer


class BookDetailView(CreateModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
    # 局部使用,普通用户没有权限
    authentication_classes = [LoginAuth, ]
    permission_classes = [UserPermission, ]
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookSerializer


序列化器

from rest_framework import serializers
from app01 import models
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        fields = '\_\_all\_\_'

认证权限频率类

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.permissions import BasePermission
from rest_framework.throttling import SimpleRateThrottle

from app01 import models


# 认证类
class LoginAuth(BaseAuthentication):
    # 重写authenticate方法
    def authenticate(self, request):
        # 获取前端携带的token,token放在哪是自己规定的,比如从查询参数中获取
        token = request.query_params.get('token')
        # 比对随机字符串
        user_token = models.UserToken.objects.filter(token=token).first()
        if user_token:
            # 登录了,返回当前登录用户和token
            return user_token.user, token
        else:
            # 没有登录,抛异常
            raise AuthenticationFailed('您没有登录,请登录')


# 权限类
class UserPermission(BasePermission):
    def has\_permission(self, request, view):
        # 没有权限的提示信息
        self.message = '您是:%s,没有权限' % request.user.get_user_type_display()
        # 如果有权限,返回True,没有权限返回False
        # 权限类,在认证类之后,request.user有了当前登录用户
        user_type = request.user.user_type
        print(user_type)
        if user_type < 3:  # 只要不是1,2,就没有权限
            return True
        else:
            return False

# 频率类
class IPThrottle(SimpleRateThrottle):
    scope = 'ip'

    # get\_cache\_key返回什么就以什么方法做限制,限制条件必须唯一,比如用户id
    def get\_cache\_key(self, request, view):
        # 限制ip地址,从request.META字典中获取ip
        '''
 request.META:请求头中的数据
 '''
        return request.META.get('REMOTE\_ADDR')  # 客户端ip


配置文件

REST_FRAMEWORK={
    'DEFAULT\_THROTTLE\_RATES': {
        'ip': '3/m'  # minute\_3是scope的字符串,一分钟访问3次
},

路由


from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('user',views.UserView,'user')
router.register('books',views.BookView,'books')
router.register('bookdetail',views.BookDetailView,'bookdetail')
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(router.urls))
]


六,DRF 认证-权限-频率 为了方便接下来的学习,我们创建一个新的子应用 opt python manage.py startapp opt 因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python3 manage.py makemigrations python3 manage.py migrate python3 manage.py createsuperuser 创建管理员以后,访问admin站点,先修改站点的语言配置 settings.py LANGUAGE_COD 阅读详情

相关推荐

使用FloodRisk2插件进行洪水风险评估

入汛以来,长江流域持续的强降雨使得沿岸多地成为洪水风险极高地区,抗洪、抢险、救灾继新冠病毒之后成为又一个攻坚阵地。如何科学地评估洪水风险,是快速决策的关键。 实际生活中,根据风险是否可控,一般将洪水风险大致分为两类:一类是通过数据分析可以得出其发生的可能性和后果,如强降雨引发的区域性洪水、水库/大坝溃决洪水等。这类洪水可以通过有关资料分析和设定一定条件计算得到可能的损失后果,也就是说,风险可以预判。另一类洪水风险基本是未知的,如滑坡堵塞河道形成堰塞湖引发的洪水,无法预知事件发生的地点和规模,具体的洪水风险无

QGISClass的博客 2879

DRF的认证,频率,权限

1,DRF的认证 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一标识和在服务器中的标识做匹配,成功就通过,不成功就不通过. 认证的使用,见下图: 1.2,DRF的相关代码: model表的创建 view视图函...

weixin_30907523的博客 126

别再瞎改注册表了!实测Win10/Win11远程桌面60帧的正确姿势(附ToDesk对比)

本文深入解析Windows远程桌面60帧优化的科学方法,揭示常见误区并提供实测有效的解决方案。从版本差异到硬件加速,再到第三方工具对比(如ToDesk),帮助用户避开无效的注册表修改,实现流畅的远程桌面体验。

weixin_33738555的博客 344

DRF之权限认证频率组件

  在编程的世界中,我们认为,用户输入的所有数据都是不可靠的,不合法的,直接使用用户输入的数据是不安全的,不仅如此,我们还需要控制用户的访问行为,接下来,我们要学习认证组件、权限组件、频率组件。 mixin之retrieve源码剖析   我们分析过mixin中create方法的源码,今天,create方法比较简单,今天,我们来分析分析retrieve方法的源码,它比create方法稍...

a86123969的博客 175

激光SLAM算法性能对比:在Ubuntu20.04上实测Point-LIO/FAST_LIO2/Faster-LIO的运行效果

本文在Ubuntu 20.04平台上对Point-LIO、FAST-LIO2和Faster-LIO三款激光SLAM算法进行了深度实测与性能对比。通过量化分析绝对轨迹误差、CPU/内存占用及单帧处理延迟等核心指标,结合室内外场景数据,为高精度测绘、服务机器人及自动驾驶等不同应用场景提供了清晰的选型指南和实战调优建议。

weixin_28335283的博客 369

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 399

drf 认证、权限、频率

drf 认证、权限、频率

Tao.的博客 451

IEEE Journal of Biomedical and Health Informatics(JBHI)投稿经验分享

《IEEE Journal of Biomedical and Health Informatics投稿经验分享》详细记录了在影响因子6.7的中科院一区期刊JBHI的投稿历程(2025.1-5月,历时4个月)。文章重点分析:1)审稿特色:4位审稿人差异显著,领域专家意见专业但要求严苛;2)修改要点:需重视大修(补充实验/原理阐述),并注意将回复内容同步至正文;3)期刊特点:送审率高但审稿严格,常规投稿周期约4-5个月;4)实用建议:建议首次大修全力以赴,善用AI工具辅助写作,避免拖延。

LiRongLu_的博客 5094

drf-认证、权限、频率

三大认证依次执行-认证类-权限类-频率类。

g1446992400的博客 773

金融数字化——详解2025年金融智能体深度应用报告【附全文阅读】

《2025年金融智能体深度应用报告》显示,金融智能体已实现80%部署率,推动行业效率提升30%-50%。报告指出智能体通过"感知-推理-规划-执行-进化"机制突破大模型局限,在风控、客服、投研等100+场景实现自动化。典型案例显示,工商银行信贷审批效率提升60%,蚂蚁数科智能客服解决80%问题。尽管面临系统协同、标准缺失等挑战,未来趋势将向多模态交互、自主进化和ESG投资等方向拓展。

cdfunlove的博客 205

2026华为OD面试题084:贪心的商人

商人经营一家店铺,有 `number` 种商品。由于仓库限制,每件商品的最大持有数量是 `item[index]`。 每种商品每天有一个价格 `item_price[item_index][day]`。通过对商品买进和卖出获取利润,请给出商人在 `days` 天内能获取到的最大利润。 注:同一件商品可以反复买进和卖出。 输入描述: - 第一行输入商品数量 `number` - 第二行输入商人售货天数 `days` - 第三行输入 `number` 个整数,表示每件商品的最大持有数量 `item[in

琅嬛福地 275

DRF之三大认证【认证 权限 频率】

DRF之三大认证

lea4ning的博客 570

Dify框架面试内容整理-如何优化Dify的应用性能?

为1536维)可选用 PCA、FAISS 的量化压缩方法降低维度(如128、256、512);对知识库预览、任务流配置等页面,使用 nginx/cache-control 减少请求。API 响应耗时(P50/P95)、Token 使用量、缓存命中率、向量检索耗时;对 Prompt+输入内容计算 Hash,缓存相同请求的返回结果;使用占位符 + 函数拼接,按需组合 Prompt,而非静态长模板;数据量大时,应在构建索引前清洗冗余段落、统一格式,避免重复向量。维度越低,检索越快,但可能影响召回准确度,需平衡。

不务正业的猿 1552

DRF 之 认证、权限、视图、频率组件

认证组件 认证简介 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 表模型创建 model.py class User(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_leng...

Hello LinWoW~ ⊙o⊙ 462

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

DRF的认证权限频率组件

一.DRF的认证组件 token   学习过使用cookie和session两种方式可以保存用户信息,这两种方式不同的是cookie保存在客户端浏览器中,而session保存在服务器中,他们各有优缺点,配合起来使用,可将重要的敏感的信息存储在session中,而在cookie中可以存储不太敏感的数据。 token认证的大致步骤: 用户登录,服务器端获取用户名密码,查询用户表,如果存在该...

weixin_30871293的博客 179

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RESTful【第四章】:DRF之权限、认证、频率组件

DRF之权限、认证、频率组件 在编程的世界中,我们认为,用户输入的数据都是不可靠的,不合法的,直接使用用户输入的数据是不安全的,接下来,我们需要学习认证组件、权限组件、频率组件。 一、引入 通过前面三节课的学习,我们已经详细了解了DRF提供的几个重要的工具,DRF充分利用了面向对象编程的思路,对Django的view类进行了继承,并封装了其as_view方法和dispatch方法,...

aijiaolao2823的博客 286

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

drf中版本、认证、权限、频率限制源码分析

文章导读:在这里我们将分为两部分来讲解:第一部分,我们将随着程序执行的顺序一步步的去分析源码(看源码不可跳读,必须一步步的走);第二部分,我们使用一个实例完整的把这个使用流程展示出来。 第一部分:源码的讲解 路由 from .views import account urlpatterns = [ url(r'^login/$',account.LoginView.as_view()), ...

qq_40890660的博客 330

DRF三大认证(认证、权限、频率)

继承类重写****方法没有认证信息返回None(游客)有认证信息认证失败抛异常(非法用户)有认证信息认证成功返回用户与认证信息的元素(合法用户)完成视图类的全局(settings.py)或局部(指定的视图类)配置# 获取浏览器token# UserToken表中校验token是否存在# 返回user和tokenelse:raise AuthenticationFailed('请登录')局部认证# views.py全局认证],继承类重写****方法。

AZURE060606的博客 840

drf认证权限频率

认证: 创建认证类(继承BaseAuthentication),重写authenticate,在该方法中校验,如果校验通过返回None,如果校验失败,抛出异常,校验通过也可以返回当前用户和auth,这样在视图类中可以通过request.user,获取当前登录用户,一旦返回值,后续所有认证类都将不再执行, 视图类中: authentication_classes=[MyAuthenticati...

weixin_34194317的博客 220

Django DRF 认证、权限、频率

在前面说的 APIView 中封装了三大认证,分别为认证、权限、频率。认证即登录认证,权限表示该用户是否有权限访问接口,频率表示用户指定时间内能访问接口的次数为了方便举例说明,事先定义好模型表 2. 认证 2.1 自定义认证 自定义登录认证可以生成随机字符串,并添加进 UserToken 表中,每一次登录都会生成,若该字符串已存在则更新,不存在则新建。登录视图函数 自定义认证表需要创建认证类,首先继承拓展 BaseAuthentication 导入语句:自定义认证类 2.1.1 全局使用 在配置文件中添加配

XWenXiang的博客 1047

drf之day07:drf中的视图集,权限类使用,频率类使用,认证源码分析,权限源码分析,鸭子类型

drf中的视图集,权限类使用,频率类使用,认证源码分析,权限源码分析,鸭子类型

Yydsaoligei的博客 541

DRF ~ day07 之登录功能、认证组件、权限组件、频率组件

DRF 之登录功能、认证组件、权限组件、频率组件

weixin_55672697的博客 205

drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件

RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则、五表规则,Django采用的是六表规则 # 三表:用户表、角色表、权限表 # 五表:用户表、角色表、权限表、用户角色关系表、角色权限关系表 # 六表:用户表、角色表、权限表、用户角色关系表、角色权限关系...

Waller_的博客 561

Django框架之DRF之认证组件,权限组件,频率组件,token

一 认证组件: 使用方法: 1.写一个认证类,新建文件:my_auth.py class MyAuth(BaseAuthentication): def authenticate(self, request): from app01.views import produce_token #在url中发送token # token = requ...

python基础 999
上一篇: (ICONIP2021)On the Unreasonable Effectiveness of Centroids in Image
下一篇: Django实现统一包装接口返回值数据格式
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值