我在urls.py中设置了以下条目
(r'^password_reset/$', 'django.contrib.auth.views.password_reset'),
但是一旦我转到http://127.0.0.1:8000/password_reset/
,我收到错误消息:
NoReverseMatch at /password_reset/
Reverse for 'django.contrib.auth.views.password_reset_done' with arguments '()' and keyword arguments '{}' not found.
我期待password_reset_done视图也可以开箱即用。那么在这个阶段我应该做些什么呢?
更新
在尝试了Blair的解决方案之后,我又向前迈了一步。
(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),
根据“Django 1.0网站开发”一书,这些内置视图应该是开箱即用的,没有进一步的麻烦。但也许自Django 1.0以来它已发生变化...... 如果有人能够阐明这一点,那将会很棒。感谢
答案 0 :(得分:3)
我终于找到了解决方案。我认为MVC和MTV模式之间总会存在轻微的误解。在MTV(Django)中,View代表控制器,Template代表View。
因此,虽然它确实改变了密码" Views"开箱即用内置,实际模板(外观和感觉)仍然需要由用户生成,而底层表单(小部件)由Django自动生成。在查看代码时会更清楚。
因此请将这两行添加到 url.py
(r'^change-password/$', 'django.contrib.auth.views.password_change'),
(r'^password-changed/$', 'django.contrib.auth.views.password_change_done'),
然后在myproject / templates / registration下添加这两个文件
<强> password_change_done.html 强>
{% extends "base.html" %}
{% block title %}Password Change Successful{% endblock %}
{% block head %}Password Change Completed Successfully{% endblock %}
{% block content %}
Your password has been changed successfully. Please re-login with your new credentials
<a href="/login/">login</a> or go back to the
<a href="/">main page</a>.
{% endblock %}
<强> password_change_form.html 强>
{% extends "base.html" %}
{% block title %}Change Registration{% endblock %}
{% block head %}Change Registration{% endblock %}
{% block content %}
<form method="post" action=".">
{{form.as_p}}
<input type="submit" value="Change" />
{% csrf_token %}
</form>
{% endblock %}
答案 1 :(得分:2)
Django需要知道在用户在password_reset页面上完成表单后将用户重定向到哪个URL。因此,在URL配置中添加另一行:
(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),
答案 2 :(得分:1)
自django 1.11 password_change
视图不推荐使用。
自版本1.11开始不推荐使用:基于类的PasswordChangeView应替换基于password_change函数的视图。
对我有用的是:
在 urls.py
中from django.contrib.auth import views as auth_views
...
url('^account/change-password/$',
auth_views.PasswordChangeView.as_view(
template_name='registration/passwd_change_form.html'),
name='password_change'),
url(r'^account/password-change-done/$',
auth_views.PasswordChangeDoneView.as_view(
template_name='registration/passwd_change_done.html'),
name='password_change_done'),
然后在注册下添加几个模板 passwd_change_form.html 和 passwd_change_done.html 。
请注意,由于某些原因我没有使用默认名称,因为它默认为django管理员视图。