我正在使用内置的Django身份验证来发送电子邮件以重置密码。发送电子邮件是可行的,但是当我尝试按照该页面的链接重设密码时,Django更改了URL(我猜是一种重定向),然后尝试将URL解析为“ http://127.0.0.1:8000/registration/USER_ID/set-password” ,而不是“ http://127.0.0.1:8000/registration/USER_ID/TOKEN”。 Django然后抛出一个错误:'NoReverseMatch在/ registration / reset / USER_ID / set-password /'
我没有一个名为“ set-password”的文件,并且我的代码(模板,URLconf)中的任何地方都没有“ set-password”。
urlpatterns = [
...
...
path('password_reset/', auth_views.PasswordResetView.as_view(),
name='password_reset'),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(),
name='password_reset_done'),
path('reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(),
name='password_reset_confirm'),
path('reset/done', auth_views.PasswordResetCompleteView.as_view(),
name='password_reset_complete'),
]
我正在使用文档(https://docs.djangoproject.com/en/2.1/topics/auth/default/#using-the-views)中找到的代码来进行URL匹配,因此我没有创建任何新内容。似乎Django正在从URL中删除令牌?
答案 0 :(得分:0)
所以我想出了答案,如果将来有人遇到同样的问题。在“ password_reset_confirm”模板中,我将表单的操作设置为action="{% url 'password_reset_confirm' %}"
,这导致Django在最初加载页面时尝试构造该URL。因为“ password_reset_confirm”具有参数,所以出现了NoReverseMatch错误(因为我没有在操作URL中提供任何参数)。从表单中删除action
可以解决问题。