Django項目報錯: 禁止訪問(403),CSRF驗證失敗,相應中斷


如果想要取消表單的CSRF防護,可以在模板上刪除{% csrf_token %}, 並且在相應的視圖函數中添加裝飾器@csrf_exempt, 代碼如下:

 

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def registerView(request):

  pass

  return render(request,'user.html',locals())

 

如果只是在模板上刪除{% csrf_token %},並沒有在相應的視圖函數中設置過濾器@csrf_exempt,那么當用戶提交表單時,程序因CSRF驗證失敗而拋出403異常的頁面,如下圖:

 

 最后還有一種情況比較特殊,如果在配置文件setting.py 中刪除了中間件CsrfViewMiddleware,這樣是整個網站都取消了CSRF防護。在全站沒有CSRF防護的情況下,又想對某些請求設置CERF防護,那么在模板上添加模板語法{% scrf_token %},然后在相應的視圖函數中添加裝飾器@csrf_protect即可實現 ,方法與上類似。

 

值得注意的是,在日常開發中,如果某些網頁是使用前端的Ajax實現表單提交的,那么Ajax向服務器發送POST請求時,請求參數必須添加csrf_token的信息,否則服務器會視該請求為惡意請求。實現代碼如下:

 

<script>
    function submitForm(){
        var csrf = $('input[name="csrfmiddlewaretoken"]').val();
        var user = $('#user').val();
        var password = $('#password').val();
        $.ajax({
              url : '/csrf1.html',
              type : 'POST',
              data : { "user":user, "password":password, "csrfmiddlewaretoken":csrf}
              success:function(arg){
                    console.log(arg);
               }
        }) 
   }
</script>   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM