2012-05-12 28 views
7

tôi đã thiết lập các mục sau đây trong urls.pyCách sử dụng chế độ xem 'password_reset' được tích hợp sẵn trong Django?

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

nhưng một khi tôi đi đến http://127.0.0.1:8000/password_reset/ Tôi nhận được thông báo lỗi:

NoReverseMatch at /password_reset/ 
Reverse for 'django.contrib.auth.views.password_reset_done' with arguments '()' and keyword arguments '{}' not found. 

Tôi đã chờ đợi xem password_reset_done cũng được ra khỏi cái hộp. Vậy tôi phải làm gì ở giai đoạn này?

CẬP NHẬT

Sau khi cố gắng giải pháp của Blair, tôi nhận được một bước gần hơn.

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

Theo sách 'Phát triển trang web Django 1.0', các chế độ xem tích hợp này nên được sử dụng ngoài hộp mà không gặp rắc rối nào khác. Nhưng có lẽ nó đã thay đổi kể từ Django 1.0 ... Sẽ là tuyệt vời nếu ai đó có thể làm sáng tỏ điều này. Cảm ơn

+0

Tại sao một người nào đó bỏ phiếu -1 về điều này mà không có bất kỳ lời giải thích nào? Đây là một câu hỏi hợp lệ !!! – Houman

Trả lời

3

Tôi cuối cùng đã tìm được giải pháp. Tôi nghĩ luôn có sự hiểu lầm nhỏ giữa MVC và MTV. Trong MTV (Django) View là viết tắt của controller và Template là viết tắt của View.

Do đó trong khi đúng là mật khẩu thay đổi "Chế độ xem" được tích hợp sẵn trong hộp, các mẫu thực tế (xem & cảm thấy) vẫn cần được tạo bởi người dùng trong khi biểu mẫu bên dưới (tiện ích con)) được tạo ra bởi Django tự động. Nó trở nên rõ ràng hơn khi nhìn vào mã.

Do đó thêm hai dòng sau để url.py

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

Sau đó Dưới myproject/templates/đăng ký thêm hai tập tin

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

2

Django cần biết URL nào để chuyển hướng người dùng đến khi họ đã hoàn thành biểu mẫu trên trang password_reset. Vì vậy, hãy thêm một dòng khác vào cấu hình URL của bạn:

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

Tôi đã làm những gì bạn đề nghị, bây giờ nó nói: TemplateDoesNotExist tại/password_reset/... Ngoại lệ Giá trị: đăng ký/password_reset_form.html nó không có ý nghĩa nhiều với tôi, nếu tôi đã phải tạo mẫu bản thân mình. Tôi có thiếu gì ở đây không? – Houman

+0

Không hoàn toàn chắc chắn, tôi luôn tạo các mẫu tùy chỉnh để chúng phù hợp với chủ đề của phần còn lại của trang web. Có nói rằng, có vẻ là một số mẫu phù hợp trong các ứng dụng django.contrib.admin, vì vậy nếu bạn có quản trị Django kích hoạt chúng có thể được sử dụng? – Blair

0

Tính đến django 1.11 password_change xem bị phản đối.

Không được chấp nhận kể từ phiên bản 1.11: Chế độ xem mật khẩu thay đổi mật khẩu sẽ được thay thế bằng PasswordChangeView dựa trên lớp học.

gì làm việc cho tôi là:

Trong url.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'), 

Và sau đó thêm vài mẫu passwd_change_form.htmlpasswd_change_done.html dưới đăng ký.

Lưu ý rằng tôi không sử dụng tên mặc định, vì một số lý do khi tôi đã làm điều đó mặc định cho chế độ xem quản trị django.

Các vấn đề liên quan