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 13 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
python属于软件吗
Jun 18 Python
Django用户认证系统如何实现自定义
Nov 12 Python
使用Python封装excel操作指南
Jan 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
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
Centos6.8下Node.js安装教程
2017/05/12 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
node版本管理工具n包使用教程详解
2018/11/09 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Python性能优化技巧
2015/03/09 Python
python批量生成本地ip地址的方法
2015/03/23 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python多线程并发实例及其优化
2019/06/27 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
作文评语大全
2014/04/23 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
护士个人年度总结范文
2015/02/13 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
返乡农民工证明
2015/06/24 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python