gpt4 book ai didi

python - Django:在基于类的 View 中访问变量

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:10 26 4
gpt4 key购买 nike

我正在建立一个具有相当基本的用户系统的网站,您可以在其中执行登录、更改密码等常用操作。我正在使用一个示例 Django 项目,并在这里和那里稍微更改它。

当用户登录时,我可以访问用户的电子邮件地址,并将其添加到模板 {{ request.user.email }} 中。

但是在通过电子邮件发送给用户以重置其密码的链接中,在用户未登录的情况下,同样的事情不起作用。不过,我猜一定可以通过某种方式访问​​它。

这是我正在使用的类 View :

class RestorePasswordConfirmView(PasswordResetConfirmView):
template_name = 'accounts/restore_password_confirm.html'

def form_valid(self, form):
form.save()
messages.success(self.request, _('Your password has been set. You may go ahead and log in now.'))
return redirect('/')

def get_context_data(self, **kwargs):
context = super(RestorePasswordConfirmView, self).get_context_data(**kwargs)
context = {**context, **host_(self.request)}
return context

有什么方法可以访问 user.email 变量吗?

最佳答案

PasswordResetConfirmView 中,预计 {{request.user.email}} 不会工作,因为没有根据请求设置经过身份验证的用户。 {{request.user}} 将包含一个 AnonymousUser 对象。

但是,如果我们查看 PasswordResetConfirmView 的实现方式,我们会注意到在 PasswordResetConfirmView.dispatch() 中,Django 将用户设置为 self 像这样:

@method_decorator(sensitive_post_parameters())
@method_decorator(never_cache)
def dispatch(self, *args, **kwargs):
assert 'uidb64' in kwargs and 'token' in kwargs

self.validlink = False
self.user = self.get_user(kwargs['uidb64'])

这意味着您可以像上面那样覆盖 get_context_data() 并确保您还将用户发送到模板:

def get_context_data(self, **kwargs):
context = super(RestorePasswordConfirmView, self).get_context_data(**kwargs)
context = {**context, **host_(self.request)}
context['user'] = self.user
return context

关于python - Django:在基于类的 View 中访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58179217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com