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

收到电子邮件Django Rest Auth时如何自定义密码确认视图,django,reactjs,django-rest-framework,django-urls,django-rest-auth,Django,Reactjs,Django Rest Framework,Django Urls,Django Rest Auth,我正在使用django Rest Auth实现密码重置,当请求从reactjs前端点击时,我需要做两件事我希望自定义电子邮件我希望使用Password_reset_email.html模板。首先,我使用简单的PasswordResetView,我收到了电子邮件,但它将我发送到本机Rest UI PasswordConfirmView 我想,当用户点击请求时,它应该使用我的模板,它们是,password\u reset.html,password\u reset\u confirm.html,pa

我正在使用django Rest Auth实现密码重置,当请求从reactjs前端点击时,我需要做两件事我希望自定义电子邮件我希望使用Password_reset_email.html模板。首先,我使用简单的PasswordResetView,我收到了电子邮件,但它将我发送到本机Rest UI PasswordConfirmView

我想,当用户点击请求时,它应该使用我的模板,它们是,password\u reset.html,password\u reset\u confirm.html,password\u reset\u done.html。。。我们在templates/appname目录中创建 我的尝试:

url.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'),
    ]
urlpatterns=[
网址(
r“^rest auth/password/reset/$”,
PasswordResetView.as_view(),
name='password\u reset',
),
网址(
r“^rest身份验证/密码/重置/确认/”
r'(?P[0-9A-Za-z_ \-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$,
PasswordResetConfirmView.as_view(),
name='password\u reset\u confirm'),
]
authsystem/模板:

   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'),
    ]
密码\u重置\u确认.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>

标题
{%if validlink%}
更改密码
{%csrf_令牌%}
{{form.as_p}}
更改密码
{%else%}

密码重置链接无效,可能是因为它已被使用。
请请求重新设置新密码。

{%endif%}

我知道上面的方法比较少,但我想知道如何让它工作我不想使用rest auth内置UI,当请求从react端命中时,我如何在发送电子邮件时使用模板,当我单击电子邮件中的链接时,我想显示我的模板,令牌和uid应该从模板传递,我已经准备好了所有模板,但不知道如何与Django Rest Auth一起使用。

通常,如果要覆盖包中的模板,请确保首先检查视图中使用的模板路径。例如,在rest身份验证软件包中(如果您没有安装allauth),密码重置由默认的Django
PasswordResetConfirmView
(Django.contrib.auth.views)处理,它使用模板'registration/password\u reset\u confirm.html',由于某种原因,它位于django/contrib/admin/templates/registration中

所以模板的加载方式,如果在你的任何应用程序中,你有这个模板,它将在Django之前加载。只需创建authsystem/templates/registration/password\u reset\u confirm.html,它将取代django/contrib/admin中的默认值


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

这不是REST视图(API),它只是来自allauth包的普通视图,因此您不必更改任何url(如果您更改了
url(r'^account/',include('allauth.url')),
在您的主URL中)。只需覆盖allauth使用的模板,方法是将模板放在模板目录中的帐户目录中。另外,我认为模板名称不正确,应该是authsystem/templates/account/password\u reset\u from\u key.htmlI已删除所有auth并保持rest auth,我已覆盖password\u reset\u email.html模板,但是,当我点击电子邮件中的链接时,本机用户界面来自django rest,而不是我的自定义authsystem/Templates/registration/password\u reset\u confirm.html该链接看起来是这样的:我假设
authsystem
已安装的应用程序中的一个应用程序
谢谢你的回复,不知怎的,我成功地使它工作了,我覆盖了帐户模板并然后在serializer中进行一些更改。同样的问题是,无法让Django(使用rest auth,而不是所有auth)实际为密码更改视图提供自定义模板(只有当我将web浏览器指向电子邮件中的链接时,我才能获得基于DRF自动生成选项的视图)。这一切都是不可思议的,而且子应用程序使用彼此的视图和模板,这也于事无补/