【发布时间】:2012-02-09 18:03:43
【问题描述】:
首先我要感谢您观看我的帖子! 我已经为一个企业项目使用了 django 两个月。我是网络开发和 django 开发中的一种法国菜鸟:D
这是我的问题:在视图中我在 request.session 中设置了一个键,但是在 render_to_response 和 ajax 查询之后,这个键就消失了:(
这是我设置密钥的功能
def check(request):
if request.method == 'POST':
RequestContext(request)
try:
m = MsGnlMember.objects.get(mbr_nom=request.POST['username'])
except (ObjectDoesNotExist):
return render_to_response('login.html', {'BAD': True, 'username' : 'Unknown User'})
if m.mbr_mdp == request.POST['mdp']:
Here ===> request.session['MBR_INSTANCE'] = m
return index(request)
def index(request):
username = request.session["MBR_INSTANCE"].mbr_nom
request.session.modified = True # does not fix my problem
getNote = GetNoteForm()
saveNote = SaveNoteForm()
search = SearchForm()
return render_to_response('index.html', {'FORM_GETNOTE' : getNote,
'FORM_SAVENOTE' : saveNote,
'FORM_SEARCH' : search,
'USERNAME' : username},
context_instance=RequestContext(request))
这段代码运行良好(用户名在 index.html 上根据查询结果进行更改)但是当我在页面 index.html 上时,我会启动一个 ajax 查询,如下所示:
def arbo_get_acts(request):
if request.method == 'POST' and request.is_ajax():
if "MBR_INSTANCE" in request.session:
acts = MsWriAct.objects.filter(act_mbr=request.session['MBR_INSTANCE'])
acts_serialised = serializers.serialize('json', acts)
return HttpResponse(acts_serialised, 'application/json')
else:
acts_serialised = {}
return HttpResponse(acts_serialised, 'application/json')
我从不输入我的 if 语句 :'( snif snif 所以请解释一下我做错了什么或我不明白的地方
编辑:好的,昨天我在家里测试了我的代码,它运行得很好。在工作中它继续失败。经过长途跋涉和辛勤劳动,我找到了。当我这么想的时候它就倾斜了 “为什么它在家里有效而不是在工作中”。我在家里使用 Linux,在工作窗口。 ........... 第一次谷歌搜索: 这是我的耻辱:https://code.djangoproject.com/ticket/9084 基于文件的会话不会在 Windows 上存储任何数据
T_T 如何放松两天的开发
【问题讨论】:
-
检查是否进入了arbo_get_acts函数。它是 ajax,所以你不能直接看到服务器响应 - 在 Firebug 中检查它。可能是一些 CSRF 验证问题。
-
thanx 在这里回答我是输出: POST localhost:8000/index/arbo_get_acts 200 OK 175ms jquery....min.js (ligne 18) En-têtesPost Réponse Content-Length 0 Content-Type application/json日期 2012 年 1 月 13 日星期五 14:59:54 GMT 服务器 WSGIServer/0.1 Python/2.7.2 Set-Cookie sessionid=c531a3b804eb2c4d6bf591e826ac387d;过期=格林威治标准时间 2012 年 1 月 27 日星期五 14:59:54;最大年龄=1209600; Path=/ 改变 Cookie
-
嗯! HttpResponse 应该返回任何内容不是吗?可能是
request.is_ajax()返回 False?放一些打印来调试请求和 request.session 可能是。我从未在 django 中直接使用过 session - 所以如果是这种情况,我将无法为您提供帮助。 -
好吧,我对我的代码做了一些研究。像您那样设置和获取会话对象对我有用。即使在 AJAX POST 中。我必须添加这个:docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 以通过 CSRF 验证 - 但没有它,服务器返回 403,而不是像你的情况那样返回 200。
-
我正在使用这个 ajax 文档代码。我认为 request.is_ajax 没有问题,因为在使用 session 之前,我只是在这个视图中做了一个 MsWriAct.objects.all() 并且它工作得很好,但是现在我需要 session 来处理失败的具体查询。好吧,我现在不在工作,我会尝试在家里做同样的事情,看看是否有效。你说你从来没有直接在 django 中使用 session 只是为了了解你如何在 django 中使用 session?