我有一个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'
提前谢谢
答案 0 :(得分:1)
在实例化类时,不能调用message.success
并期望它可以工作(因为它需要request
个对象)。
Django LoginView
不允许轻松定义成功消息,因此您需要在登录过程成功后覆盖类方法。最好的地方就在这里:
类似于:
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">
。最好在模板中添加这些标签。