博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中间件
阅读量:6897 次
发布时间:2019-06-27

本文共 3688 字,大约阅读时间需要 12 分钟。

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表单形式:                    
{
% csrf_token %}
-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')

 

 

 

  

 

转载于:https://www.cnblogs.com/zhouhao123/p/10008117.html

你可能感兴趣的文章
jquery基础研究学习【HTML】
查看>>
几个C# Visual Studio编码技巧
查看>>
sql数据库各个版本清除日志
查看>>
jQuery扩展两类函数(对象调用,静态调用)
查看>>
nofollow标签使用方法
查看>>
sqlite实现新闻收藏和取消收藏
查看>>
Unity中的基础光照
查看>>
Final发布——视频博客
查看>>
SqlHelper类
查看>>
服务器端控件Button会自动刷新页面
查看>>
Sass函数:Sass Maps的函数-map-get($map,$key)
查看>>
HDU 1230 火星A+B
查看>>
C# foreach 为什么循环使用Foreach 效率要高
查看>>
oracle创建透明网关出现的问题
查看>>
对象和类
查看>>
分布式事务
查看>>
udp,select超时和recvfrom收不到数据原因
查看>>
将任意程序(如.bat文件)作为Windows服务运行
查看>>
【ElasticSearch篇】--ElasticSearch从初识到安装和应用
查看>>
Java命令参数说明大全
查看>>