私はDjangoのサンプルを見てきましたが、まともなエラー処理があることがわかりました。しかし、もっと良いアプローチがあるかどうかを知りたいのですが、Djangoでフォームの検証エラーを処理する一般的なパターンです。これは私がhereを発見したサンプルです:特にDjangoで良いフォーム検証を書くには?
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render_to_response('contact.html', {
'form': form,
})
、私は思っていた:
- どのようにビュー「/ありがとう/」フォームが検証されたことを確認してください?フォームの検証を次のビューに渡す一般的な方法はありますか?または、リクエストのセッションでフラグを設定するなど手動で何か処理を行う必要がありますか?
フォームが有効ではなく、送信時にページが表示された場合、ユーザーがブラウザを更新した場合、POSTデータを再度送信するかどうか尋ねることがないように、
編集:私は手動で「/ありがとう/」URLを入力するか、歴史のページを前後に行くと誤って検証されている任意のフォームなしでそれをopenningユーザーのような例を参照しています#1に関して。 (「ありがとう」ページがまだ表示されているのですか、またはなぜ私たちが感謝の気持ちを持っているのかを何らかの形で再確認する必要があります)。
1.私は、ユーザーが手作業で '/ thanks /' URLを入力したり、履歴ページを前後に移動したり、フォームが検証されずに誤って開くなどの場合を求めていました。 (私たちはまだ「ありがとう」ページを表示しているのですか?または、なぜ私たちが感謝の気持ちでいるのかを何とか再検証する必要があります) – aligf
2.同じビューにリダイレクトする方法はあるのでしょうか?たぶん私はリクエストセッションを使用する必要がありますか? – aligf
リダイレクトしている場合は、 'request'に格納されているデータが失われているので、そのセッションを使わなければなりません。おそらく、別のビューを作成する必要はないでしょうし、フォームビューでテンプレートをレンダリングしてそこに戻すこともできます...必要以上に注意深くしようとしていると思いますが、フォームデータがデータベースに2回保存されることを避け、ユーザーが実際に何かを破壊することはできません。 –