rest_framework组件
认证组件
局部认证
在需要认证的视图类里加上authentication_classes = [认证组件1类名,认证组件2类名....]
示例如下:
seralizers.py
from rest_framework import serializers
from app01 import models class PublishSerializers(serializers.ModelSerializer):
class Meta:
model = models.Publish
fields = '__all__'
auth.py
from rest_framework.authentication import BaseAuthentication
from rest_framework import exceptions
from app01 import models class 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 viewsets
from app01.auth import TokenAuth class 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 models
class 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 viewsets
from app01.auth import TokenAuth
from app01.permission import VipPermission
class 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",],
}
频率认证
局部认证
格式如下:
class VisitRateThrottle(object):
def allow_request(self,request,view):
# 要求访问站点的频率不能超过每分钟20次等等
if 1:
# 如果在限制之内,则返回True return True
else:
return False
然后在需要进行限制的视图类中加入如下配置:
throttle_classes = [VisitRateThrottle]
全局认证
rest_framework组件的更多相关文章
- rest_framework组件之认证,权限,访问频率
共用的models from django.db import models # Create your models here. class User(models.Model): username ...
- Django的rest_framework认证组件之局部设置源码解析
前言: Django的rest_framework组件的功能很强大,今天来我来给大家剖析一下认证组件 下面进入正文分析,我们从视图开始,一步一步来剖析认证组件 1.进入urls文件 url(r'^lo ...
- django rest_framework 框架的使用
django 的中间件 csrf Require a present and correct csrfmiddlewaretoken for POST requests that have a CSR ...
- rest_framework之渲染器
渲染器简介 什么是渲染器 根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件. 渲染器的作用 序列化.友好的展示数据 渲染器配置 首先要在settins.py中将rest_framew ...
- 深入解析当下大热的前后端分离组件django-rest_framework系列一
前言 Nodejs的逐渐成熟和日趋稳定,使得越来越多的公司开始尝试使用Nodejs来练一下手,尝一尝鲜.在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线.将浏览器中为用户进行页面展 ...
- rest_framework
一.解析器组件(parser) 1.编程:数据结构和算法的结合 2.restful规范 定义:url唯一定位资源,http请求方式区分用户行为 (1)接口设计规范 (2)返回数据规范 (3)错误消息规 ...
- Django_rest_framework_渲染器/解析器/路由控制/分页
目录 渲染器 解析器 路由控制 分页 渲染器 简介 什么是渲染器 根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件. 渲染器的作用 序列化.友好的展示数据 渲染器配置 首先要在set ...
- Django REST framework 使用简记
最近在参与的项目中需要使用到dajngo REST framework工具包进行开发,之前参与的项目几乎都是清一色的使用原生的django(话说偶尔也会使用一下Flask,真心不怎么喜欢这个框架),之 ...
- rest_framework登录组件,权限组件
昨日回顾: -HyperlinkedIdentityField(用来生成url),传三个参数 -实例化序列化类的时候,BookSerializer(ret, many=True, context={' ...
随机推荐
- App Store 加急审核解析
什么是加急审核 首先,提交二进制文件到 App Store,是要交给 App Store Review 团队去审核的.下面这句话是我从他们那边拿到的官方数据: On average, 50 perce ...
- cmd命令操作Mysql数据库
在一次考试中,笔者因考试的电脑上没有安装操作Mysql数据库的可视化工具而不知如何操作数据库,所以在这里可以提醒各位掌握 命令行来操作数据库也是非常重要的. 笔者以惨痛的教训来警惕大家. 进入正题: ...
- jQuery的$.get()函数不执行以及php端报错Uncaught Error: Call to a member function bind_param() on boolean in...
写了一个html,用到了jQuery,发现没有按照预期的结果显示,最后定位到是$.get()函数没有运行 调试过程为: 在页面右击查看元素,到网络那一栏,找到类型为json的那个包点击,然后查看响应, ...
- python面试题之基础2
2.3 考虑以下 Python 代码,如果运行结束,命令行中的运行结果是什么? 两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是 直接开辟一块内存 ...
- php添加数据库转义特殊字符串
addslashes()
- Delphi主线程重入而导致程序卡死的解决方案
Delphi的线程可以通过调用AThread.Synchronize(AProc),可以将Proc放入主线程中同步运行,此时AThread将挂起,直到主线程执行完AProc. 如果有BThread,调 ...
- 用Python批量下载DACC的MODIS数据
本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...
- Word中用VBA插入一个文件夹里的所有.jpg图片
每四张图片放在一页,第一行为四张图片的文件名 插入图片调整尺寸参考 Sub final() Dim FN As String, N%, W#, H#, PW#, PH# With ActiveDocu ...
- 20155216 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结 理解封装.继承.多态的关系 封装:使用类方法或函数将程序进行封装,并定义其内部的成员以及数据. 继承:子类继承父类,避免重复的行为定义. 多态:子类只能继承一个父类,即其中存在is- ...
- 20155223 2006-2007-2 《Java程序设计》第4周学习总结
20155223 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 Java的继承方法与继承类相当于程序间的数值调用,当然还有程序间函数的调动使用. 继 ...