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异步回调机制实现和使用方法
Nov 26 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
开源Web应用框架Django图文教程
Mar 09 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Django开发的简易留言板案例详解
Dec 04 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python版中国省市经纬度
Feb 11 Python
Python API 操作Hadoop hdfs详解
Jun 06 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
信用卡效验程序
2006/10/09 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
实用函数2
2007/11/08 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
如何在PHP中生成随机数
2020/06/04 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
python绘图模块之利用turtle画图
2021/02/12 Python
酒吧总经理岗位职责
2013/12/10 职场文书
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
会计工作决心书
2014/03/11 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
招商引资工作汇报
2014/10/28 职场文书
2014年小学工作总结
2014/11/26 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书