Django之中间件-CSRF

CSRF

  a.CSRF原理
    post提交时需要提交csrf_token ,缺少则不通过

在form表单中加入:
{% csrf_token %}

  b.无CSRF时存在隐患
    防护其他人通过别的链接post提交
  c.Form提交(CSRF)
      {% csrf_token %}

  d.Ajax提交(CSRF) ----L22-capture-10

                         CSRF请求头:X-CSRFtoken
		         在所有ajax请求加入请求头
               $(function(){
				$.ajanxSetup({
					beforeSend:function(xhr,settings){
                             
                                     #xhr:XMLHttpRequst()  ajax封装的xhr方法
						xhr.setRequestHeader('X-CSRFtoken',$.cookie('csrftoken'))
					}
				
				})
				$('#btn1').click(function(){
					$.ajax({
						url:'/login/',
                                                type:'POST'
                                                data:{‘user’:123}
                                                success:function(arg){
                                               ...
                                                      }				
					})
				})          
              })  

  

  局部加上CSRF:

    @csrf_exempt 单一的排除
    @csrf_protect 单一的加上

 

中间件(管道,httphandle类)

    1.原理

                settings中的MIDDLEWARE
      对所有请求做统一的处理

    2.操作

    

from django.utils.deprecation import MiddlewareMixin


class Row1(MiddlewareMixin):
     #请求开始
        def process_request(self,request):
            print('row1')
       if True:
          pass
       else:
         return HttpResponse

    #url(r'^test/(?p<nid>\d+)$',views.test)
    #获取路由系统中的参数,和test函数
                   def   process_view(self,request,view_func,view_func_args,view_func_kwargs):
        print('row1_view')



     #请求返回
     def process_response(self,request,response):

       return response
   
                 def process_exception(self,request,exception): #views 中出错就执行
                        if isinstance(exception,ValueError):
                                return HttpResponse('valueError')
 

    

                def process_template_response(self,request,response):
                        #如果views中的函数返回的对象中,具有render方法
                        print('------')
                       return response

  

  

posted @ 2017-11-05 17:06  痴道三  阅读(209)  评论(0编辑  收藏  举报