【发布时间】:2018-01-28 10:50:37
【问题描述】:
我正在尝试从 Django 模板视图 django.contrib.auth.PasswordResetConfirmView 中恢复 GET 参数。
基本上,当用户点击他的密码重置链接(如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': request.GET.get('origin_page') 获取我的origin_page,但它不起作用,我得到了None 值。我什至使用调试器检查类/方法中的每个对象,但它们似乎都不包含我的 origin_page 变量。
有什么想法吗?
【问题讨论】:
-
不完全一样,我相应地修改了我的代码
-
另外,小心使用来自用户的不受信任的
origin_page。如果您查看 Django 管理应用程序,它会在重定向之前检查next值。 -
@Alasdair 抱歉,我编辑了我的帖子,我忘记更改了。事实上,我得到了一个
None值而不是一个键错误。所以我不应该在我的密码重置网址中添加origin_page参数吗?那为什么是最好的方法呢?我需要知道用户从哪个网页发送了他的密码重置。 -
如果你转到
http://127.0.0.1:8000/commons/reset/MQ/4t8-210d1909d621e8b4c68e/?origin_page=/mypage/,那么request.GET.get('origin_page')应该是'/mypage/'。很难进一步调试,因为代码应该可以工作。
标签: python django django-2.0