中间件
  -中间件是什么?请求和响应之间的一道屏障
  -中间件作用:控制请求和响应
  -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 MiddlewareMixinfrom django.utils.decorators import method_decoratorfrom 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 responseclass 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')

转载于:https://www.cnblogs.com/3sss-ss-s/p/10009728.html

最新文章

  1. gi克隆github文件_如何构建GitHub文件搜索功能的克隆
  2. readonly和disabled的区别!
  3. Apache Directory 指令
  4. 巨蟒python全栈开发flask5
  5. 【LeetCode笔记】337. 打家劫舍III(Java、树型动态规划)
  6. Win7+IIS7下用FastCGI模式配置PHP环境
  7. mysql的介绍和安装
  8. python调用接口上传文件_python接口自动化7-post文件上传
  9. 导轮式机器人_轮式移动机器人导航控制与路径规划研究
  10. snmp error on SnmpMgrRequest 40
  11. 搭建LAMP架构之Apache2.4.4安装及管理
  12. python如何计算个人gpa_【Python】计算GPA | 学步园
  13. ufvm可以读哪些网格_高三美术生可以读的985、211大学有哪些?
  14. 「需求广场」需求词更新明细(六)
  15. php教师评价系统,正韵教学评价系统 v3.2
  16. 程序猿生存指南-43 温柔以待
  17. VC6中如何让改变控件Botton的字体(大小和字体)
  18. 《鬼谷子》飞箝第五(译文)
  19. 中国大陆手机号码如何注册谷歌账号?解决手机收不到验证码
  20. 公交APP评测:谁是最好用的公交线路查询软件?

热门文章

  1. python程序设计 清华大学出版社 pdf下载-清华大学出版社-图书详情-《Python 程序设计》...
  2. 哪本python入门书内容最详细-重磅 | 由浅入深的 AI 学习路线,最详细的资源整理!...
  3. python有道翻译法语-使用python2爬取有道翻译
  4. python学起来难不难-Python自学难不难,培训班推荐?
  5. 从零开始学python网络爬虫-从零开始学Python 三(网络爬虫)
  6. python web为什么不火-编程语言里的明星:Python为什么突然不火了?
  7. python代码翻译-python实现在线翻译
  8. python在日常工作处理中的应用-记 Python 在实际工作中的第一次应用
  9. python3版本之间的区别-python3.6与3.4版本的区别是什么?
  10. 查看python安装路径-Mac查看Python安装路径和版本