在Flask中操作session



示例:设置session的过期时间

完整版

旧版


设置session的过期时间

示例

# encoding: utf-8from flask import Flask, session
import os
from datetime import timedeltaapp = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)# 添加数据到session中
# 操作session的时候,跟操作字典是一样的
# SECRET_KEY@app.route('/')
def hello_world():session['username'] = 'moguiyu'# 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束# 如果设置了session的permanent属性为true,那么过期时间是31天session.permanent = Truereturn "success set username="+str(session.get('username'))@app.route('/get/')
def get():return "get username="+str(session.get('username'))if __name__ == '__main__':app.run(debug=True)


get和post请求

(关于print不立刻显示的问题:使用sys.stdout.flush()刷新缓冲区即可)

示例

# encoding: utf-8from flask import Flask, session, request
import os
import sys
from datetime import timedeltaapp = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)# 添加数据到session中
# 操作session的时候,跟操作字典是一样的
# SECRET_KEY@app.route('/')
def hello_world():session['username'] = 'moguiyu'# 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束# 如果设置了session的permanent属性为true,那么过期时间是31天session.permanent = Truereturn "success set username=" + str(session.get('username'))@app.route('/get/')
def get():return "get username=" + str(session.get('username'))@app.route('/search/')
def search():print request.argssys.stdout.flush()return "request parameters=" + str(request.args)if __name__ == '__main__':app.run(debug=True)


简单的表单提交页面(post方式)


app.py

# encoding: utf-8from flask import Flask, session, request, render_template
import os
import sys
from datetime import timedeltaapp = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)# 添加数据到session中
# 操作session的时候,跟操作字典是一样的
# SECRET_KEY@app.route('/')
def hello_world():session['username'] = 'moguiyu'# 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束# 如果设置了session的permanent属性为true,那么过期时间是31天session.permanent = Truereturn "success set username=" + str(session.get('username'))@app.route('/get/')
def get():return "get username=" + str(session.get('username'))@app.route('/login/', methods=['GET', 'POST'])
def login():if request.method == 'GET':return render_template('login.html')else:username = request.form.get('username')password = request.form.get('password')print usernameprint passwordsys.stdout.flush()return render_template('login.html')@app.route('/search/')
def search():# 获取所有参数(字典)print request.args# 获取某个参数print request.args.get('q')sys.stdout.flush()return "request parameters=" + str(request.args)if __name__ == '__main__':app.run(debug=True)

g对象的使用

g相当于global,在一次请求中,当前项目的所有地方都可以使用到。

效果示例


源码

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form   action="{{ url_for('login') }}" method="post"><table><tbody><tr><td>用户名:</td><td><input type="text" name="username" placeholder="请输入用户名"></td></tr><tr><td>密码:</td><td><input type="text" name="password" placeholder="请输入密码"></td></tr><tr><td></td><td><input type="submit" placeholder="登录"></td></tr></tbody></table></form>
</body>
</html>

utils.py

# encoding: utf-8from flask import gdef login_log():print '当前登录用户是:%s' % g.username

app.py

# encoding: utf-8from flask import Flask, session, request, render_template, g
import os
import sys
from datetime import timedelta
from utils import login_logapp = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)# 添加数据到session中
# 操作session的时候,跟操作字典是一样的
# SECRET_KEY@app.route('/')
def hello_world():session['username'] = 'moguiyu'# 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束# 如果设置了session的permanent属性为true,那么过期时间是31天session.permanent = Truereturn "success set username=" + str(session.get('username'))@app.route('/get/')
def get():return "get username=" + str(session.get('username'))@app.route('/login/', methods=['GET', 'POST'])
def login():if request.method == 'GET':return render_template('login.html')else:username = request.form.get('username')password = request.form.get('password')# 模拟验证登录if username == 'zhangsan' and password == '123':g.username='zhangsan'login_log()sys.stdout.flush()return render_template('login.html')@app.route('/search/')
def search():# 获取所有参数(字典)print request.args# 获取某个参数print request.args.get('q')sys.stdout.flush()return "request parameters=" + str(request.args)if __name__ == '__main__':app.run(debug=True)

钩子函数


1、 before_request

before_request可以理解成java中的filter吧。

示例1

示例2(在第7行加一个secretkey,在13行加一个methods=[‘GET’, ‘POST’],图中忘写了)


