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批量修改文件名的实现代码
Sep 01 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
django query模块
Apr 20 Python
基于Python打造账号共享浏览器功能
May 30 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
Python函数参数类型及排序原理总结
Dec 19 Python
django 实现简单的插入视频
Apr 07 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 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
深入了解php4(2)--重访过去
2006/10/09 PHP
Email+URL的判断和自动转换函数
2006/10/09 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
详解Python中DOM方法的动态性
2015/04/11 Python
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python元组拆包实现方法
2021/02/28 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
办公室文秘自我鉴定
2013/09/21 职场文书
汽车专业毕业生推荐信
2013/11/12 职场文书
公关关系专员的自我评价分享
2013/11/20 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
婚宴父母致辞
2015/07/27 职场文书
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers