私の学校の登録ウェブサイトを作成していて、フレームワークに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を実行することを検討する価値があります。 –