假设我有如下两种视图:
def get_session_key(request):
return JsonResponse({'session_key': request.session.session_key})
def test(request):
import requests
r = requests.get('http://127.0.0.1:8000/get_session_key')
return HttpResponse(r)
为什么要自己调用get_session_key
返回有效的响应-包含会话密钥-而从test
到requests
调用此函数将返回{"session_key": null}
?
是否可以使用requests
调用此视图并仍然获得有效的会话密钥?
答案 0 :(得分:1)
为什么要自己调用
get_session_key
返回一个有效的响应-包含会话密钥-而通过测试从请求中调用此函数将返回{"session_key": null}
?
会话ID存储在cookie中,如documentation on How to use Cookies中所述:
Django为匿名会话提供全面支持。会话框架使您可以基于每个站点访问者存储和检索任意数据。它在服务器端存储数据,并抽象化cookie的发送和接收。 Cookie包含会话ID -并非数据本身(除非您使用的是基于Cookie的后端)。
现在,如果您使用requests
库进行呼叫,那么您当然不会不将这些cookie传递给系统,因此您在没有cookie的情况下进行了通话,因此没有会话标识符。
但是,在发出GET请求时,您可以使用request.COOKIES
[Django-doc]获取cookie,例如:
def test(request):
import requests
r = requests.get(
'http://127.0.0.1:8000/get_session_key',
cookies=request.COOKIES
)
return HttpResponse(r.content)
由于会话ID位于cookie中,因此对于这种情况,发出GET请求没有多大意义。