Django mtv,django.po

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: