Django模板之認證機制(csrf_token)


csrf認證機制:

django中對POST請求,csrf會進行認證處理,csrf認證機制是防御跨站偽造功能,在沒有任何處理的前提下,POST請求會報錯。

csrf認證中間件是在process_view執行(通過裝飾器強制認證或者放行可知),同時對類中的方法進行CSRF裝飾器操作需要:

  【注意只能加在dispatch方法上(或者裝飾在類上指定dispatch方法),類中單獨方法無效

 

         

 

 

csrf認證--模板操作:

模板文件中的操作:

django項目中默認對POST請求進行了csrf認證,只需要在模板提交數據的代碼塊中加入模板標簽{{% vsrf_token %}}即可,(不需要注銷seetings.py配置文件MIDDLEWARE列表中的'django.middleware.csrf.CsrfViewMiddleware',),模板頁面在渲染時會自動在相應位置渲染成隱藏的input標簽:<input type="hidden" name="csrfmiddlewaretoken" value="8J4z1wiUEXt0gJSN59dLMnktrXFW0hv7m4d40Mtl37D7vJZfrxLir9L3jSTDjtG8">每次都是隨機的

 

csrf認證--模塊操作: 

views.py中首先導入模塊:from django.views.decorators.csrf import csrf_exempt,csrf_protect

1)放行認證:@csrf_exempt 

 1 @csrf_exempt    #放行csrf認證(即使settings.py中存在全局認證機制,也對此次POST請求的視圖函數放行)
 2 def login(request):
 3     if request.method=="GET":
 4         return render(request,"login.html")
 5     elif request.method=="POST":
 6         name=request.POST.get("username")
 7         psd=request.POST.get("userpsd")
 8         status=models.auth(name,psd)
 9         if status:
10             return HttpResponse("<h1>Success!</h1>")
11         else:
12             return render(request,"login_fail.html")

  2)強制認證:@csrf_protect

 1 @csrf_protect    #強制csrf認證(即使settings.py中不存在全局認證機制,也對此次POST請求的視圖函數強制認證)
 2 def login(request):
 3     if request.method=="GET":
 4         return render(request,"login.html")
 5     elif request.method=="POST":
 6         name=request.POST.get("username")
 7         psd=request.POST.get("userpsd")
 8         status=models.auth(name,psd)
 9         if status:
10             return HttpResponse("<h1>Success!</h1>")
11         else:
12             return render(request,"login_fail.html")

    login.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="refresh" content="">
 6     <meta name="keywords" content="">
 7     <style></style>
 8     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
 9     <link rel="stylesheet" href="">
10     <title>login</title>
11 </head>
12 <body>
13 <form action="http://127.0.0.1:8888/login/" method="post">
14 {#    {% csrf_token %}<!--在進行模板渲染時會自動生成一個隱藏的input標簽(csrf認證標識)-->#}
15    <table>
16     <tr>
17         <td>用戶名:</td>
18         <td><input type="text" name="username"></td>
19     </tr>
20     <tr>
21         <td>密碼:</td>
22         <td><input type="text" name="userpsd"></td>
23     </tr>
24     <tr>
25         <td><input type="reset"></td>
26         <td><input type="submit" ></td>
27     </tr>
28        </table>
29 </form>
30 </body>
31 </html>
32  


免責聲明!

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



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