我正在尝试从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
变量。
任何的想法?感谢
答案 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