【问题标题】:Sessions not storing while using them in view function django在视图函数 django 中使用会话时未存储会话
【发布时间】:2020-05-13 14:24:13
【问题描述】:

当我从视图调用登录功能时,我想将用户名值存储在浏览器会话中。我已经尝试了 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)

【问题讨论】:

  • 你提到“开发者工具控制台”,是指浏览器中的“会话存储”选项吗?
  • 是的,我只是指那个

标签: django python-3.x session django-forms


【解决方案1】:

默认情况下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 的 sn-p)

// 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 文档。

【讨论】:

  • 但是如何在我的 django 视图函数中使用 javascript 会话存储
  • 通过getItem获取值并通过ajax传递给django,也可以将数据设置为cookie。
  • 请您帮助我通过 ajax 将 getItem 传递给 django 视图,可能需要一些代码
  • 这应该可以,首先设置sessionStorage.setItem('name', 'xyz'),然后设置$.ajax({'url': '', 'type': 'POST', 'data': {'name': sessionStorage.getItem('name')}}),这对我有用。确保也传递 csrf 令牌。
猜你喜欢
  • 2014-07-31
  • 2019-07-19
  • 2012-04-28
  • 2011-10-03
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2014-09-20
  • 2013-08-02
相关资源
最近更新 更多