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 09 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
opencv python 2D直方图的示例代码
Jul 20 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 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
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python中的随机函数random的用法示例
2018/01/27 Python
实例详解Python装饰器与闭包
2019/07/29 Python
Django values()和value_list()的使用
2020/03/31 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
表彰大会策划方案
2014/05/13 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
敬老院标语
2014/06/27 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书