小编Jac*_*ski的帖子

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

我正在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)
Run Code Online (Sandbox Code Playgroud)

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

在views.py中

@login_required
def myappformmethod(request):
    user = request.user
    msg = 'hello '+user.username
Run Code Online (Sandbox Code Playgroud)

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

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

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

if request.favourite_color:
    color = request.favourite_color
Run Code Online (Sandbox Code Playgroud)

而不是使用

if request.POST.get('favourite_color'):
    request.POST.get('favourite_color')
Run Code Online (Sandbox Code Playgroud)

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

aproriate方法将添加字段来请求和生成像前面提到的"登录"方法...但如何做到这一点?

谢谢!

python django django-views

5
推荐指数
1
解决办法
9713
查看次数

标签 统计

django ×1

django-views ×1

python ×1