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中使用enumerate函数遍历元素实例
Jun 16 Python
Python计算程序运行时间的方法
Dec 13 Python
python导入时小括号大作用
Jan 10 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
python求质数的3种方法
Sep 28 Python
python调用java的jar包方法
Dec 15 Python
Python函数中不定长参数的写法
Feb 13 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
python爬虫---requests库的用法详解
Sep 28 Python
python实现控制台输出颜色
Mar 02 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
php微信公众号开发模式详解
2016/11/28 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
机电系毕业生求职信
2014/07/11 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
黄山导游词
2015/01/31 职场文书
管理失职检讨书范文
2015/05/05 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
中学校园广播稿
2015/08/18 职场文书
幼儿园家长心得体会
2016/01/21 职场文书