一、django中间件
1 中间件的用处(针对请求和响应做全局的操作时) 可以做登录验证 访问限制 2. 自定义中间件,五个方法和三个要点 三个要点: 1.执行时间和执行顺序 2.参数 3.返回值 1) process_request(self,request) 1.注册顺序,在视图函数之前 2.参数request表示请求对象本身,和视图函数中是同一个对象 3.返回None就继续往后走,返回响应对象就从本中间件的process_response倒序返回 2) process_response(self,request,response) 1.注册的倒序,返回响应之后 2.request 请求对象,response:响应对象 3.必须返回响应对象 3) process_view(self,request,view_func,view_args,view_kwargs) 1.注册的顺序,视图函数之前,urls.py之后 2.view_func:将要执行的视图函数对象 3.返回None就继续往后走,返回响应对象就不往后走,而是倒序遍历process_response 4) process_template_response(self,request,response) 5) process_exception(self,request,exception) 3. csrf中间件源码分析 为什么要把验证csrf_token的逻辑写在process_view()中。 如果加在process_request中,就会每个视图函数进行验证,哪些需要csrf验证豁免的csrf_exampt就会不能豁免,写在process_view()中就可以进行相应的请求豁免操作。 4. 昨日作业 同一IP一分钟内访问超过3次拒绝访问 VISITED_RECORD = {} class Throttle(MiddlewareMixin): def process_request(self,request): IP = request.META.get('REMOTE_ADDR') now = time.time() if IP not in VISITED_RECORD: VISITED_RECORD[IP] = [] history = VISITED_RECORD[IP] while history and now - history[-1]>60: history.pop() if len(history) > 3: return HttpResponse('滚') history.append(now)
二、ajax 对接django
http://wuchengyi.com/post/14/