【问题标题】:Django : make a variable persistentDjango:使变量持久化
【发布时间】:2011-11-02 15:48:51
【问题描述】:

基本上我想在 Django 中创建一个变量持久化,但我不知道如何。

更准确地说,我希望用户在登录站点时选择一个特定的项目(例如通过 ChoiceField)。然后,只要他不选择其他项目,网站就会“知道”他选择了哪个项目,以便他可以执行与该项目相关的一些操作。

这怎么可能?会话变量是要走的路吗?或者也许是缓存系统?一些提示将不胜感激:)

如果我不够清楚,请告诉我

【问题讨论】:

    标签: django global-variables django-sessions django-cache persistent-data


    【解决方案1】:

    是的 - 您需要使用会话变量,因为这些变量会持续存在,但仅限于每个用户。缓存将为所有用户保留。

    查看:'How to use sessions' 来自 Django 文档。

    本质上,您只需在settings.py 中设置会话引擎:

    SESSION_ENGINE = 'django.contrib.sessions.backends.cookies'
    

    然后在视图中你可以这样做:

    request.session['project'] = 'Some Project'
    

    然后您可以在模板中使用:

    {{ request.session.project }}
    

    【讨论】:

    • 目前用户不需要登录网站,我的auth_users表还没有填写。是否需要知道用户才能使用会话变量?
    • 不,用户无需为此注册。他们只会获得一个 cookie 来识别他们。
    • 谢谢,这看起来很简单:)
    • 可能有点跑题了,但是我怎样才能在所有模板中显示一个表单(用于获取会话变量的表单)?
    • 将其放入基本模板中,并让所有其他模板扩展该模板。它被称为template inheritance
    【解决方案2】:

    只要会话存储启动,会话就很好,这意味着如果您需要此功能可靠,则必须使用数据库会话后端(或类似 Redis)。

    您还可以将ForeignKey(Project, on_delete=SET_NULL) 添加到user profile model 并使用它来存储当前项目。

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2010-09-16
      相关资源
      最近更新 更多