码迷,mamicode.com
首页 > 其他好文 > 详细

Django-中间件

时间:2018-11-23 21:31:06      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:llb   setting   middle   djang   导入   template   utils   action   中间件   

一 中间件

-中间件是什么?请求和响应之间的一道屏障
        -中间件作用:控制请求和响应
        -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:跨站请求伪造

#CSRF(Cross-site request forgery)跨站请求伪造
    -攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
#如何防范:
  -验证 HTTP Referer 字段,根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
  -加一个随机字符串校验(加载请求的路径里,加载请求体中)
  -在请求头中加字符串校验

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‘)

 

Django-中间件

标签:llb   setting   middle   djang   导入   template   utils   action   中间件   

原文地址:https://www.cnblogs.com/liweiwei0307/p/10009776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!