替代会话变量来存储视图之间的数据?
Alternative to session variable to sore data between views?
编辑 2021 年 7 月 16 日
到目前为止没有回复所以我会尽量让我的问题更精确
因为当我调用 PasswordChangeView 时所有会话变量都被重置,我需要将会话变量内容存储在别处(?)并在密码更改后重新设置所有会话变量(在 form_valid() 函数的末尾。
希望这更清楚并且有人可以帮助我找到解决方案...
我已经使用 Ajax(JQuery 表单插件)覆盖了 Django PasswordChangeView,并且除了所有会话变量都被重置外,它仍然有效。
阅读 Django 文档,我知道这是“正常行为”,但我需要重新初始化一些会话数据;如果没有,它就没有真正的兴趣使用 Ajax...
更改密码
一开始,我认为调用 update_session_auth_hash 函数是导致该行为的原因,但它似乎不像 [=37 中那样是真的=] 函数,request.user 已设置但 request.session 数据已重置,甚至在保存 fom 之前...
所以我的问题是 WHEN/WHERE 当调用 PasswordChangeView 时,我可以检索要重新设置的会话变量吗?
class PasswordChangeView(auth_views.PasswordChangeView):
def form_valid(self, form):
print('request.user',self.request.user) # return connected user
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
self.object = form.save()
update_session_auth_hash(self.request, self.object) # prevent user’s auth session to be invalidated and user have to log in again
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
return JsonResponse ({'data': form.is_valid()},status = 200)
我找到了使用 cookie 的解决方案;这对很多人来说可能是显而易见的,但我 post 以防有帮助。
编辑 2021 年 7 月 16 日
到目前为止没有回复所以我会尽量让我的问题更精确
因为当我调用 PasswordChangeView 时所有会话变量都被重置,我需要将会话变量内容存储在别处(?)并在密码更改后重新设置所有会话变量(在 form_valid() 函数的末尾。
希望这更清楚并且有人可以帮助我找到解决方案...
我已经使用 Ajax(JQuery 表单插件)覆盖了 Django PasswordChangeView,并且除了所有会话变量都被重置外,它仍然有效。
阅读 Django 文档,我知道这是“正常行为”,但我需要重新初始化一些会话数据;如果没有,它就没有真正的兴趣使用 Ajax...
更改密码一开始,我认为调用 update_session_auth_hash 函数是导致该行为的原因,但它似乎不像 [=37 中那样是真的=] 函数,request.user 已设置但 request.session 数据已重置,甚至在保存 fom 之前...
所以我的问题是 WHEN/WHERE 当调用 PasswordChangeView 时,我可以检索要重新设置的会话变量吗?
class PasswordChangeView(auth_views.PasswordChangeView):
def form_valid(self, form):
print('request.user',self.request.user) # return connected user
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
self.object = form.save()
update_session_auth_hash(self.request, self.object) # prevent user’s auth session to be invalidated and user have to log in again
print('request.session.get("selected_database")',self.request.session.get("selected_database")) # return None
return JsonResponse ({'data': form.is_valid()},status = 200)
我找到了使用 cookie 的解决方案;这对很多人来说可能是显而易见的,但我 post 以防有帮助。