从PasswordResetConfirmView恢复GET参数

时间:2018-01-28 10:50:37

标签: python django web django-2.0

我正在尝试从django模板视图GET恢复django.contrib.auth.PasswordResetConfirmView参数。 基本上当用户点击他的密码重置链接(如http://127.0.0.1:8000/commons/reset/MQ/4t8-210d1909d621e8b4c68e/?origin_page=/mypage/)时,我希望能够检索origin_page=/mypage/参数。到目前为止,我的url.py看起来像这样:

from django.urls import path
from . import views

app_name = 'commons'
urlpatterns = [
    path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
]

我的views.py喜欢这样:

from django.contrib.auth import views as auth_views

class PasswordResetConfirmView(auth_views.PasswordResetConfirmView):
    template_name = 'commons/password_reset_confirm.html'
    success_url = '/commons/reset/done/'

    def get(self, request, *args, **kwargs):
        self.extra_context = {
            'origin_page': request.GET.get('origin_page')
        }
        return super().get(request, *args, **kwargs)

正如您所看到的那样,我正试图通过origin_page获取'origin_page': request.GET.get('origin_page'),但它不起作用,我得到None值。我甚至使用调试器来检查类/方法中的每个对象,但它们似乎都不包含我的origin_page变量。 任何的想法?感谢

1 个答案:

答案 0 :(得分:0)

PasswordResetConfirmView进行内部重定向,该重定向将从URL中删除令牌。因此,您随电子邮件传递的任何查询参数也会被删除。执行此操作的代码行在dispatch的{​​{1}}函数中,该函数将路径替换为常量: https://github.com/django/django/blob/master/django/contrib/auth/views.py#L280

PasswordResetConfirmView

因此,您有一个正确的想法,即您需要对redirect_url = self.request.path.replace(token, self.reset_url_token) 进行子类化,但是我相信您需要更改PasswordResetConfirmView函数,该函数与以前基本相同,只是添加回原始查询参数到dispatch

redirect_url