session功能

首先我们知道session可以理解是一把钥匙,它存在在服务器上,其实在flask中也有session

1.系统自带的session

from flask import session
import json
app=Flask(__name__,template_folder='templates',static_path='/static/',static_url_path='/static/')
app.debug=True
#设置session加密
app.secret_key='sjehfjeefrjewth43u'
#指定json编码格式 如果为False 就不使用ascii编码,
app.config['JSON_AS_ASCII']=False
app.config['JSONIFY_MIMETYPE']
#指定浏览器渲染的文件类型,和解码格式;="application/json;charset=utf-8" @app.route('/login/',methods=['GET','POST'])
def login():
msg = ''
if request.method=='POST':
name=request.values.get('user')
pwd=request.values.get('pwd')
if name =='zhanggen' and pwd=='123.com':
session['user']=name #设置session的key value
return redirect('/index/')
else:
msg='用户名或者密码错误'
return render_template('login.html',msg=msg) @app.route('/index/',methods=['GET','POST'])
def index():
user_list = ['张根', 'egon', 'eric']
user=session.get('user') #获取session
if user:
user=['alex','egon','eric']
return jsonify(user_list)
else:
return redirect('/login/') if __name__ == '__main__':
app.run() Flask自带session功能

2.第三方session插件

安装 pip install flask-session
from flask import session, Flask,request,make_response,render_template,redirect,jsonify,Response

#引入第三方session
from flask.ext.session import Session
import json
app=Flask(__name__,template_folder='templates',static_path='/static/',static_url_path='/static/')
app.debug=True #设置session加密
app.secret_key='sjehfjeefrjewth43u'
app.config['JSON_AS_ASCII']=False #指定json编码格式 如果为False 就不使用ascii编码,
app.config['JSONIFY_MIMETYPE'] ="application/json;charset=utf-8" #指定浏览器渲染的文件类型,和解码格式; app.config['SESSION_TYPE']='redis' from redis import Redis #引入连接 redis模块
app.config['SESSION_REDIS']=Redis(host='192.168.0.94',port=6379) #连接redis
Session(app) @app.route('/login/',methods=['GET','POST'])
def login():
msg = ''
if request.method=='POST':
name=request.values.get('user')
pwd=request.values.get('pwd')
if name =='zhanggen' and pwd=='123.com':
session['user']=name #设置session的key value
return redirect('/index/')
else:
msg='用户名或者密码错误'
return render_template('login.html',msg=msg) @app.route('/index/',methods=['GET','POST'])
def index():
user_list = ['张根', 'egon', 'eric']
user=session.get('user') #获取session
if user:
user=['alex','egon','eric']
return jsonify(user_list)
else:
return redirect('/login/') if __name__ == '__main__':
app.run() 把session存到redis

蓝图

蓝图你可以理解为是一个启动不了了的flask的实例,不多说上实例自己看

这个是我们的蓝图目录

#views.py文件中写

from flask import Blueprint  # 导入 Flask 中的蓝图 Blueprint 模块
from flask import render_template sv = Blueprint("sv",
__name__,
template_folder="sv_template", # 每个蓝图都可以为自己独立出一套template模板文件夹,如果不写则共享项目目录中的templates
static_folder="sv_static" # 静态文件目录也是可以独立出来的
) # 实例化一个蓝图(Blueprint)对象(切记!!!!!!注册!!!!!!!!!!!!!!!!) @sv.route("/svlist")
def view_list():
return render_template("svlist.html")
#s4app.html中写入

from flask import Blueprint  # 导入 Flask 中的蓝图 Blueprint 模块
from flask import render_template sv = Blueprint("sv",
__name__,
template_folder="sv_template", # 每个蓝图都可以为自己独立出一套template模板文件夹,如果不写则共享项目目录中的templates
static_folder="sv_static" # 静态文件目录也是可以独立出来的
) # 实例化一个蓝图(Blueprint)对象 @sv.route("/svlist")
def view_list():
return render_template("svlist.html")

这样我们打开浏览器看到的就是我们的页面,这就是蓝图,他有自己的模板文件,只要被注册了就一定会生效,当然了,蓝图内部的视图函数route不雅重复,这是前辈踩的坑,不信你自己试试

message (闪现)

message是一个基于Session实现的用于保存数据的集合,其特点是:一次性。

特点:和labada匿名函数一样不长期占用内存

from flask import Flask,request,flash,get_flashed_messages

app = Flask(__name__)
app.secret_key = 'some_secret' @app.route('/set/')
def index2():
flash('Disposable') #在message中设置1个个值
return 'ok' #--------------------------------------------------------------------------------- @app.route('/')
def index1():
messages = get_flashed_messages() #获取message中设置的值,只能获取1次。(1次性)
print(messages)
return "Index1" if __name__ == "__main__":
app.run() flask_message

中间件

flask也有中间件功能和Django类似,不同的是使用的是使用3个装饰器来实现的;

1.@app.before_first_request :请求第1次到来执行1次,之后都不执行;

