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 装饰器功能以及函数参数使用介绍
Jan 27 Python
Python使用django搭建web开发环境
Jun 09 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
浅谈django orm 优化
Aug 18 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
python使用Geany编辑器配置方法
Feb 21 Python
python 3.8.3 安装配置图文教程
May 21 Python
python如何操作mysql
Aug 17 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
关于尾递归的使用详解
2013/05/02 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
Python最小二乘法矩阵
2019/01/02 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
python如何删除列为空的行
2020/07/17 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
ASP.NET中的身份验证有那些
2012/07/13 面试题
C#基础面试题
2016/10/17 面试题
法律顾问服务方案
2014/05/15 职场文书
2014年协会工作总结
2014/11/22 职场文书
安装工程师岗位职责
2015/02/13 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP