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之Import 模块
Oct 13 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
遗传算法python版
Mar 19 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python内置函数locals和globals对比
Apr 28 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
python UIAutomator2使用超详细教程
Feb 19 Python
如何正确理解python装饰器
Jun 15 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与XML联手进行网站编程代码实例
2008/07/10 PHP
学习php分页代码实例
2013/10/24 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
深入Python函数编程的一些特性
2015/04/13 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
Python入门必须知道的11个知识点
2018/03/21 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Python中extend和append的区别讲解
2019/01/24 Python
python实现矩阵打印
2019/03/02 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
基于python3实现倒叙字符串
2020/02/18 Python
python3 使用traceback定位异常实例
2020/03/09 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
技术负责人任命书
2014/06/05 职场文书
小学教研工作总结2015
2015/05/13 职场文书
区域销售大会开幕词
2016/03/04 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL