收到电子邮件时如何自定义密码确认视图 Django Rest Auth

Posted

技术标签:

【中文标题】收到电子邮件时如何自定义密码确认视图 Django Rest Auth【英文标题】:How can I customize Password Confirm View when received Email Django Rest Auth 【发布时间】:2019-12-31 08:06:07 【问题描述】:

我正在使用 django Rest Auth 实现密码重置,当来自 reactjs 前端的请求命中时我需要做两件事但它会将我发送到本机 Rest UI PasswordConfirmView。

我希望,当用户点击请求时,它应该使用我的模板,即 password_reset.html、password_reset_confirm.html、password_reset_done.html... 我们在模板/应用程序名目录中创建的模板 我的尝试:

urls.py:

   urlpatterns=[
url(
    r'^rest-auth/password/reset/$',
    PasswordResetView.as_view(),
    name='password_reset',
),
url(
    r'^rest-auth/password/reset/confirm/'
    r'(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]1,13-[0-9A-Za-z]1,20)/$',
    PasswordResetConfirmView.as_view(),
    name='password_reset_confirm'),
    ]

身份验证系统/模板:

password_reset_confirm.html:

          <!DOCTYPE html>
    <html lang="en">
      <head>
      <meta charset="UTF-8">
       <title>Title</title>
      </head>
      <body>
        % if validlink %
           <h3>Change password</h3>
              <form method="post">
               % csrf_token %
               form.as_p 
  <button type="submit">Change password</button>
</form>
   % else %
    <p>
  The password reset link was invalid, possibly because it has already been used.
  Please request a new password reset.
</p>
 % endif %
</body>
 </html>

我知道上述方法较少但我想知道如何使它工作已发送,当我单击电子邮件中的链接时,我想显示我的模板,令牌和 uid 应该从模板传递,我已准备好所有模板但不知道如何与 Django Rest Auth 一起使用。

【问题讨论】:

这不是 REST 视图 (API),它只是 allauth 包中的普通视图,因此您不必更改任何 URL(如果您更改了 @ 987654323@ 在您的主要网址中)。只需将模板放在 templates 目录中的 account 目录中,即可覆盖 allauth 使用的模板。另外我认为模板名称不正确,应该是 authsystem/templates/account/password_reset_from_key.html 【参考方案1】:

一般来说,如果您想从包中覆盖模板,请确保首先检查视图中使用的模板的路径。例如。在 rest-auth 包中(如果你没有安装 allauth),密码重置由默认的 Django PasswordResetConfirmView (django.contrib.auth.views) 处理,它使用模板 'registration/password_reset_confirm.html ',由于某种原因,它位于 django/contrib/admin/templates/registration 中。

所以模板的加载方式,如果在你的任何应用程序中,你有这个模板,它将在 Django 之前加载。只需创建 authsystem/templates/registration/password_reset_confirm.html,这就是将使用的那个,而不是 django/contrib/admin 中的默认那个。

如果您使用 allauth,则视图为 PasswordResetFromKeyView (allauth.account.views) 和相应的模板 account/password_reset_from_key.html。因此,在 authsystem/templates/account/password_reset_from_key.html 中创建此模板将覆盖来自 allauth 的模板。

【讨论】:

我已经删除了所有身份验证,只保留了 rest 身份验证,我已经覆盖了 password_reset_email.html 模板,但是当我点击电子邮件中的链接时,本地 ui 来自 django rest 而不是我的自定义身份验证系统/模板/registration/password_reset_confirm.html 链接如下:127.0.0.1:8000/auth/rest-auth/password/reset/confirm/MQ/… 我假设authsystemINSTALLED_APPS 中的应用程序? 感谢您的回复不知何故我设法使它工作我覆盖了帐户模板,然后在序列化程序中进行了一些更改。 这里有同样的问题,无法让 Django(使用 rest-auth,而不是 all-auth)实际为密码更改视图提供我的自定义模板(我得到了 DRF 自动生成的基于 OPTIONS 的视图仅当我将网络浏览器定向到电子邮件中的链接时)。这一切都很神奇,而且子应用程序使用彼此的视图和模板并没有帮助......:/

以上是关于收到电子邮件时如何自定义密码确认视图 Django Rest Auth的主要内容,如果未能解决你的问题,请参考以下文章

Django 创建自定义 UserCreationForm

Django 创建自定义 UserCreationForm

自定义Django登录,无法比较密码

尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时收到此错误

Django,自定义身份验证登录。身份验证失败时如何显示错误消息?

从 django 中的自定义数据库表中检查电子邮件和密码