zoukankan      html  css  js  c++  java
  • Python-Django-Ajax进阶3

    1 中间件

    -是什么?

    中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

    -怎么用:


    -自定义中间件:

    1 写一个类,继承MiddlewareMixin,
    2 在类中写方法:
    process_request
    3 在settings中配置

    from django.utils.deprecation import MiddlewareMixin
    
    from django.shortcuts import render, HttpResponse
    
    
    class mymiddleware1(MiddlewareMixin):
        def process_request(self, request):
            # print(request.path)
            # print(type(request))
            # request.aa='lqz'
            print('我是middle1的process_request方法')
            # 一旦returnHttpResponse对象,直接返回
            # return HttpResponse('我返回了')
    
        def process_response(self, request, response):
            # request就是请求对象
            # response就是响应对象
            print('我是middle1的process_response方法')
            # response.set_cookie('name','lqz')
            return response
        def process_view(self, request, callback, callback_args, callback_kwargs):
            # callback 是要执行的视图函数地址
            # callback_args是要执行的视图函数的位置参数(元组)
            # callback_kwargs是要执行的视图函数的关键字参数(字典)
            # print(type(callback))
            # print(callback_args)
            # print(callback_kwargs)
            # response=callback(request,*callback_args,**callback_kwargs)
            print('我是middle1的process_view方法')
            # 如果返回response,后面的process_view就不执行了,直接执行中间件的process_response方法
            # return response
        def process_exception(self, request, exception):
            #exception 异常对象
            print('我是m1的process_exception方法')
    
    class mymiddleware2(MiddlewareMixin):
        def process_request(self, request):
            # print(request.path)
            # print(type(request))
            print('我是middle2的process_request方法')
    
        def process_response(self, request, response):
            print('我是middle2的process_response方法')
            return response
    
        def process_view(self, request, callback, callback_args, callback_kwargs):
            print('我是middle2的process_view方法')
        # 只有视图函数抛异常,才执行
        def process_exception(self, request, exception):
            print('我是m2的process_exception方法')
            print(str(exception))
            return HttpResponse('您的操作有误')
    
        def process_template_response(self, request, response):
            print('我是m2的process_template_response')
            return response
    

      

    -5个方法(process_request,process_response)

    -如果process_request方法返回HttpResponse的对象,请求直接返回,按中间件方法执行顺序往回走

    2 csrf

    xss攻击/csrf或xsrf跨站请求伪造
    使用:中间件不注释,form表单中写{% csrf_token %}

  • 相关阅读:
    转:UFLDL_Tutorial 笔记(deep learning绝佳的入门资料 )
    转:使用RNN解决NLP中序列标注问题的通用优化思路
    CTR预估中GBDT与LR融合方案
    ZOJ1157, POJ1087,UVA 753 A Plug for UNIX (最大流)
    Gentoo:startx出现Failed to load module问题
    HTTP请求和响应2:方法(Method)
    SharePoint 2013 表单认证使用ASP.Net配置工具加入用户
    理解支持向量机(四)LibSVM工具包的使用
    LeetCode 14: Longest Common Prefix
    精通Hibernate——域对象之间的关系
  • 原文地址:https://www.cnblogs.com/du-jun/p/10311307.html
Copyright © 2011-2022 走看看