改造:使用g对象(实际使用时,不需要每次都重新获取session.userid然后和数据库取出的数据比对,只需要比对一次,如果成功匹配,直接存在g对象中,以后用时直接从g对象取即可)

2、context_prosessor
context_prosessor的使用:示例如下,使用context_prosessor之后就不需要在42行传参username


使用实例:登录后存session

【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数相关推荐

  1. Python Flask框架-开发简单博客-认证蓝图

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  2. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传

    运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...

  3. python flask框架剖析_python flask框架实现传数据到js的方法分析

    本文实例讲述了python flask框架实现传数据到js的方法.分享给大家供大家参考,具体如下: 首先要清楚后台和前端交互所采用的数据格式. 一般选JSON,因为和js完美贴合. 后台返回的数据进行 ...

  4. 【25】数据可视化:基于 Echarts + Python Flask框架动态实时大屏范例 - 企业宣传

    目录 效果展示 多主题样式 一. 确定需求方案 1.确定产品上线部署的屏幕分辨率 2.部署方式 二.整体架构设计 三.编码实现 (基于篇幅及可读性考虑,此处展示部分关键代码) 1.前端html代码 - ...

  5. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  6. Python+Flask框架搭建可视化网站

    Python+Flask框架搭建可视化网站 一.项目结构 二.app.py from flask import Flask,render_template import sqlite3app = Fl ...

  7. Python flask框架入门

    一.Flask 简介 Flask: Flask是一个用Python编写的Web应用程序框架.Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎. Web Framework: We ...

  8. python Flask框架如何请求及返回数据——flask详细教程

    python Flask框架如何请求及返回数据--flask详细教程 文章目录: 1 Flask介绍 1.1 Flask简单介绍 1.2 Flask相关资料信息 2 Flask快速入门 2.1 Fla ...

  9. Python Flask框架

    Python Flask框架 Flask框架简介 安装过程 Falsk程序的运行过程 基本语法/结构 如有错误,请指正 Flask框架简介 Flask是一个轻量级的可定制框架,使用Python语言编写 ...

  10. 帮我用python flask框架写一个可以上传英文pdf然后通过调取百度翻译api翻译为中文然后保存为pdf文件的代码...

    下面是一个简单的代码示例,可以帮助您使用 Python Flask 框架实现上传英文 PDF,并通过调用百度翻译 API 将其翻译为中文,然后保存为 PDF 文件: from flask import ...

最新文章

  1. javascript-行间样式,提取行间事件,while/for,全选/反选/取消,选项卡,innerHTML
  2. 串行总线---差分互连(差分线)之共模、奇模、偶模
  3. ABAP入门程序,你会了嘛?
  4. STM32开发 -- Systick定时器
  5. Android UI开发第三十三篇——Navigation Drawer For Android API 7
  6. 检测单链表是否是回文
  7. 如何做一场高质量的分享?
  8. java父系调用子系,获取usb设备父系或子代
  9. python带界面的计算器
  10. How are SAP ui5 Control Aggregation getter and setter are designed
  11. 共享服务器硬件要求,共享服务器的配置与管理.doc
  12. python中与0xf2相等的是_python中__str__与__repr__
  13. combobox的method是get为什么发的请求是post_深入理解http get和post请求的区别,读完之后,大部分程序员收藏了...
  14. 步步为营 .NET三层架构解析 五、DAL与IDAL的设计
  15. 软件开发模式有哪些?
  16. wincc如何实现web发布,及具体方法
  17. 如何关闭迅雷极速版的升级提示
  18. ISP(图像信号处理)白平衡White Balance
  19. 快速提取Word文档中的所有图片
  20. puts()和gets()

热门文章

  1. 凸包模板(Graham算法)
  2. python 依据某几列累加求和_关于Python数组求和的四个问题及详解,让你更加爱Python!...
  3. 使用Docker安装Spark集群(带有HDFS)
  4. SPOJ Finding Fractions
  5. 模拟赛-20190114-新魔法(distance)
  6. 字节、阿里等大厂的技术如何?看看这些Java程序员的自学笔记
  7. 开发中的坑:MQ 也能做 RPC 调用?
  8. cookie 和 session 详解
  9. 【城市沙龙】LiveVideoStack Meet | 长沙:多媒体与广电
  10. 历经5代跨越25年的RTC架构演化史