当用户直接转到 allauth 中的“/password/reset/done/”时重定向或显示不同的内容?

Redirect or Display different content while user directly goes to '/password/reset/done/' in allauth?

当用户请求重设密码时,他将被重定向到 /password/reset/done/,告诉用户 'We have sent you an e-mail...',但如果您直接转到该页面,您会得到相同的信息,这有点混乱,因为没有电子邮件发送给任何人。

是否有可以在 password_reset_done.html 模板中使用的变量,例如 {{ messages }},以便在 if 条件下其他内容可以显示给直接访问者?如果没有,有没有办法做到这一点?

编辑:

请不要急于将此标记为 How to use the built-in 'password_reset' view in Django? 的重复问题。

我知道如何显示该页面 /password/reset/done/,这基本上是一个专门用于告诉用户 "we've sent you an email so that you can follow the link to reset your password..." 的阶段,而您所指的问题是关于如何正确密码重置成功时重定向用户。

我正在寻找的是一种方法,可以将它重定向到另一个页面,或者在用户尝试直接浏览该页面时显示一些不同的东西(人们有时会这样做)应该在之后查看他成功提交了密码重置请求。我需要某种钩子来让它工作。

您可以使用 Django 消息框架 通知用户成功或失败:

from django.contrib import messages
def my_view(request):
    # your view logic goes here
    if sucess_condition:
        messages.success(request, 'Action accomplished with success.')
    else:  
        messages.error(request, 'Action Failed.')

查看 Messages Framework 文档以了解更多详细信息和自定义。

查看 /account/views.py 中的代码后,我意识到需要在前一个 /password/reset/ 页面中添加一条消息,以便它可以在下一个 /password/reset/done/ 页面中使用.

这是一个例子:

class PasswordResetViewform_valid方法中添加:

get_adapter().add_message(self.request,
                          messages.INFO,
                          'account/messages/'
                          'password_reset_mail_sent.txt',
                          {'email': form.cleaned_data["email"]})

现在我可以在 'account/messages/password_reset_mail_sent.txt' 中使用 {{ email }},在 password_reset_done.html 中使用 {% if messages %} 我可以为直接访问者提供不同的内容。