簡體   English   中英

Django LoginView發送成功消息

[英]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方法。 最好的地方在這里:

https://github.com/django/django/blob/4a461d49c775331ed52418f007974d61be1e06b9/django/contrib/auth/views.py#L89

所以像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM