中间件
  -中间件是什么?请求和响应之间的一道屏障
  -中间件作用:控制请求和响应
  -django中内置几个中间件
   process_request(self,request)
   process_view(self, request, callback, callback_args, callback_kwargs)
   process_template_response(self,request,response)
   process_exception(self, request, exception)
   process_response(self, request, response)
总的顺序
我是 request1
我是 request2
我是 执行视图函数之前 1
我是 执行视图函数之前 2
我是视图函数
我是 template 2
我是 template 1
我是 异常2
我是 异常1
我是 response2
我是 response1

  -自定义中间件
   -1.from django.utils.deprecation import MiddlewareMixin
   class MyMiddleware1(MiddlewareMixin):
    def process_request(self, request):
     print('MyMiddleware---->1---->process_request')
     # 返回HttpRspons对象,直接返回,走自己的process_response
     # 返回None的时候,继续往下走
     # return HttpResponse('i am middle--1')
     return None
    def process_response(self, request, response):
     print('MyMiddleware--->1---->process_response')
     return response #这里必须返回HTTPRESPONSE对象 对视图函数的返回值response的一个操作,可以丢弃等等操作
   -2.在setting中注册,是有顺序的,
    MIDDLEWARE = [
    'app01.mymiddelware.MyMiddleware1',
    ]
   
  -中间件执行顺序:
   -process_request,从上往下执行
    -如果retrun HttpResponse的对象,直接返回了
    -如果retrun None ,继续往下走
   -process_response,从下往上执行
    -必须要retrun Httpresponse的对象
 csrf:跨站请求伪造 
  比如:转账请求:transfer?to=lqz&count=1000
  -是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
  -如何防范:
   -通过refer
   -加一个随机字符串校验(加载请求的路径里,加载请求体中)
   -在请求头中加字符串校验
  django中的应用:
   -中间件csrf不注释掉
   -以后再发post请求,必须携带那个随机字符串到服务端
    -form表单形式:
     <form action="" method="post">
      {% csrf_token %}
      <input type="text" name="name">
      <input type="text" name="pwd">
      <input type="submit" value="提交">
     </form>
    -ajax提交
    data: {
     'name': $('[name="name"]').val(),
     'pwd': $('[name="pwd"]').val(),
     //'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
     'csrfmiddlewaretoken': '{{ csrf_token }}'
     },
  csrf:局部禁用,局部使用
   -用装饰器:
from django.views.decorators.csrf import csrf_exempt,csrf_protect
   -fbv--->直接加载fbv上就行了
    -局部禁用,全局得使用
     @csrf_exempt
     def csrf_disable(request):
             print(request.POST)
             return HttpResponse('ok')
    -局部使用,全局得禁用
     @csrf_protect
     def csrf_disable(request):
             print(request.POST)
             return HttpResponse('ok')
 
 
   -cbv-->只能加在dispatch方法或者类上面
    -局部禁用,全局得使用
    -局部使用,全局得禁用
    
    from django.views import View
    from django.utils.decorators import method_decorator
    #####################################################
      第一个参数为装饰器,第二个参数为哪个方法
    @method_decorator(csrf_protect,name='dispatch')
    class Csrf_disable(View):
     # @method_decorator(csrf_protect)
     def dispatch(self, request, *args, **kwargs):
      ret=super().dispatch(request, *args, **kwargs)
      return ret
     def get(self,request):
      return HttpResponse('ok')
     def post(self,request):
      return HttpResponse('post---ok')
  cbv加登陆验证装饰器
  
   -先导入:
from django.utils.decorators import method_decorator
   
   -1 可以在方法上加装饰器:
    @method_decorator(login_auth)
   -2 可以在类上加
    @method_decorator(login_auth,name='post')
    @method_decorator(login_auth,name='get')
   -3 可以加在dishpatch方法上
    @method_decorator(login_auth)
    一旦加在dishpatch,说明,所有方法都加了装饰器 
 
