我正在爲我的學校編寫一個註冊網站,並使用Django作爲框架。對於註冊,我需要用戶名,密碼和註冊令牌。那些尚未驗證,我現在試圖做的是從註冊輸入頁面(使用POST請求)到「您已成功註冊」頁面。沿線的某處,csrf標記顯然拒絕被驗證。Django 403 CSRF驗證失敗
我的觀點:
def register(request):
return render(request, 'enroller/successfulEnroll.html')
我的頁面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'register' %}" method="post"> {% csrf_token %}
<div class="container">
<label><b>New Username</b></label>
<input type="text" placeholder="Username" name="uname" required>
<br>
<label><b>Password</b></label>
<input type="password" placeholder="Password" name="psw" required>
<br>
<label><b>Registration Password</b></label>
<input type="text" placeholder="Registration Key" name="reg" required>
<br>
<input type="submit" value="Register" />
</div>
</form>
</body>
</html>
當我試圖從註冊頁面成功的頁面去,它給了我一個錯誤403(CSRF驗證失敗請求中止)。但是,當我嘗試去url mysite.com/register/時,它返回我請求的頁面,沒有錯誤。
有什麼辦法解決這個問題嗎?我一直在尋找RequestContext,但我不完全確定它會在哪裏使用。
csrf上的1.10文檔提到您正在使用的渲染函數(假設它是導入的django的渲染)應該覆蓋RequestContext。你到目前爲止顯示的代碼看起來很好。這可能是中間件設置,網站設置中的另一個問題,但不是您發佈的代碼中看起來不錯。 另一方面,當您直接使用瀏覽器發送GET請求的URL時,該瀏覽器與CSRF實際上並不相關。在成功的表單處理之後,可能需要考慮單獨的成功視圖並執行HttpResponseRedirect。 –