Python Django:在基于类的视图中访问变量
我正在建立一个网站,它有一个相当基本的用户系统,你可以做一些平常的事情,比如登录,修改密码等等。我正在使用一个Django项目的例子,在这里和那里做一些修改 当用户登录后,我可以访问用户的电子邮件地址,并将其添加到模板Python Django:在基于类的视图中访问变量,python,django,Python,Django,我正在建立一个网站,它有一个相当基本的用户系统,你可以做一些平常的事情,比如登录,修改密码等等。我正在使用一个Django项目的例子,在这里和那里做一些修改 当用户登录后,我可以访问用户的电子邮件地址,并将其添加到模板{{request.user.email}中,将其放入页面 但在通过电子邮件发送给用户重置密码的链接中,如果用户未登录,则相同的操作将不起作用。我猜一定有可能以某种方式访问它 这是我正在使用的类视图: class RestorePasswordConfirmView(Passwor
{{request.user.email}
中,将其放入页面
但在通过电子邮件发送给用户重置密码的链接中,如果用户未登录,则相同的操作将不起作用。我猜一定有可能以某种方式访问它
这是我正在使用的类视图:
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}
将持有一个匿名用户
对象
但是,如果我们看一下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\u context\u 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
在
PasswordResetConfirmView
中,{{{request.user.email}}
将无法工作,因为请求时未设置经过身份验证的用户{{request.user}
将持有一个匿名用户
对象
但是,如果我们看一下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\u context\u 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