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(代码片段