django - 在视图函数 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)
解决方案
默认情况下, 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 文档。
推荐阅读
- powershell - 在 TCL 代码中 - 如何读取 Windows 文本文件?
- haskell - Haskell:将字符串解析为自定义类型
- javascript - 如何从 JS 移植到 REACT
- ios - BLE 总是从 CBPeripheral 设备获取“状态 = 连接”
- sql-server - T-SQL MERGE:每个 GROUP BY 表达式必须至少包含一个不是外部引用的列
- flutter - Flutter 的 Jaguar 客户端
- python-3.x - 如何在自定义 keras 层上使用自定义激活
- api - 方法文件返回方法 Illuminate\Http\Response::file 不存在
- python - 要绘制的点不按顺序
- c - 原始类型声明如何在 C 中工作?