【发布时间】:2019-06-13 18:19:56
【问题描述】:
我正在 django 中设计一个 REST 应用程序,我打算让人们在没有浏览器的情况下使用它(只需使用 curl 或诸如此类的直接 API 调用)。我有几个不同的视图,我想根据之前对其他视图的调用获得的值来提取有关会话的信息。似乎每次调用视图时传入的“请求”对象都是一个全新的会话,所以我想知道如何以“正确”的方式保持值?
示例代码:
def login(request):
...
##I want to assign a token value to this session that is persisted to the entity requesting it
request.session['token'] = response.json()['auth']
...
def grabSomeValues(request):
...
##I want to grab the session token value in here but of course the request object in the case is a completely new one that does not have that token value it seems
print(request.session['token']
....
【问题讨论】:
-
即使是新请求,您也可以在另一个视图中访问分配给会话变量的值:token。同样在
login(request)视图中,您是否通过在分配后打印会话变量来检查。 -
是的,我可以在登录分配后获取值,实际上我已经通过将 request.session['token'] 值返回给用户来调试它(我不想要将来执行此操作,并尽可能将其隐藏在服务器端)。但是,每当我从同一个客户端调用 grabSomeValues 端点时,请求对象都不会保留之前设置的任何值。
-
这不应该发生,您也会在
grabSomeValues(request)函数中获得会话变量值。您没有得到意味着您的代码可能存在问题。request.session只使用现有会话。可能是您的会话即将到期,这就是您没有收到任何内容的原因。