【发布时间】:2020-01-02 07:20:36
【问题描述】:
所以,我试图建立一个博客网站,用户可以通过向他的电子邮件地址发送电子邮件来重置他的密码,我主要使用 Django Build In 功能。我试图让用户可以在其中重置密码的确认 URL 路径,但即使我包含密码重置确认的路径,也会出现错误。
错误:找不到“password_reset_confirm”的反向。 'password_reset_confirm' 不是有效的视图函数或模式名称。
我的 urls.py 用于密码重置
from django.conf.urls import url
from django.contrib.auth import views as auth_view
from django.urls import path
app_name = "blog"
urlpatterns = [
# for /blog/password-reset/
path('password-reset/', auth_view.PasswordResetView.as_view(template_name='blog/password_reset.html'), name="password_reset"),
# for /blog/password-reset/done/
path('password-reset/done/', auth_view.PasswordResetDoneView.as_view(template_name='blog/password_reset_done.html'), name="password_reset_done"),
# for /blog/password-reset/confirm/<uidb64>/token>
path('password-reset-confirm/<uidb64>/<token>', auth_view.PasswordResetConfirmView.as_view(template_name='blog/password_reset_confirm.html'), name="password_reset_confirm"),
]
注意:我没有包括所有网址,因为它有点大
我的密码-reset.html
{% extends 'blog/base_for_log.html' %}
{% load crispy_forms_tags %}
{% block title %}Blog{% endblock %}
{% block body %}
<div class = "container">
<div class="content-section py-5">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">
Password Reset
</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type = "submit">Request Reset Password</button>
</div>
</div>
</form>
</div>
</div>
{% endblock %}
我的博客/password_reset_confirm.html
{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block body %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Reset Password</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Reset Password</button>
</div>
</form>
</div>
{% endblock body %}
我希望输出是 ConnectionResufedError,但我得到了 NoReverseMatch 错误。
提前致谢。
【问题讨论】:
-
什么时候出现这个错误?能否请您分享您的电子邮件模板。我想您想在电子邮件模板中附加确认 url,并且 url 块应如下所示:
<a href="{% url 'blog:password_reset_confirm' %}">Confirm</a> -
我已经更新了问题。
-
实际上我认为 urls.py 中的路径有问题,然后它给出了它找不到密码重置确认的 URL,但现在我添加了 标签它给了我错误它说'reverse for 'password_reset_confirm' 没有找不到参数。尝试了 1 种模式:['blog\\/password\\-reset\\-confirm\\/(?P
[^/]+)\\/(?P [^/] +)$']' -
是的,我想念参数。但关键是我们需要
app_name:url_name才能使其工作。 -
实际上,我不需要定义 url,因为它提交了一个 post 请求,Django 会自动重定向到 password_reset_done 页面。