python - 带有 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”
我不太确定为什么这些不起作用,因此将不胜感激任何帮助
解决方案
问题是当您编写该行时您的用户尚未登录。用户在您调用后登录到请求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)
推荐阅读
- angular - 组件和服务循环依赖?需要重构指导
- python - Django 找不到 Pillow,但它是使用 docker 安装的
- asp.net - 将 Set-Cookie 标头添加到 Http 拦截器 Angular
- json - 将 2 个 JSON 对象与 jq 合并
- html - Bootstrap 中的选项卡导航不起作用
- ssl - SSL 认证工作不一致(NGINX)
- c - 无法通过将指向数组的指针地址作为函数的参数传递来更改某些数组数据
- javascript - 输入范围 - 连同数量一起改变价格
- amazon-web-services - AWS NAT 网关不允许 EC2 连接到 Internet
- angular - Carousel 在 Angular 10 中不起作用:图像不会滑动