2013-03-14 145 views
0

我想在我的网站中使用会话。我设置了follwing设置在settings.py文件:Django会话丢失数据(空)

'django.contrib.sessions', #in the installed apps 

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' 

'django.contrib.sessions.middleware.SessionMiddleware', # in the midlleware classes 

视图代码

def apartamente(request): 
    form = SearchFormApartamente() 
    execute_form_process = 0 
    if request.method == 'POST': 
     form = SearchFormApartamente(request.POST) 
     execute_form_process = 1 
     request.session['apartamente'] = form 
     request.session['vasea'] = True 
     request.session.set_expiry(300) 
     request.session.modified = True 
    elif 'apartamente' in request.session: 
     form = searchFormApartamente(request.session['apartamente']) 
     execute_form_process = 1 

# forms.py 
class SearchFormApartamente(forms.Form): 
    thewidget = ColumnCheckboxSelectMultiple() 
    category = forms.ModelMultipleChoiceField(
     queryset=Categorie_Oferta.objects.filter(id__in=[1,2,3,4]), 
     required=False) 
    sector = forms.ModelMultipleChoiceField(queryset=Sector.objects.all(), 
     widget=forms.widgets.CheckboxSelectMultiple, required=False) 
    min_price = forms.IntegerField(required=False, 
     widget=forms.widgets.Input(attrs={'class': 'rounded'})) 
    max_price = forms.DecimalField(required=False) 

,但问题是,我尝试在会话中以及何时存储表单我第二次进入视图并尝试从sessiom读取值,会话为空... 可能是什么问题? 在此先感谢!

+0

能否请您发表您的看法码? – Brandon 2013-03-14 21:27:52

+0

为了获得会话,您必须将'get'放在'request.session.get('apartamente')'不是'request.session ['apartamente']'因为这种格式用于存储。总体来说@Brandon的回答是正确的。 – catherine 2013-03-15 11:10:30

回答

0

我会重新写视图代码,如下所示,假设apartamente是窗体上的一个字段。

# I know it doesn't affect scoping, but I don't like having the view name 
# the same as a model or anything else for sanity 

def apartamente_view(request): 
    apartamente = request.session.get('apartamente', None) 
    form = SearchFormApartamente(request.POST or None, 
     initial={'apartamente': apartamente}) 

    execute_form_process = 0 
    if request.method == 'POST': 
     if form.is_valid(): 
      execute_form_process = 1 
      request.session['apartamente'] = form.cleaned_data['apartamente'] 
      request.session['vasea'] = True 
      request.session.set_expiry(300) 

      # do you really need this? 
      request.session.modified = True 
      ... 
+0

我用 “request.session.modified” =真只是试图迫使救......但我也就是事情是没有必要存在... – Sergiu 2013-03-15 11:55:52

+0

好吧,有什么错误? – Brandon 2013-03-15 13:54:01

+0

此代码引发错误:实际上,第二行(表格= ...):_init __()获得了关键字参数'data'的多个值。 – Sergiu 2013-03-15 14:09:26