You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django密码重置报错:Method Not Allowed (POST): password_reset/done

解决Django密码重置表单POST到password_reset_done的405错误

嘿,这个问题我之前踩过坑,核心原因是你搞混了Django原生密码重置流程里各个视图的职责:

  • password_reset(对应URL accounts/password_reset/)是处理POST请求的核心视图,负责接收用户输入的邮箱、生成重置链接并发送邮件;
  • password_reset_done(对应URL accounts/password_reset/done/)只是一个纯展示的GET页面,用来提示用户“重置邮件已发送”,它根本不处理POST请求,所以你把表单的action指向这个URL,提交时自然会触发Method Not Allowed (POST)错误。

修复步骤:

  1. 修正表单的action属性
    把表单的action从{% url 'password_reset_done' %}改成{% url 'password_reset' %},或者干脆删掉action属性(表单会默认提交到当前页面,前提是当前页面就是password_reset视图对应的URL):

    <form method="post" class="m-t" role="form" action="{% url 'password_reset' %}">
        {% csrf_token %}
        <div class="form-group">
            <!-- 你的表单字段,比如邮箱输入框 -->
            {{ form.email }}
        </div>
        <!-- 提交按钮等其他内容 -->
    </form>
    
  2. 确认URL配置正确
    检查你的urls.py里是否正确配置了原生auth的密码重置视图,确保每个视图对应正确的URL和名称:

    from django.contrib.auth import views as auth_views
    
    urlpatterns = [
        # ...其他URL
        path('accounts/password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
        path('accounts/password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
        # 别忘了后续的重置确认和完成页面
        path('accounts/reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
        path('accounts/reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    ]
    

    这里PasswordResetView是处理POST的核心视图,而PasswordResetDoneView是纯展示用的,只响应GET请求。

  3. 确认模板对应正确的视图
    确保你的password_reset_form.html是给PasswordResetView使用的模板(这个视图默认查找的就是这个模板名),而password_reset_done.html对应PasswordResetDoneView,不要把两个模板的用途搞混。

这样调整后,表单提交POST请求到正确的password_reset视图,处理完成后会自动跳转到password_reset_done页面,就不会再出现405错误啦。

内容的提问来源于stack exchange,提问作者osemka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:49:49