• 中间件


    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,说明,所有方法都加了装饰器

    中间件

      -中间件: 请求和响应之间的一道屏障

      -中间件作用: 控制请求和响应

      -django中内置几个中间件

      -自定义中间件

        

    -from django.utils.deprecation import MiddlewareMixin   先导入
                -定义一个类,随意命名,继承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
                -使用:在setting中注册,是有顺序的,
                    MIDDLEWARE = [
                    'app01.mymiddelware.MyMiddleware1',
                    ]

    中间执行顺序:

      -process_request,从上往下执行

         -如果retrun HttpResponse的对象,直接返回了

         -如果retrun None ,继续往下走

      -process_response,从下往上执行

         -必须要retrun Httpresponse的对象

    中间件的方法:

      -process_request 

           -请求来的时候,会响应它

      -process_response

           -响应回去的时候,会走它

      -process_view(了解)

            - request, callback(视图函数), callback_args(无名分组的参数), callback_kwargs(有名分组的参数)

         -def process_exception(self, request, exception)(了解)

         -def process_template_response(self, request, response):(了解)

    csrf:跨站请求伪造

       比如:转账请求:transfer?to=lqz&count=1000

       -是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的

       -如何防范:

         -通过refer

         -加一个随机字符串校验(加载请求的路径里,加载请求体中)

         -在请求头中加字符串校验

    django中的应用:
                -中间件不注释掉
                -以后再发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')

      

  • 相关阅读:
    对之前IoT项目的完善
    利用 esp8266 搭建简单物联网项目
    IOT(esp8266)
    ---分割线---
    百度云下载工具--雷鸟下载
    Win10安装Ubuntu子系统
    安装Ubuntu虚拟机
    搭建微信公众号后台(二)
    手把手教你基于CentOS8搭建微信订阅号后台服务(一)
    如何在PHP5中通过PDO连接SQLite3数据库
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/10008117.html
Copyright © 2020-2023  润新知