django session完成状态保持的方法


Posted in Python onNovember 27, 2018

本例使用登录页面演示,session的状态保持功能。

说明:因为http是无状态的,客户端请求一次页面后,就结束了,当再次访问时,服务器端并不知道浏览器此访问过什么。所以这样就需要状态保持功能,状态保存有两种方式:session和cookie都能实现状态保持。

状态保持

  • http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
  • 客户端与服务器端的一次通信,就是一次会话
  • 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
  • 存储方式包括cookie、session,会话一般指session对象
  • 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
  • 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
  • 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
  • 注意:不同的请求者之间不会共享这个数据,与请求者一一对应

启动web服务:

cd py3/django-test1/test3
python manage.py runserver 192.168.255.70:8000

修改数据库类型:

vim test3/settings.py

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test2',
    'USER':'root',
    'PASSWORD':'root',
    'HOST':'192.168.255.70',
    'PORT':'3306',
  }
}

如果该数据库test2此前没有创建过表,需要进行2步迁移:

第一步:生成迁移:

python manage.py makemigrations

第二步:执行迁移:

python manage.py migrate

本次使用的test2表,此前进行过迁移了,因此这2步迁移省略了。

编辑视图函数:

cd py3/django-test1/test3
vim booktest/views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect

def session1(request):
#  uname = request.session['myname'] 
  uname = request.session.get('myname','no login')
  context = {"username":uname}
  return render(request,'booktest/session1.html',context)
def session2(request):
  return render(request,'booktest/session2.html')
def session2_handle(request):
  uname = request.POST['uname']
  request.session['myname'] = uname
  #关闭浏览器session就过期
    #request.session.set_expiry(0)
  return redirect('/booktest/session1/')
def session3(request):
  del request.session['myname']
  return redirect('/booktest/session1/')

编辑应用url路由:

vim booktest/urls.py


from django.conf.urls import url
from . import views
urlpatterns = [
  url(r'^session1/$',views.session1),
  url(r'^session2/$',views.session2),
  url(r'^session2_handle/$',views.session2_handle),
  url(r'^session3/$',views.session3),
]

编辑html模板文件:

session1.html文件:

vim templates/booktest/session1.html

<!DOCTYPE html>
<html>
<head>
  <title>登录</title>
</head>
<body>
您好:{{ username }}

<br>
<a href="/booktest/session2/" rel="external nofollow" >login</a>
</br>
<a href="/booktest/session3/" rel="external nofollow" >exit</a>
</body>
</html>

session2.html文件:

vim templates/booktest/session2.html

<!DOCTYPE html>
<html>
<head>
  <title>登录</title>
</head>
<body>
<form method="post" action="/booktest/session2_handle/">
  <input type="text" name="uname">
  <input type="submit" name="login">
</form>
</body>
</html>

浏览器访问:http://192.168.255.70:8000/booktest/session1/

django session完成状态保持的方法

点击login,填写登录信息,url变为192.168.255.70:8000/booktest/session2:

django session完成状态保持的方法

点击提交,显示登录的用户名(此处省略了,从数据库查询是否有该用户):

django session完成状态保持的方法

点击exit,退出登录,回到初始界面,url地址变为192.168.255.70:8000/booktest/session1:

django session完成状态保持的方法

完成简单的session保持功能,后续再添加判断从数据库中查询是否存在用户,且密码是否正确,再显示登录成功。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3中的真除和Floor除法用法分析
Mar 16 Python
python二分查找算法的递归实现方法
May 12 Python
Python算术运算符实例详解
May 31 Python
简单谈谈python中的语句和语法
Aug 10 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
python如何实现视频转代码视频
Jun 17 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
python实现超市商品销售管理系统
Nov 22 Python
详解python 中in 的 用法
Dec 12 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python3判断IP地址的方法
Mar 04 Python
Python3实现腾讯云OCR识别
Nov 27 #Python
python利用百度AI实现文字识别功能
Nov 27 #Python
python如何实现一个刷网页小程序
Nov 27 #Python
python实现简单的文字识别
Nov 27 #Python
python中类的属性和方法介绍
Nov 27 #Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 #Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 #Python
You might like
php 魔术函数使用说明
2010/02/21 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
js实现时钟定时器
2020/03/26 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
关于uniApp editor微信滑动问题
2021/01/15 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
Python实现EM算法实例代码
2020/10/04 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
美国温暖商店:The Warming Store
2018/12/15 全球购物
给老婆的搞笑检讨书
2014/01/12 职场文书
《雪儿》教学反思
2014/04/17 职场文书
妇女干部培训方案
2014/05/12 职场文书
2014年科研工作总结
2014/12/03 职场文书
给领导的感谢信范文
2015/01/23 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python