[英]Django LoginView send success message
我有一個LoginView類。 這里:
class LoginFormView(LoginView):
template_name = 'auth/login.html'
success_url = '/profile'
messages.success('<p class="success_login">You were successfully login</p>')
和這里:
def log_out(request):
logout(request)
messages.success(request,
'<p>You were successfully logout</p>')
return redirect('/')
通過我的功能,我可以將成功消息作為messages.success發送,但是當..登錄消息成功需要* request * message我無法請求。 該怎么辦? 有任何想法嗎?
錯誤是:
messages.success('<p class="success_login">You were successfully logout</p>') TypeError: success() missing 1 required positional argument: 'message'
先感謝您
當實例化該類並期望它起作用時,您不能調用message.success
(因為它需要request
對象)。
Django LoginView
不允許輕松定義成功消息,因此您需要在登錄過程成功后覆蓋class方法。 最好的地方在這里:
所以像這樣:
def form_valid(self, form):
"""Security check complete. Log the user in."""
auth_login(self.request, form.get_user())
messages.success(self.request, '<p class="success_login">You were successfully login</p>')
return HttpResponseRedirect(self.get_success_url())
另外,您需要添加自定義登錄URL,並將其指向自定義LoginView
正如mariodev在回答中所說的那樣,您無法在類定義中調用messages.success
,因為該代碼在加載模塊時即在您有請求處理之前運行。
消息應用程序具有覆蓋成功消息mixin的功能 ,而不是覆蓋form_valid
,這可能很有用:
from django.contrib.messages.views import SuccessMessageMixin
class LoginFormView(SuccessMessageMixin, LoginView):
template_name = 'auth/login.html'
success_url = '/profile'
success_message = "You were successfully logged in"
我會避免在消息本身中包含<p class="success_login">
。 最好在模板本身中添加這些標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.