收到电子邮件时如何自定义密码确认视图 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/… 我假设authsystem
是INSTALLED_APPS
中的应用程序?
感谢您的回复不知何故我设法使它工作我覆盖了帐户模板,然后在序列化程序中进行了一些更改。
这里有同样的问题,无法让 Django(使用 rest-auth,而不是 all-auth)实际为密码更改视图提供我的自定义模板(我得到了 DRF 自动生成的基于 OPTIONS 的视图仅当我将网络浏览器定向到电子邮件中的链接时)。这一切都很神奇,而且子应用程序使用彼此的视图和模板并没有帮助......:/以上是关于收到电子邮件时如何自定义密码确认视图 Django Rest Auth的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时收到此错误