Sap*_*Sun 5 django ajax django-sessions
我已经工作了几个小时试图理解以下问题:我有一个用户发送Ajax请求动态发送一个表单并记录提交时读取的表单数量增加.为此,我使用request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey }以便将它们与数据库关联以进行保存和加载(-1表示尚未保存的新表单).
但是,当我使用以下代码(见下)时,我得到以下奇怪的输出:
第一次点击:
{} foousername
next_key 1
1
{u'1-foo': -1}
Run Code Online (Sandbox Code Playgroud)
第二次点击:
{} foousername
next_key 1
1
{u'1-foo': -1}
Run Code Online (Sandbox Code Playgroud)
第三次请求:
{} foousername
next_key 1
1
{u'1-foo': -1}
Run Code Online (Sandbox Code Playgroud)
到底他妈发生了什么?
id_fetcher = re.compile(r'\d')
@login_required
def ajax_add_foo(request):
def id_from_prefix(key):
return int( id_fetcher.search(key).group(0) )
if 'editing_foos' not in request.session:
print "reinitializing"
request.session['editing_foos'] = {}
print request.session['editing_foos'], request.user
keys = request.session['editing_foos'].keys()
if len(keys) == 0:
next_key = 1
else:
print [ id_from_prefix(key) for key in keys ]
next_key = max([ id_from_prefix(key) for key in keys ]) + 1
print "next_key", next_key
fooform = FooForm(prefix=next_key)
print next_key
request.session['editing_foos'].update( {create_prefix(FooForm, next_key) : -1 } ) # This quote is new and has no pkey
print request.session['editing_foos']
return render_to_response( 'bar/foo_fragment.html',
{'fooform' : fooform, },
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
非常感谢你们!
注意:这是有关相同源代码的上一个问题的后续内容.
Jia*_*aro 12
我不认为我完全理解这个问题,但你可能想看看你正在使用哪个会话引擎
如果您正在使用缓存会话引擎,则需要确保正确设置缓存(例如,虚拟缓存只会丢弃您的会话数据)
另一种可能性是你的会话没有被保存,因为你没有改变会话,你正在改变存储在会话中的可变对象.您可以尝试通过在视图中的某处添加此方法来强制保存会话:
request.session.modified = True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3536 次 |
| 最近记录: |