Django-中间件

Posted liweiwei0307

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-中间件相关的知识,希望对你有一定的参考价值。

一 中间件

-中间件是什么?请求和响应之间的一道屏障
        -中间件作用:控制请求和响应
        -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-中间件的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

django-中间件

django之设置中间件模板

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]