這裏是新的Django用戶。 我想在GET請求時限制對Django的success_url()的訪問。我意識到我不是第一個問這個問題的人,但是,我特別試圖通過Django的泛型基於類的視圖來實現這一點。通用視圖看起來更乾淨,更快,更習慣。我想盡可能地使用它們,除非它們完全不適合這項工作。限制對Django的訪問success_url()
基本上,我正在爲非用戶創建一個簡單的聯繫表單,他們只想在不創建帳戶的情況下向我發送消息。我創建了一個聯繫人應用來處理這些類型的聯繫人。我創建了一個ModelForm,我用一個帶有Django FormView的contact.html進行渲染。一個人提交表單後,他們會收到一個很酷的表示謝意的信息,並使用具有自己url的thanks.html進行呈現。
但我只希望他們看到感謝信息,如果他們張貼聯繫表格。目前,您可以在我的網站上輸入'/ 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']
下面是contact.html HTML表單:
<form action="" method="POST">{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="send btn btn-secondary">Send Message</button>
</form>
我首先想到的是裝飾我聯繫使用require_POST()裝飾器的應用程序url是這樣的:
urlpatterns = [
url(r'^thanks/$', require_POST(views.ThanksPageView.as_view()), name='thanks'),
]
這不起作用,因爲Django的success_url()默認爲GET請求。
什麼是最習慣的方法來解決這個問題?由於Django是一個「包含電池」的框架,我不想使用'duck-tape',這意味着我不想在我的觀點或URL中實現任何特定的邏輯。
對不起,如果我錯過了任何文檔或問題存檔。
謝謝你mhkuu! SuccessMessageMixin非常棒。我仍在調整它,但它確實有效。僅供參考,目前它實際上堅持一個success_url,但我會繼續更新此線程,因爲我弄清楚了。 –
你說得對,我可以一起擺脫/ thanks/url,但我必須將我的/ contact/url分配給我的FormView的success_url變量。該消息出現在聯繫頁面,這很好。我想我現在並不需要那些精彩的感謝信息。再次感謝。 –