2.@app.before_request:请求到达视图之前执行;(改函数不能有返回值,否则直接在当前返回)

3.@app.after_request:请求 经过视图之后执行;(最下面的先执行)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, Request, render_template app = Flask(__name__, template_folder='templates')
app.debug = True @app.before_first_request #第1个请求到来执行
def before_first_request1():
print('before_first_request1') @app.before_request #中间件2
def before_request1():
Request.nnn = 123
print('before_request1') #不能有返回值,一旦有返回值在当前返回 @app.before_request
def before_request2():
print('before_request2') @app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404 @app.route('/')
def hello_world():
return "Hello World" @app.after_request #中间件 执行视图之后
def after_request1(response):
print('after_request1', response)
return response @app.after_request #中间件 执行视图之后 先执行 after_request2
def after_request2(response):
print('after_request2', response)
return response if __name__ == '__main__':
app.run()

 参考地址:https://www.cnblogs.com/heshun/p/10256443.html

flask综合整理2的更多相关文章

  1. flask综合整理1

    前言: 框架的对比 Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form.Admin.分页.中间件.信号.缓存.ContenType....): To ...

  2. python基础===flask使用整理(转)

    flask 使用的一些整理 资源 Flask 文档|英文| expore flask| 快速教材| flask-admin| Flask-DebugToolbar| Flask-Login| Flas ...

  3. Flask框架整理

    Flask基础部分 Flask目录结构(蓝图) views中存放蓝图,每个蓝图也可以有自己的模板,用蓝图对不同功能的视图函数进行隔离,类似于django中的app pro_flask包的init.py ...

  4. flask综合案例

    一.项目准备 1.新建项目目录students,并创建虚拟环境 mkvirtualenv students 2.安装依赖环境 pip install flask==0.12.4 pip install ...

  5. Flask框架整理及配置文件

    阅读目录 Flask目录结构(蓝图) pro_flask包的init.py文件, 用于注册所有的蓝图 manage.py文件,作为整个项目的启动文件 views包中的blog.py,必须要通过sess ...

  6. 性能优化 | JVM与性能优化知识点综合整理

    JVM JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器.它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序. java编译 ...

  7. Spring Cloud Consul综合整理

    该项目通过自动配置和Spring环境以及其他Spring编程模型习惯用法提供了Spring Boot应用程序的Consul集成. 通过一些简单的注释,您可以快速启用和配置应用程序内的通用模式,并使用基 ...

  8. [js]事件综合 整理

    原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 事件流:页面接收事件的顺序,IE提出了事件冒泡流,Netscape提出了事件捕获流. 事件冒泡 ...

  9. 常见问题2:html+css效果综合整理

    1.---文本框提示文字颜色--placeholder属性 <input type="text" placeholder="请输入提示文字" /> ...

随机推荐

  1. Java 数据结构之数组

    public class Arrays {    //创建一个Integer空数组    public static Integer[] player=null;    //添加球员号码    pri ...

  2. Oracle的列操作(增加列,修改列,删除列),包括操作多列

    增加一列: alter table emp4 add test varchar2(10); 修改一列: alter table emp4 modify test varchar2(20); 删除一列: ...

  3. nagios+influxdb+grafana的监控数据可视化流程

    nagios介绍 nagios是一款开源监控的应用,可用于监控本地和远程主机的日志.资源.死活等等诸多功能.通过snmp协议和nrpe协议. nagios的配置文件是由nconf上进行配置,然后点击生 ...

  4. Markdown使用心得

    1. 标题的使用 在使用标题时,如果为了层次清晰,可以在"#"后加上"1. "或者"1.1. "这种序号. 每一级标题的正文结束后,最好加一 ...

  5. spring mvc 框架启动报错:nested exception is java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal 解决办法

    今天准备将以前自己搭建的一个框架拿出来用一下,结果发现启动报错:nested exception is java.lang.NoClassDefFoundError: org/w3c/dom/Elem ...

  6. ubuntu14.04,安装Chrome(谷歌浏览器)

    Linux:ubuntu14.04 一直都很喜欢谷歌浏览器,进入linux怎么能没有? 安装方法:谷歌浏览器官方下载的ubuntu版本,下载后点击即可安装. 下载地址:http://download. ...

  7. IDEA开发javaEE项目问题总结

    删了删了,不瞎折腾了,用Maven嘛事没有 注意在idea中,add framework后还需要在maven中添加相关依赖

  8. php代码审计1(php.ini配置)

    1.php.ini基本配置-语法 大小写敏感directive = value(指令=值)foo=bar 不等于 FOO=bar 运算符| & - ! 空值的表达方法foo =     ;fo ...

  9. 【转】C#中静态方法和非静态方法的区别

    源地址:https://www.cnblogs.com/amoshu/p/7477757.html 备注:静态方法不需要类的实例化就能调用,因为它是一直保存在内存中,不像非静态方法一样要放在实例化类时 ...

  10. cookie,session 的概念以及在django中的用法,以及cbv装饰器用法

    cookie的由来: 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后 ...