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各种语言间时间的转化实现代码
Mar 23 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python异常处理和日志处理方式
Dec 24 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python实现梯度下降和逻辑回归
Mar 24 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
python语言实现贪吃蛇游戏
Nov 13 Python
next在python中返回迭代器的实例方法
Dec 15 Python
 python中的元类metaclass详情
May 30 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的五种设计模式
2012/09/05 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
jquery选择器使用详解
2014/04/08 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
python把转列表为集合的方法
2019/06/28 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
英语演讲稿范文
2014/01/03 职场文书
文明餐桌活动方案
2014/02/11 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
学生退学证明
2015/06/23 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
go goth封装第三方认证库示例详解
2022/08/14 Golang