Django Rest Framework threoy
rest_framework源码分析:
1.as_view()
2.父类的as_view() view = super(APIView, cls).as_view(**initkwargs)
3.view 方法中 return self.dispatch(request, *args, **kwargs)
4.dispatch
1.将原来的request进行分装成restframework
request = self.initialize_request(request, *args, **kwargs)
self.request = request
2.处理版本,认证,权限,访问频率
self.initial(request, *args, **kwargs)
1.处理版本信息
version, scheme = self.determine_version(request, *args, **kwargs),request.version, request.versioning_scheme = version, scheme
if self.versioning_class is None:return (None, None)没有版本控制类,不做版本控制
scheme = self.versioning_class()#如果有走版本控制类
return (scheme.determine_version(request, *args, **kwargs), scheme)
version = kwargs.get(self.version_param, self.default_version) 获取版本
if not self.is_allowed_version(version): 如果版本不存在或者不在允许范围内
2.处理认证信息
self.perform_authentication(request)
request.uer 进入带有装饰器@Propryty 下的uer方法
if not hasattr(self, '_user'): #判断是否没有认证
self._authenticate() #没有认证,进入_authenticate()认证
for authenticator in self.authenticators: #循环获取认证对象
authenticators=self.get_authenticators() #将认证对象封装到 authenticators
return [auth() for auth in self.authentication_classes] #列表循环实例化authentication_classes列表的类的对象
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES #默认使用setting的配置
#认证过了直接返回
return self._user
3.处理权限信息
self.check_permissions(request)
for permission in self.get_permissions(): 从permission_classes中/获取权限类,在执行对象的列表生成式
if not permission.has_permission(request, self): 执行每一个类的has_permission进行权限认证
permission_denied(self, request, message=None) #如果权限认证失败执行
def permission_denied(self, request, message=None):
"""
If request is not permitted, determine what kind of exception to raise.
"""
if request.authenticators and not request.successful_authenticator:
raise exceptions.NotAuthenticated('无权访问')
raise exceptions.PermissionDenied(detail=message)
4.处理访问频率限制
self.check_throttles(request)
for throttle in self.get_throttles(): 从throttle_classes=[MyThrottle,] 循环获取节流对象
if not throttle.allow_request(request, self): 执行对象的allow_request(request, self)方法,成功返回True
self.throttled(request, throttle.wait()) 访问频率限制执行throttled(request, throttle.wait())
def throttled(self,request,wait): 在APIView中
class InnerThrottled(exceptions.Throttled):
default_detail = '请求被限制.'
extra_detail_singular = 'Expected available in {wait} second.'
extra_detail_plural = '还需要再等待{wait}秒'
raise InnerThrottled(wait)
throttle.wait() 返回,剩余多少时间可以进行再访问
在自定制的频率限制类中实现:
def wait(self):父类已经实现
3.根据用户提交的方法反射请求方法
handler = getattr(self, request.method.lower(),)
4.将处理后的数据进行,序列化,路由,渲染等方式进行封装
self.response = self.finalize_response(request, response, *args, **kwargs)
Django Rest Framework threoy的更多相关文章
- 使用django rest framework
django 刚接触,想做一些restful api , google了一下,发现有现成的框架.Django REST framework. 对使用做下记录: 安装 从http://django-re ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- django rest framework 入门
django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...
- django rest framework
Django-Rest-Framework 教程: 4. 验证和权限 作者: Desmond Chen, 发布日期: 2014-06-01, 修改日期: 2014-06-02 到目前为止, 我们的AP ...
- django rest framework csrf failed csrf token missing or incorrect
django rest framework csrf failed csrf token missing or incorrect REST_FRAMEWORK = { 'DEFAULT_AUTHEN ...
- Django REST Framework学习——Android使用REST方法访问Diango
本文更应该叫做Android如何模拟浏览器访问Django服务器后台. 环境为: Android通过HttpClient访问服务器,从Django中获取json数据,解析显示在UI界面上. 问题为: ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Django REST framework使用ViewSets的自定义路由实现过程
在Django中使用基于类的视图(ClassView),类中所定义的方法名称与Http的请求方法相对应,才能基于路由将请求分发(dispatch)到ClassView中的方法进行处理,而Django ...
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
随机推荐
- node模拟后台返回json书写格式报错--Unexpected token ' in JSON at position 1
最近在学习Node的知识,就尝试写了一个注册登陆的简单功能,但是自己在模拟后台返回值的时候,总是报错Unexpected token ' in JSON at position 1,查找原因之后,是因 ...
- newCoder在线编程---(1)
二维数组查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 1.暴 ...
- 多进程——waitpid()函数的小例子
本例中使用fork()创建一个子进程,然后让子进程暂停5s,接下来对原有的父进程使用waitpid()函数,利用WNOHANG使父进程不会阻塞每隔一秒判断子进程是否退出. #include" ...
- Hybris UI的Route(路由)实现
登录Hybris前台,在product catalog里选择Digital camera: 点击某个产品进入明细页面: 注意产品明细这个url: 这个明细页面的路由和SAP UI5的路由思路很像. 在 ...
- iframe高度随内容自适应的方法
我们知道,iframe最大的问题,就是高度的问题,如果你内容的高度是变化,要么你就给你的容器写个固定的高度,如果内容是未知的,显然这个方法并不能达到我们的想要的效果,要么就是通过js来解决这个问题. ...
- CentOS替换系统自带JDK
1.解压jdk安装包到/opt 下 /opt/jdk1.8.0_181 2.编辑/etc/profile, 增加如下内容 export JAVA_HOME=/opt/jdk1.8.0_181expor ...
- matlab一次读取多张图片
实验平台:matlab R2010Rb 读取C:\Users\KCl\Documents\MATLAB\SRCNN\Set5文件夹下所有bmp文件,并存储到im字典中 clear all clc im ...
- python内置函数map/reduce/filter
python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架 ...
- Xcode Warning: “no rule to process file
警告⚠️: warning: no rule to process file '/Users/Kingdev/Desktop/Git/finance_iOS/finance/Library/MBpro ...
- jquery的ajax请求
加载页面内容,如果不加选择器,会加载整个页面内容 加选择器会获取选择器内容 例如: <script> //可以获取json格式的文件 $.ajax({ type:"get&quo ...