Django LoginView发送成功消息

时间:2017-11-01 12:11:56

标签: python django

我有一个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'

提前谢谢

2 个答案:

答案 0 :(得分:1)

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

Django LoginView不允许轻松定义成功消息,因此您需要在登录过程成功后覆盖类方法。最好的地方就在这里:

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())

此外,您需要添加自定义登录网址并将其指向自定义LoginView

答案 1 :(得分:1)

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

消息应用有success messages 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">。最好在模板中添加这些标签。

相关问题