在 Django 单元测试中获取/设置 session 键
Getting / Setting session key in Django Unit Tests
我正在将 session_key
保存到 object 以将数据关联到匿名用户。在单元测试中,我尝试使用测试客户端设置一个固定密钥,但密钥在 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 的回答后更改了问题标题。
我不太确定你在这里做什么。 session['session_key']
与 session.session_key
不同;前者只是会话中的另一个值。
但是没有理由对会话密钥做任何明确的事情。它应该是一个纯粹不透明的值,您的代码永远不会与之交互。如果您想将数据与匿名用户的会话相关联,您应该将数据存储在会话中,而不是相反。
我正在将 session_key
保存到 object 以将数据关联到匿名用户。在单元测试中,我尝试使用测试客户端设置一个固定密钥,但密钥在 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 的回答后更改了问题标题。
我不太确定你在这里做什么。 session['session_key']
与 session.session_key
不同;前者只是会话中的另一个值。
但是没有理由对会话密钥做任何明确的事情。它应该是一个纯粹不透明的值,您的代码永远不会与之交互。如果您想将数据与匿名用户的会话相关联,您应该将数据存储在会话中,而不是相反。