【问题标题】:How to store objects in back-end sessions in Django just like Django stores User如何在 Django 的后端会话中存储对象,就像 Django 存储用户一样
【发布时间】:2012-08-28 17:28:27
【问题描述】:

我正在 Django 中创建一个 webapp。我已经浏览了来自https://docs.djangoproject.com/en/dev/intro/ 的 Django 教程和部分文档

我有一个问题,如何在服务器端的请求之间存储附加数据。 Django 对用户真的很酷:

在views.py中:

def login_user(request):
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)

现在在另一个函数中,您可以使用存储在后端的信息,这些信息通过 csrf 令牌关联,如下所示:

在views.py中

@login_required
def myappformmethod(request):
    user = request.user
    msg = 'hello '+user.username

生成的 html 文件不包含有关已登录用户的任何直接信息,但它将 csrf 令牌保留为表单字段:

<form name="myform" action="/myapp/myappformmethod" method="post" onsubmit="prepare()">
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='NwKW2lFWSkkNEasdd3ExHe1l5ltzQi' /></div>

我想存储一些与会话相关的数据(例如喜欢的颜色),这些数据在 html 中不可见,但将存储在服务器端,并且可以使用以下方式访问:

if request.favourite_color:
    color = request.favourite_color

不使用

if request.POST.get('favourite_color'):
    request.POST.get('favourite_color')

这很容易受到手动表单元素操作的影响(如果使用表单字段 [type:hidden 没有帮助,因为您也可以编辑它们])

适当的方法是在请求中添加字段并产生类似于前面提到的“登录”方法的东西......但是怎么做呢?

谢谢!

【问题讨论】:

  • POST 数据和会话数据不同。 POST 数据在 POST 请求中发送到服务器,主要是通过表单。会话数据存储在服务器端,通常由客户端的 cookie 标识,用于在请求之间存储数据,因为 html 请求是无状态的。

标签: python django django-views


【解决方案1】:

您正在寻找的功能称为“会话”,由 Django 直接支持:

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

...这里有两个来自该页面的示例:

request.session['fav_color'] = 'blue'

fav_color = request.session['fav_color']

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 2011-06-26
    • 2017-05-24
    • 2021-05-22
    • 2012-05-18
    • 2012-12-15
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多