首页 > 解决方案 > 在视图函数 django 中使用会话时未存储会话

问题描述

当我从视图调用登录功能时,我想将用户名值存储在浏览器会话中。我已经尝试了 request.session 语法,但它不起作用并且没有将用户名存储在我的会话中。我已经通过开发人员工具控制台确认了这一点。

查看功能

def login_submit(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        form = AppUserForm(request.POST)
        # form['my_field'].value()
        if AppUser.objects.filter(username=username, password=password).exists():

            request.session['username'] = username //I WANT TO SET THE SESSION HERE

            return HttpResponseRedirect('/')
        else:
            return login(request)

标签: djangopython-3.xsessiondjango-forms

解决方案


默认情况下, Django-Sessions存储在数据库中(如果未提供其他会话引擎)。从文档:

默认情况下,Django 将会话存储在您的数据库中(使用模型 django.contrib.sessions.models.Session)。它用于存储一个会话的数据。因此,如果您关闭窗口/选项卡,会话将过期。

所以如果要查看用户的会话数据,可以查询django.contrib.sessions.models.Session模型。

这是模型中存储数据的示例:

{
'_state': <django.db.models.base.ModelState object at 0x7f41e2908cf8>, 
'session_key': 'dmi7gfanckowzpikyihlt2a8696tuaka',
 'session_data': 'MDNkYTBlYzMxYTMyZWQ4YzMwZTk0ZY4EjTFmNjA5YWRjMTdiMTA1Nzp7Il9hdXRoX3VzZXJfaWQiOiIyIiwiX2F1dGhfdXNlcl9iYWNrZW5kIjoiZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmQiLCJfYXV0aF91c2VyX2hhc2giOiI3NmQ5Y2I3ZTliNGIzYWExNDc2NmM1OTUxZDBlOWNmZmIxNTUyOGEzIn0=',
 'expire_date': datetime.datetime(2020, 2, 10, 17, 20, 29, 768812,
 tzinfo=<UTC>)
}

我已经调用了instance.__dict__将数据作为字典获取。

您所指的会话存储是 JavaScript 的Window.sessionStorage. 您可以通过以下方式创建会话存储:(来自 Mozilla Docs 的片段)

// Save data to sessionStorage
sessionStorage.setItem('key', 'value');

// Get saved data from sessionStorage
let data = sessionStorage.getItem('key');

// Remove saved data from sessionStorage
sessionStorage.removeItem('key');

// Remove all saved data from sessionStorage
sessionStorage.clear();

sessionStorage上的 Mozilla 文档。


推荐阅读