Django mtv,django.po
学习笔记仅供参考,有错必究。
文章目录cookies和会话会话Django基本操作会话启用会话会话的示例
Cookies和会话
会议
Session就是会话的意思,可以在服务器上开辟一块空间,保留浏览器与服务器交互时的重要数据(重要数据必须存储在服务器上)。每个客户端可以在服务器端有一个独立的会话;
Http协议是无状态的,即每一个请求都是一个新的请求,服务器不会记住之前通信的状态。客户端和服务器之间的通信是一个新的会话,保持状态的方法是将与会话相关的数据存储在客户端或服务器上。
我们推荐使用sesison方法来存储服务器端的所有数据和session _ id在客户端cookie中;
需要注意的是,不同的请求者不会共享数据,请求者和响应者之间是一一对应的。
Django启用会话
我们打开settings.py文件,添加到INSTALLED_APPS列表中(如果已经存在,就不要再添加了):
INSTALLED_APPS=[
#启用会话应用程序
django.contrib.sessions ,
]添加到MIDDLEWARE_CLASSES列表中(如果已经存在,不要再添加):
中间件=[
#启用会话中间层
django . contrib . sessions . middleware . session middleware ,
]
会话的基本操作
Session对象是一个类似字典的sessionStore对象,可以用类似字典的方式操作。会话只能存储可序列化的数据,如字典和列表。
将session的值保存到服务器请求。session[KEY]=VALUE
#VALUE是Python中的底层数据类型。
获取会话值=request.session[KEY]的值
#或者
VALUE=request.session.get(KEY ,默认值)
删除session del request . session[ KEY ]的值
settings.py SESSION_COOKIE_AGE中的会话设置
#函数:指定在cookies中保存session_id的持续时间。
#例如:SESSION_COOKIE_AGE=60*30
会话到期时间浏览器关闭=真
#如果为True,则只要浏览器关闭,会话就无效。
注意使用会话时,需要迁移数据库,否则会出现错误。这是因为session看起来像一个字典,但实际上,session需要将其内容序列化到数据库中。
python manage.py进行迁移
python manage.py迁移
会话示例
我们向主视图模块views.py添加了两个视图函数:
定义测试会话(请求):
#为会话添加对应于mykey的值
Request.session[mykey]=[山羊,黑山羊]
返回HttpResponse(“设置成功”)
def show_session(请求):
#取出sesssion中mykey对应的数据。
value=request . session . get( mykey , mykey没有对应的值)
s=字符串(值)
在主urls.py文件中返回HttpResponse,添加两条路由:
从django.urls导入re_path
来自django.contrib导入管理
从django.conf.urls导入包括
从。导入视图
urlpatterns=[
re_path(r^admin/,管理网站网址),
re_path(r^show_session/,views.show_session),
re_path(r^test_session/,views.test_session),
]
向3358127 . 0 . 0 . 1:8000/test _ session/:
再次请求http://127 . 0 . 0 . 1:8000/show _ session/:
当我们关闭浏览器,访问http://127 . 0 . 0 . 1:8000/show _ session/,发现我们的会话仍然存在。这是因为会话保存在服务器端,而不是浏览器端。
我们打开浏览器的开发者工具DevTool,在Application下输入Cookies。我们可以看到列表中有一个sessionid:
当我们使用自定义视图函数test_session创建会话时,浏览器会自动创建一个不重复的sessionid,客户端会用这个sessionid在服务器端找到对应的会话。
现在,我们删除这个sessionid,刷新http://127 . 0 . 0 . 1:8000/show _ session/,可以发现会话找不到了:
这是因为,在我们删除sessionid之后,服务器不知道我们需要哪个会话。
现在,我们向http://127 . 0 . 0 . 1:8000/test _ session/,创建另一个会话,并向http://127 . 0 . 0 . 1:8000/show _ session/:
修改视图函数test_session以删除服务器端会话:
定义测试会话(请求):
del request.session[mykey]
Return HttpResponse(成功设置)向http://127 . 0 . 0 . 1:8000/test _ session/,删除服务器端的会话,查看http://127 . 0 . 0 . 1:8000/show _ session/:
嗯,会话被删除了!
但是,需要注意的是,虽然我们的会话在服务器端已经被删除,但是我们的浏览器仍然保留sessionid:
这有点像,我们的银行账户被冻结了,但我们还保留着这个卡号的银行卡。
转载请联系作者获得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。