如何在Django的后端会话中存储对象,就像Django存储User一样



我正在Django中创建一个Web应用程序。我已经从https://docs.djangoproject.com/en/dev/intro/以及文件的一部分

我有一个问题,如何在服务器端的请求之间存储额外的数据。Django对用户做得很酷,如下所示:

在视图中.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令牌关联,如下所示:

视图.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]传递,则没有帮助,因为您也可以编辑它们])

适当的方法是向请求添加字段,并生成类似前面提到的"登录"方法。。。但是怎么做呢?

谢谢!

您正在寻找的功能被称为"会话",Django直接支持它:

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

下面是该页面中的两个示例:

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

最新更新