#####py文件
from django.utils.deprecation import MiddlewareMixin
from django.utils.decorators import method_decorator
from django.shortcuts import render,HttpResponse class MyMiddleware(MiddlewareMixin):
def process_request(self,request):
print('我是 request1')
# return HttpResponse(1) # 我是 request0 我是 response0
def process_view(self, request, callback, callback_args, callback_kwargs):
print ("我是 执行视图函数之前 1")
#有异常才执行该函数,每异常不管他,必须返回Httpresponse对象(有异常 显示我的信息)
def process_exception(self, request, exception):
print ("我是 异常1")
return HttpResponse('出错了兄弟1')
# 方法对视图函数返回值有要求,必须是一个含有render方法类的对象,才会执行此方法
# 1.视图函数 必须返回 一个类(有render方法 返回Httprespons对象)
# 2.这里要返回一个 Httpresponse对象
def process_template_response(self,request,response):
print('我是 template 1')
return HttpResponse('我是 template1')
def process_response(self,request,response):
print('我是 response1')
return response
class MyMiddleware1(MiddlewareMixin):
def process_request(self,request):
print('我是 request2')
def process_view(self, request, callback, callback_args, callback_kwargs):
print ("我是 执行视图函数之前 2")
def process_exception(self, request, exception):
print ("我是 异常2")
def process_template_response(self, request, response):
print ('我是 template 2')
return HttpResponse ('我是 template2')
def process_response(self, request, response):
print ('我是 response2')
return response ###视图函数
from django.shortcuts import render,HttpResponse

# Create your views here.
class GG():
def render(self):
return HttpResponse('template')
def aaa(request):
if request.method=='GET':
print('我是视图函数get')
return GG()
elif request.method=='POST':
print(request.POST,type(request.POST),'我是视图函数post')
return HttpResponse('ok')
 
 

随机推荐

  1. Linux下Maven私服Nexus3.x环境构建操作记录【转】

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

  2. spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign

    Feign受Retrofix.JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部.Feign的首要目标是将Java Http客户端调用过 ...

  3. HDU 1036(平均速度 **)

    题意是求出跑了 n 圈每圈 m km 的个人的平均速度. 控制格式,特别注意,题意是输出 -:--:-- 的该人成绩作废,但要把他其他的成绩输进去,不能直接就 break ,输出也就只有一个 - ,而 ...

  4. spring中整合memcached,以及创建memcache的put和get方法

    spring中整合memcached,以及创建memcache的put和get方法: 1:在项目中导入memcache相关的jar包 2:memcache在spring.xml的配置: 代码: < ...

  5. Spring Bean的ref属性和IoC注入集合

    这是一个Demo 1.Phone.java package com.cn.pojo; public class Phone { private String name; private double ...

  6. Vertica系列: 自动生成Identity 字段值的方法

    参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...

  7. Js点击按钮下载文件到本地(兼容多浏览器)

    实现点击 用纯 js(非jquery)  下载文件到本地 自己尝试,加网上找了好久未果,如: window.open(url)   location.href=url   form表单提交   ifr ...

  8. 从零开始学HTTP (二) HTTP结构与基础

    HTTP结构与基础 这篇文章中,我们主要针对HTTP\1.1版本进行介绍 请求报文和响应报文 请求报文 请求报文由客户端发出,其格式为: 请求方法 请求URI 协议版本 可选的请求首部字段和内容实体, ...

  9. 清除 SQL Server Management Studio 服务器名称历史记录

    Ø  前言 在开发过程中,经常使用 SQL Server Management Studio 连接本地或远程 SQL Server 服务器,时间长了可能有些名称就不用了或者重复了,SQL Server ...

  10. GCC编译器原理(一)------交叉编译器制作和GCC组件及命令

    1.1 交叉编译器制作 默认安装的 GCC 编译系统所产生的代码适用于本机,即运行 GCC 的机器,但也可将 GCC 安装成能够生成其他的机器代码.安装一些必须的模块,就可产生多种目标机器代码,而且可 ...