7

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ビューも箱から出てくることを期待していました。では、この段階で私は何をすべきでしょうか?

アップデート

ブレアの解決策を試した後、私は一歩近づきました。

(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),

「Django1.0Webサイト開発」という本によると、これらの組み込みビューは、さらに面倒なことなく、箱から出してすぐに使用できるはずです。しかし、おそらくそれはDjango1.0から変更されています...誰かがこれに光を当てることができれば素晴らしいでしょう。ありがとう

4

3 に答える 3

3

私はついに解決策を見つけました。MVCとMTVのパターンの間には常にわずかな誤解があると思います。MTV(Django)では、ビューはコントローラーを表し、テンプレートはビューを表します。

したがって、パスワードの変更「ビュー」がすぐに組み込まれるのは事実ですが、実際のテンプレート(ルックアンドフィール)はユーザーが生成する必要があり、基になるフォーム(ウィジェット)は次のように生成されます。自動的にDjango。コードを見ると、より明確になります。

したがって、これらの2行をurl.pyに追加します

(r'^change-password/$', 'django.contrib.auth.views.password_change'), 
(r'^password-changed/$', 'django.contrib.auth.views.password_change_done'),

次に、myproject / templates/registrationの下にこれらの2つのファイルを追加します

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

ここに画像の説明を入力してください

于 2012-05-14T09:53:43.363 に答える
2

Djangoは、password_resetページのフォームに入力したら、ユーザーをリダイレクトするURLを知る必要があります。したがって、URL構成に別の行を追加します。

(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),
于 2012-05-12T22:32:05.263 に答える
1

django 1.11以降、password_changeビューは非推奨になりました。

バージョン1.11以降で非推奨:password_change関数ベースのビューは、クラスベースのPasswordChangeViewに置き換える必要があります。

私のために働いたのは:

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.htmlpasswd_change_done.htmlを追加します。

デフォルトの名前を使用していないことに注意してください。何らかの理由で、デフォルトのdjango管理ビューが使用されています。

于 2017-08-29T15:29:46.963 に答える