首页 > 解决方案 > 带有 LoginView 的 Django 登录消息

问题描述

我对为什么我的 LoginView 消息没有提取用户登录名感到有点困惑。我尝试了几种不同的方法,它要么会说“欢迎匿名用户”,要么会说“欢迎”(不添加任何内容)。我尝试了几种不同的方法,但我尝试解决的每种方法的结果都是相同的。我的代码如下:

class MyLoginView(LoginView):
    template_name = 'registration/login.html'

    success_message = 'Welcome'
    
    def form_valid(self, form):
        """Add message here"""
        messages.add_message(self.request, messages.INFO, f"{self.success_message} {self.request.user}")
        return super().form_valid(form)

这个会说“欢迎匿名用户”,如果我将代码更改为 {self.request.user.username} 它只会说“欢迎”

也试过

class MyLoginView(LoginView):
    template_name = 'registration/login.html'

    def form_valid(self, form):
        messages.success(self.request, f'Welcome {self.request.user}')
        return super().form_valid(form)

这将闪烁“欢迎匿名用户”的消息。如果我将代码更改为 f'Welcome {self.request.user.username}',那么显示的消息就是“Welcome”

我不太确定为什么这些不起作用,因此将不胜感激任何帮助

标签: pythondjango

解决方案


问题是当您编写该行时您的用户尚未登录。用户在您调用后登录到请求super().form_valid(form)。获取用户对象的方法是调用form.get_user()

class MyLoginView(LoginView):
    template_name = 'registration/login.html'

    def form_valid(self, form):
        user = form.get_user()
        messages.success(self.request, f'Welcome {user}')
        return super().form_valid(form)

推荐阅读