替代会话变量来存储视图之间的数据?

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 以防有帮助。