首页 > 解决方案 > Django重置密码链接给出404

问题描述

我已经实现了 django_reset_password 功能。

一切都在本地主机上完美运行,但是当我在服务器上运行相同的东西时,我在电子邮件中获得的链接显示服务器上的 404。

path('password_reset/', password_reset, name='auth_password_reset'),
path('password_reset/done/', password_reset_done, name='auth_password_reset_done'),
path('reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/',
     password_reset_confirm, name='auth_password_reset_confirm'),
path('reset/done/', password_reset_complete, name='auth_password_reset_complete'),

“auth_password_reset_confirm”是我在服务器上得到 404 的函数。

http://testing.xyz.com/auth/reset/(%3FPNg%5B0-9A-Za-z_%5C-%5D+)/(%3FP5id-91751fc793227bd46093%5B0-9A-Za-z%5D%7B1, 13%7D-%5B0-9A-Za-z%5D%7B1,20%7D)/

上面的链接给出了 404

http://127.0.0.1:8000/auth/reset/(%3FPNg%5B0-9A-Za-z_%5C-%5D+)/(%3FP5id-91751fc793227bd46093%5B0-9A-Za-z%5D%7B1, 13%7D-%5B0-9A-Za-z%5D%7B1,20%7D)/

但是这个相同的 url 在 localhost 中有效。

请告诉我我做错了什么。

标签: pythondjango

解决方案


好吧,我以为我使用的是 django 2.2,所以我应该使用 'path' 而不是 'url' 但随后出现了上述错误。

所以我将我的“路径”转换为“url”,它起作用了。

由此:

path('password_reset/', password_reset, name='auth_password_reset'),
path('password_reset/done/', password_reset_done, name='auth_password_reset_done'),
path('reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/',
     password_reset_confirm, name='auth_password_reset_confirm'),
path('reset/done/', password_reset_complete, name='auth_password_reset_complete'),

对此:

url(r'^password_reset/$', password_reset, name='auth_password_reset'),
url(r'^password_reset/done/$', password_reset_done, name='auth_password_reset_done'),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/$',
     password_reset_confirm, name='auth_password_reset_confirm'),
url(r'^reset/done/$', password_reset_complete, name='auth_password_reset_complete'),

它奏效了!!


推荐阅读