如何使用内置的“password_reset”#39;在Django中查看?

时间:2012-05-12 22:22:10

标签: python django django-1.4

我在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以来它已发生变化...... 如果有人能够阐明这一点,那将会很棒。感谢

3 个答案:

答案 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 %}

enter image description here

答案 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管理员视图。