【问题标题】:In Django, what would be the proper way to persist session information?在 Django 中,保存会话信息的正确方法是什么?
【发布时间】: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 只使用现有会话。可能是您的会话即将到期,这就是您没有收到任何内容的原因。

标签: django session


【解决方案1】:

我认为中间件会帮助你。

会话框架允许您基于每个站点访问者存储和检索任意数据。

https://docs.djangoproject.com/en/2.2/topics/http/sessions/

【讨论】:

  • 我启用了中间件,否则我什至无法使用 request.session。我的问题是我应该如何在不同视图之间实际使用这些会话值?我设置了 request.session 值,但是每次调用新视图时,请求对象都是全新的,没有从以前的调用中保存任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2013-06-27
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多