新しいDjangoユーザがここにあります。 GETリクエストでDjangoのsuccess_url()へのアクセスを制限しようとしています。私はこの質問を最初にしたわけではないことを認識していますが、私はDjangoの一般的なクラスベースのビューと組み合わせてこれを達成しようとしています。一般的なビューはよりクリーンで、速く、より慣用的に見えます。私は彼らが仕事に絶対に不適格でない限り、できるだけそれらを使いたいです。Djangoのsuccess_url()へのアクセスを制限する
基本的には、アカウントを作成せずに私にメッセージを送信するだけの非ユーザ向けの簡単な連絡フォームを作成しています。これらのタイプの連絡先を処理する連絡先アプリを作成しました。 ModelFormを作成しました。これは、contact.htmlでDjangoのFormViewを使ってレンダリングしています。人がフォームを提出すると、自分のurlを持つthanks.htmlでレンダリングされたクールな感謝のメッセージが届きます。
しかし、連絡フォームをPOSTすると、感謝のメッセージが表示されます。現在、私のサイトに行き、「/ contact/thanks /」と入力すると、フォームを送信したかどうかに関わらず、thanks.htmlがレンダリングされます。 Djangoのsuccess_urlは、デフォルトではGETリクエストにデフォルト設定されています。ここで
が私の見解です:
class MyContact(FormView):
template_name = 'contact.html'
form_class = ContactForm
success_url = 'thanks'
は、ここに私のフォームです:
ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['email_address', 'message_body']
ここでhtmlフォームはcontact.htmlである:
<form action="" method="POST">{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="send btn btn-secondary">Send Message</button>
</form>
私が最初に考えたのは私の連絡先を飾ることでしたこのようなrequire_POST()デコレータのapp url:
理由はDjangoのsuccess_url()デフォルトでGETリクエストにurlpatterns = [
url(r'^thanks/$', require_POST(views.ThanksPageView.as_view()), name='thanks'),
]
これは動作しません。
これに最も慣れ親しんだ方法は何ですか? Djangoは 'バッテリーが含まれている'フレームワークなので、私は 'duck-tape'を使いたくないので、私のビューやURLにアドホックなロジックを実装したくないという意味です。
申し訳ありませんが、ドキュメントや質問アーカイブで何かを見逃しました。
ありがとうmhkuu! SuccessMessageMixinは素晴らしいです。私はまだそれを微調整していますが、実際には動作しています。今のところ、実際にはsuccess_urlを主張していますが、このスレッドを更新していきます。 –
あなたはそうです、私は/ thanks/urlを一掃することができましたが、FormViewのsuccess_url変数に/ contact/urlを割り当てる必要がありました。連絡先ページにメッセージが表示されますが、これは問題ありません。私は本当に感謝のメッセージを私は推測する必要はありません。再度、感謝します。 –