【问题标题】:django request that does not contains a key不包含密钥的 django 请求
【发布时间】: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?

标签: ajax django session key


【解决方案1】:

编辑:好的,昨天我在家里测试了我的代码,它运行得很好。在工作中它继续失败。经过长途跋涉和辛勤劳动,我找到了。当我在想“为什么它在家里有效而不是在工作中”时,它就倾斜了。我在家里使用 Linux,在工作窗口。 ........第一次谷歌搜索:这是我的耻辱:https://code.djangoproject.com/ticket/9084 基于文件的会话不会在 Windows 上存储任何数据

T_T 如何放松两天的开发

【讨论】:

    【解决方案2】:

    当您对会话进行更改时,您还需要在返回响应之前设置request.session.modified = True

    更多信息:

    【讨论】:

    • 但在我的设置中我设置了 SESSION_SAVE_EVERY_REQUEST = True
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2021-06-23
    • 2021-12-26
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多