1. Flask简介
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。
Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。
Werkzeug(路由模块),模板引擎Jinja2,这两个是 Flask 框架的核心。
2. 简易运行
导入Flask类
from flask import Flask
Flask函数接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
装饰器的作用是将路由映射到视图函数 index
@app.route('/')
def index():
return 'Hello World'
Flask应用程序实例的 run 方法 启动 WEB 服务器
if __name__ == '__main__':
app.run()
在程序运行过程中,程序实例中会使用 url_map 将装饰器路由和视图的对应关系保存起来
3. 相关参数
__name__,在静态文件中没有其名字的话,就会默认在代码窗口所在的路劲查找静态文件- static_url_path:静态文件访问路径,可以不传,默认为:
/ + static_folder - static_folder:静态文件存储的文件夹,可以不传,默认为
static - template_folder:模板文件存储的文件夹,可以不传,默认为
templates - 从配置对象中加载(常用):app.config.form_object()
- 从配置文件中加载:app.config.form_pyfile()
- 从环境变量中加载(了解):app.config.from_envvar()
- 在 Flask 中,定义一个路由,默认的请求方式为:GET
- 返回JSON:return jsonify(json_dict)
- 重定向:url_for
- 重定向到自己写的视图函数,可以直接填写自己 url 路径,也可以使用 url_for 生成指定视图函数所对应的 url:return redirect(url_for('demo1'))
- 在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666
系统自带转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
4. 异常捕获
- abort 方法:抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。
- 参数:code – HTTP的错误状态码
- errorhandler 装饰器:注册一个错误处理程序,当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法
- 参数: code_or_exception – HTTP的错误状态码或指定异常
5. 请求勾子
before_first_request:在处理第一个请求前执行
before_request:在每次请求前执行
如果在某修饰的函数中返回了一个响应,视图函数将不再被调用
after_request:如果没有抛出错误,在每次请求后执行
接受一个参数:视图函数作出的响应
在此函数中可以对响应值在返回之前做最后一步修改处理
需要将参数中的响应在此参数中进行返回
teardown_request:
在每次请求后执行,接受一个参数:错误信息,如果有相关错误抛出
6. 获取请求参数
request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)

7. 状态保持
无状态: 每次请求都是一次新的请求,人生若只如初见
实现状态保持主要有两种方式:
- 在客户端存储信息使用Cookie
- 在服务器端存储信息使用Session
7.1 Cookie
Cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。
# 设置cookie
from flask imoprt Flask,make_response
@app.route('/cookie')
def set_cookie():
resp = make_response('this is to set cookie')
resp.set_cookie('username', 'itcast')
return resp
# 设置过期时间
@app.route('/cookie')
def set_cookie():
response = make_response('hello world')
response.set_cookie('username', 'itheima', max_age=3600)
return response
获取cookie
from flask import Flask,request
#获取cookie
@app.route('/request')
def resp_cookie():
resp = request.cookies.get('username')
return resp
7.2 Session
- 对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息
- 在服务器端进行状态保持的方案就是Session
- Session依赖于Cookie
# session:请求上下文对象,用于处理http请求中的一些数据内容
@app.route('/index1')
def index1():
session['username'] = 'itcast'
return redirect(url_for('index'))
@app.route('/')
def index():
return session.get('username')
8. 上下文
请求上下文:
- request:封装了HTTP请求的内容,针对的是http请求。举例:user = request.args.get('user'),获取的是get请求的参数。
- session:用来记录请求会话中的信息,针对的是用户信息。举例:session['name'] = user.id,可以记录用户信息。还可以通过session.get('name')获取用户信息。
应用上下文:
- current_app:应用程序上下文,用于存储应用程序中的变量,可以通过current_app.name打印当前app的名称,也可以在current_app中存储一些变量
- g变量:g 作为 flask 程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别
两者区别:
- 请求上下文:保存了客户端和服务器交互的数据
- 应用上下文:flask应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等