在基于 class 的视图的 form_valid() 中设置时 Django 会话变量丢失
Django session variables lost when set in form_valid() of class-based views
使用 Django,如果我在 django.views.generic.edit.FormView class 的 post() 方法中设置会话变量,则该变量可用于未来的请求。
例如
def post(self, request, *args, **kwargs):
"""
Store useful data in session variable for future requests
"""
if 'useful_data' in request.POST:
request.session['useful_data'] = useful_data
return HttpResponseRedirect(self.get_success_url())
但是,如果我尝试通过 django.views.generic.edit.FormView class 的 form_valid() 方法设置会话变量,我对变量所做的更改似乎在下一个请求。
例如
def form_valid(self, form):
"""
Store useful data in session variable for future requests
"""
# Useful data that I only want to update if the form was validated
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
return HttpResponseRedirect(self.get_success_url())
那么,如何从 django.views.generic.edit.FormView class 的 form_valid() 方法对会话变量进行持久更改?
我怀疑问题可能出在更新部分:
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
如果我们看一下 documentation,问题可能是 django 不知道会话已被修改,因此不会更改它。
要验证这一点,请明确表示会话已被修改:
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
self.request.session.modified = True
或者不使用 update()
直接赋值,就像 documentation:
self.request.session['useful_data'] = form.cleaned_data['useful_data']
希望对您有所帮助!
使用 Django,如果我在 django.views.generic.edit.FormView class 的 post() 方法中设置会话变量,则该变量可用于未来的请求。
例如
def post(self, request, *args, **kwargs):
"""
Store useful data in session variable for future requests
"""
if 'useful_data' in request.POST:
request.session['useful_data'] = useful_data
return HttpResponseRedirect(self.get_success_url())
但是,如果我尝试通过 django.views.generic.edit.FormView class 的 form_valid() 方法设置会话变量,我对变量所做的更改似乎在下一个请求。
例如
def form_valid(self, form):
"""
Store useful data in session variable for future requests
"""
# Useful data that I only want to update if the form was validated
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
return HttpResponseRedirect(self.get_success_url())
那么,如何从 django.views.generic.edit.FormView class 的 form_valid() 方法对会话变量进行持久更改?
我怀疑问题可能出在更新部分:
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
如果我们看一下 documentation,问题可能是 django 不知道会话已被修改,因此不会更改它。
要验证这一点,请明确表示会话已被修改:
self.request.session['useful_data'].update(form.cleaned_data['useful_data'])
self.request.session.modified = True
或者不使用 update()
直接赋值,就像 documentation:
self.request.session['useful_data'] = form.cleaned_data['useful_data']
希望对您有所帮助!