在Django应用程序中保留用户选择的数据

时间:2014-09-14 18:13:31

标签: python django

我正在使用Django应用程序,用户可以拥有多个帐户。应用中的所有功能都应与当前选定的帐户相关联。例如,如果用户想要修改帐户的偏好设置,当他们点击偏好设置时,应用应该提取他们正在使用的帐户的偏好设置。

最初,我尝试使用会话来设置当前帐户,但无法让它工作。经过进一步阅读,这似乎是一个糟糕的选择。我现在正在做的是将account_id(aid)作为URL变量传递给每个视图,并将其传递给模板。

urls.py

    url(r"^(?P<aid>\d+)/categories/$", views.manage_categories),
    url(r"^(?P<aid>\d+)/preferences/$", views.manage_preferences),
    url(r"^(?P<aid>\d+)/transactions/$", views.manage_transactions),
    url(r"^(?P<aid>\d+)/transactions/(?P<pk>\d+)/$", views.edit_transaction),

views.py

    def manage_categories(request, aid=None):
        ...

    def edit_transaction(request, aid=None, pk=None):
        ...

因此,当他们浏览应用时,所选帐户可用于每个视图以用于过滤数据库结果。似乎可以有更好的方法来管理它,因为它需要将帐户ID传递给每个视图,并将其传递给每个模板。我喜欢使用会话来管理它的想法,但不清楚如何使这项工作。在URL中使用帐户ID的解决方案是否是一种合理的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

这可以使用用户会话轻松解决。已经内置了一个,请参阅Django's sessions framework

使用数据库后端的Django默认会话的第一步:

  1. django.contrib.sessions.middleware.SessionMiddleware

  2. 中将MIDDLEWARE_CLASSES添加到settings.py
  3. django.contrib.sessions

  4. 中将INSTALLED_APPS添加到settings.py
  5. 运行manage.py migrate以创建存储会话数据的数据库表

  6. 现在,您可以在视图中使用会话。 From the docs

      

    当SessionMiddleware被激活时,每个HttpRequest对象 - 任何Django视图函数的第一个参数 - 将具有一个session属性,这是一个类似字典的对象。

         

    您可以在视图中的任何位置阅读并写入request.session。您可以多次编辑它。

    我会使用视图选择一个帐户并将其保存到用户的会话中:

    request.session['account'] = aid
    

    之后你可以这样读取这个值:

    request.session.get('account', None)
    
相关问题