在Django单元测试中获取/设置会话密钥

时间:2017-01-17 08:08:45

标签: django unit-testing session-keys

我将session_key保存到对象以将数据与匿名用户关联。在单元测试中,我尝试使用测试客户端设置固定密钥,但密钥在POST请求期间发生变化。一个例子:

// tests.py

def test_post(self):
    session_key = "123"
    session = self.client.session
    session['session_key'] = session_key
    session.save()

    response = self.client.post('/post-url/')
    self.assertEquals(response.content, session_key)
    # AssertionError: b'str60i3gjpvru8f7mellsdf2y3xd2jgh' != '123'


// views.py

@require_http_methods(['POST'])
def ajax_post(request):
    return HttpResponse(request.session.session_key)

根据此comment,我尝试在更改session_key之前添加另一个GET响应response = self.client.get('/'),但它似乎没有帮助。

我做错了什么?

编辑:我使用的是Django 1.9.6,Python 3.4。在Daniel Roseman的回答之后改变了问题标题。

1 个答案:

答案 0 :(得分:1)

我不太确定你在这里做了什么。 session['session_key']session.session_key不同;前者只是会议中的另一个价值。

但是没有理由用会话密钥做任何明确的事情。它应该是一个纯粹不透明的值,您的代码永远不会与之交互。如果要将数据与匿名用户的会话相关联,则应该将数据存储在会话中,而不是相反。