Django:在基于类的视图中访问变量

2024-10-01 07:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我建立了一个网站与一个相当基本的用户系统,你可以做一些平常的事情,如登录,更改密码等,我使用的是一个Django项目的例子,并改变它在这里和那里有点

当用户登录时,我可以访问用户的电子邮件地址并将其添加到模板{{ 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变量


Tags: 用户selfform密码datagetreturnemail
1条回答
网友
1楼 · 发布于 2024-10-01 07:20:24

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

相关问题 更多 >