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 相关文章推荐
Python OpenCV实现图片上输出中文
Jan 22 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
Python类装饰器实现方法详解
Dec 21 Python
Python面向对象之类和实例用法分析
Jun 08 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
Python range与enumerate函数区别解析
Feb 28 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
python实现猜拳游戏项目
Nov 30 Python
python实现批量提取指定文件夹下同类型文件
Apr 05 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 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生成局部唯一识别码LUID的代码
2012/10/06 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
vue-router单页面路由
2017/06/17 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
numpy.where() 用法详解
2019/05/27 Python
将python安装信息加入注册表的示例
2019/11/20 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
应聘教师推荐信
2013/10/31 职场文书
颁奖晚会主持词
2014/03/25 职场文书
村级换届选举方案
2014/05/10 职场文书
个人授权委托书格式
2014/08/30 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书