Django password_reset / done页面覆盖我的自定义URL

时间:2018-10-20 12:28:48

标签: python django

我正在使用自定义html处理我的注册密码重置区域,因此覆盖了Django的密码重置页面。

重设密码初始链接可以正常工作,并重定向到我的自定义URL:

dependencies {
    ...
    test "org.grails:grails-datastore-test-support:1.0.2-grails-2.4"
    runtime "com.h2database:h2:1.4.196"
}

用户可以输入其电子邮件地址,然后单击“提交”以接收密码重置电子邮件。显示的下一页应该是

/account/reset-password/

但是,当他们单击提交时,我可以从命令行看到:

/account/reset-password/done/

第二行应该转到

POST /account/reset-password/ HTTP/1.1" 302 0
GET /password_reset/done/ HTTP/1.1" 302 0
GET /account/login/ HTTP/1.1" 200 2237

不是

/account/reset-password/done/

urls.py

/password_reset/done/

settings.py

app_name='accounts'
from django.conf.urls import url
from . import views
from django.contrib.auth.views import LoginView, LogoutView, PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^login/$', LoginView.as_view(template_name='accounts/login.html'), name='login'),
    url(r'^logout/$', LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
    url(r'^register/$', views.register, name='register'),
    url(r'^profile/$', views.view_profile, name='view_profile'),
    url(r'^profile/edit$', views.edit_profile, name='edit_profile'),
    url(r'^change-password/$', views.change_password, name='change_password'),

    url(r'^reset-password/$',
    PasswordResetView.as_view(template_name='accounts/reset_password.html'),
    {'post_reset_redirect': 'accounts:reset_password_done',
    'email_template_name': 'accounts/reset_password_email.html'},
    name='reset_password'),

    url(r'^reset-password/done/$',
    PasswordResetDoneView.as_view(template_name='accounts/reset_password_done.html'),
    name='reset_password_done'),

    url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>,+)/$',
    PasswordResetConfirmView.as_view(template_name='accounts/reset_password_confirm.html'),
    name='reset_password_confirm'),

    url(r'^reset-password/complete/$',
    PasswordResetConfirmView.as_view(template_name='accounts/reset_password_complete.html'),
    name='reset_password_complete'),

]

middleware.py

INSTALLED_APPS = [
    'accounts',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

1 个答案:

答案 0 :(得分:2)

您可以在PasswordResetView中设置success_url

url(r'^reset-password/$',
    PasswordResetView.as_view(template_name='accounts/reset_password.html'),
    {
    'email_template_name': 'accounts/reset_password_email.html',
     'success_url' : reverse_lazy('accounts:reset_password_done')
     },
    name='reset_password'),

或者您可以在success_url中直接传递.as_view()

 url(r'^reset-password/$',
        PasswordResetView.as_view(template_name='accounts/reset_password.html',
         email_template_name = 'accounts/reset_password_email.html',
         success_url = reverse_lazy('accounts:reset_password_done'))  ,
         name='reset_password'),