1 序言 有如下django代码,视图层: from django.http import HttpResponse from rest_framework.views import APIView class OrdersView(APIView): def get(self , request , *args , **kwargs): return HttpResponse('GET请求') def post(self , request , *args , **kwargs): retur…
1 绪言 上一篇中讲了django rest_framework总体流程,整个流程中最关键的一步就是执行dispatch方法.在dispatch方法中,在调用了一个initial方法,所有的认证.权限检查.访问频率控制都是在这个方法中进行的.下面代码为init方法执行这三个操作的源码: def initial(self, request, *args, **kwargs): """ 在调用方法处理程序之前运行需要发生的任何事情(例如:认证.权限.访问频率控制). "…
1 绪言 上一篇中分析了认证部分的源码,认证后的下一个环节就是权限判定了.事实上,权限判定肯定要与认证联合使用才行,因为认证部分不会对请求进行禁止或者是允许,而只是根据请求中用户信息进行用户身份判断,而权限判定就是认证中添加的用户身份进行权限判定.权限判定的入口在dispatch方法中调用的initial方法中,如下所示: def initial(self, request, *args, **kwargs): …… # Ensure that the incoming request is p…
1 绪论 网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework自带有一套解析器. 2 源码分析 我们重新回到dispatch方法中对请求进行重新封装的initialize_request类,源码如下: def initialize_request(self, request, *args, **kwargs): """ Returns t…
1 绪言 当大家看大这篇博文的时候,应该对Django rest_framework中的CBV有所了解了,大致来说就是通过定义类来继承APIView类,并在类中定义get.post.put.delete等对应于请求方法的方法,当请求来的时候会自动反射到相应的方法并执行,路由中需要配置类的as_view()的方式来配置路由,至于如何拿到请求方法并对应执行我们自定义类中的方法,在我的rest_framework系列的第一篇博文中有详细的分析,这里不再多说.这一篇博文我们来研究一下视图类. 2 视图进…
1 绪论 Djangorest_framework的版本控制允许用户更改不同客户端之间的行为,且提供了许多不同的版本控制方案.版本控制由传入的客户端请求确定,可以基于请求URL,也可以基于请求标头. 版本控制入口在在dispatch方法中调用的initial方法中,如下所示: def initial(self, request, *args, **kwargs): …… #版本控制 version, scheme = self.determine_version(request, *args,…
1 绪言 权限判定之后的下一个环节是访问频率控制,本篇我们分析访问频率控制部分源码. 2 源码分析 访问频率控制在dispatch方法中的initial方法调用check_throttles方法开始.入口如下: def check_throttles(self, request): for throttle in self.get_throttles():#遍历每一个频率控制对象 if not throttle.allow_request(request, self): self.throttl…
流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 django.contrib.sessions.backends.db的包 将db中SessionStore 赋值给self.SessionStore 执行process_request 方法 获取存放于cookie中的session_id,赋值为session_key 实例化session仓库sess…
Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默认的配置文件 当用户不做任何配置的时候自动加载默认配置 2.配置文件变量名必须是大写 """ from django.conf import global_settings 查看源码 global_settings.py LANGUAGE_CODE = 'en-us' ('zh-…
[背景] 最近在看django官方文档的class-based-views这一节的时候一直不得要领,感觉自己清楚,但是回想起来又没有脉络:于是没有办法只 能是“暗中观察”django的源码了. 刚打开源码看了没有多久就疑窦丛生,比如说下面这一段,能看的出get_object方法中用到的self.kwargs 属性是在哪里设置过呢?如果没有设置直接用是会有报错的,详细内容看下面源码 class SingleObjectMixin(ContextMixin): """ Provi…