【问题标题】:Reset Password Using Django使用 Django 重置密码
【发布时间】:2021-04-05 09:24:45
【问题描述】:

我正在尝试使用 Django 重置密码,但出现以下错误:

Method Not Allowed (POST): /reset/done/
Method Not Allowed: /reset/done/

以下是我的表格:

向我的电子邮件发送链接的表单

<form action="{% url 'reset_pass' %}" method="post">
    {% csrf_token %}
    <div class="form-group">
        <input type="email" class="form-control" name="email" placeholder="Email" required autofocus>
    </div>
    <input type="submit" value="Send Email" class="btn btn-primary btn-block">
</form>

点击该链接后的表单

<form action="{% url 'password_reset_complete' %}" method="post">
    {% csrf_token %}
    <div class="form-group">
       <input type="password" class="form-control" name="new_pass" placeholder="New Password" required autofocus>
    </div>
    <div class="form-group">
       <input type="password" class="form-control" name="confirm_pass" placeholder="Confirm Password" required>
    </div>
    <input type="submit" value="Update Password" class="btn btn-primary btn-block">
</form>

网址

path('reset/pass/', views.reset_pass, name='reset_pass'),
path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="feebeeapp/reset_form.html"), name='password_reset_form'),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(template_name='feebeeapp/login.html'), name='password_reset_complete')

不确定,我做错了什么。有人可以指导我吗?

【问题讨论】:

  • 您提交到错误的视图。您应该提交到PasswordResetConfirmView 视图,该视图将发送电子邮件。
  • 在 PasswordResetConfirmView 上,我得到了上面显示的代码表单。在那之后,我相信我将不得不做 PasswordResetCompleteView。
  • 不,提交到 same 视图是一种非常常见的模式,但随后使用 POST 请求。该视图将通过电子邮件发送一个重置链接,然后重定向 到password_reset_complete 视图。因此,PasswordResetConfirmView 既处理 GET 请求(以呈现表单),又处理 POST 请求(以发送重置链接)。

标签: python django reset-password


【解决方案1】:

您的表单提交到错误的视图。您应该向 PasswordResetConfirmView 视图发出 POST 请求。

如果您的PasswordResetConfirmView因此注册为:

path('reset/', auth_views.<b>PasswordResetView</b>.as_view(), name=<b>'password_reset'</b>)

然后在您使用的表单中:

<form action="{% url 'password_reset' %}" method="post">
    …
</form>

通常您已经使用此视图来渲染表单。所以你向 same 视图提交 POST 请求。

此视图将发送带有重置链接的电子邮件,然后将重定向到password_reset_complete 视图。

【讨论】:

  • 重置链接将我重定向到此表单。之后我执行 PasswordResetCompleteView 但收到此错误。我也试过 PasswordResetConfirmView 但我得到了断言错误。
  • 它会重定向,但不会更新密码。 @WillemVanOnsem
  • @MaisumAbbas:但是当您重置您的密码时,密码的更新永远不会完成。这是通过电子邮件链接完成的。如果您想更新表单,请使用 PasswordChangeView...
  • @MaisumAbbas:PasswordResetView 在您忘记密码时使用,因此会通过电子邮件发送重置链接以更新密码。
  • 我已经更新了我的代码。请看那个。 @WillamVanOnsem
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多