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. (转)jQuery基础之选择器

    原文地址: http://www.cnblogs.com/webmoon/p/3169360.html 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器 ...

  2. 《Wonderland: A Novel Abstraction-Based Out-Of-Core Graph Processing System》章明星

    在2018年3月28日于美国弗吉尼亚州威廉斯堡结束的ACM ASPLOS 2018会议上,计算机系高性能所师生发表了两篇长文.一篇是我系博士生章明星为第一作者,导师武永卫为通讯作者的“Wonderla ...

  3. 【实习项目记录】(二) JSON

    介绍 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Program ...

  4. 定时器timer类

    timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={})  in ...

  5. 多线程《五》GIL全局解释器锁

    一 引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...

  6. PHP的Composer 与 Packagist,简单入门

    [转]http://www.php.cn/manual/view/34000.html Composer 是一个 杰出 的依赖管理器.在 composer.json 文件中列出你项目所需的依赖包,加上 ...

  7. 老司机图文教程教你如何免费下载腾讯视频的视频mp4(直接下载到,不用qlv格式转mp4格式,亲测)

    关于如何下载到腾讯视频的mp4这个问题,大家想必经过多翻搜索,都未必找到满意的答案吧. 下载微信公众号文章中引用的腾讯视频的方法也是一样适用本方法. 因为用腾讯视电脑客户端和手机APP下载到的都是QL ...

  8. Java面向对象之多态(向上、向下转型) 入门实例

    一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...

  9. python3+Django1.11+mysql5.7 MySQL DB API Drivers

    The Python Database API is described in PEP 249. MySQL has three prominent drivers that implement th ...

  10. AttributeError: module 'yagmail' has no attribute 'SMTP',关于使用yagmail发邮件报错的解决方法

    想用yagmail,发送自动化测试结果邮件,发现运行的时候报错.最后发现是自己的脚本名称用的yagmail.py,更改成另一个就好,换了my_yagmail.py 再运行OK啦!!!!