Django LoginView发送成功消息

2024-10-03 15:35:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个LoginView类。 这里:

  class LoginFormView(LoginView):
    template_name = 'auth/login.html'
    success_url = '/profile'
    messages.success('<p class="success_login">You were successfully login</p>')

在这里:

^{pr2}$

通过我的功能,我可以发送成功消息作为消息.成功但什么时候。。登录消息成功需要*请求*消息我无法请求。怎么办?有什么想法吗?在

错误是:

 messages.success('<p class="success_login">You were successfully logout</p>') TypeError: success() missing 1 required positional argument: 'message'

提前谢谢你


Tags: nameauthyou消息urlhtmllogintemplate
2条回答

正如mariodev在他们的回答中所说的,您不能在类定义中调用messages.success,因为在加载模块时,在您有一个要处理的请求之前,代码会运行。在

messages应用程序没有重写form_valid,而是有一个success messages mixin,这可能很有用:

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">。最好在模板中添加这些标记。在

当类实例化并期望它工作时,不能调用message.success(因为它需要request对象)。在

DjangoLoginView不允许轻松定义成功消息,因此需要在登录过程成功后重写类方法。最好的地方是这里:

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

相关问题 更多 >