1 flask安装
pip install flask==1.02
2 入门案例
from flask import Flask
app = Flask(
__name__,
)
@app.route('/')
def index_handler():
return 'index_flask'
if __name__ == '__main__':
app.run()
3 Flask类的初始化参数
参数 | 说明 |
---|---|
import_name | 就写__name__ |
static_url_path=None | 静态文件的url地址 |
static_folder=‘static’ | 静态文件夹路径 |
template_folder=‘templates’ | 模板文件夹路径 |
4 加载配置文件
4.1 对象加载
命令 | 说明 |
---|---|
app.config.from_object() | 加载类对象配置文件 |
例如:
class Config():
DEBUG = True
app.config.from_object(Config)
4.2 文件加载
命令 | 说明 |
---|---|
app.config.from_pyfile() | 加载文件配置 |
1.新建一个文件(名字和后缀任意)
- 例如:新建一个config.ini 内容:DEBUG = True
2.加载
- app.config.from_pyfile(‘config.ini’)
4.3 直接配置
命令 | 说明 |
---|---|
app.config["【配置关键字】"] = 值 | 设置配置项 |
例如:
app.config["DEBUG"] = True
注:
- 设置debug=true,也可以app.debug=true
4.4 其他加载方式
命令 | 说明 |
---|---|
app.config.from_envvar() | 从虚拟环境加载 |
app.config.from_json() | 从json中加载 |
app.config.from_mapping() | 从映射中加载 |
5 路由
5.1 简单路由映射
@app.route('/ml')
def machine_learning():
return 'machine_learning'
注意:“/”一定要加
5.2 接受路由参数
格式:
- <【变量名】>
例如:
扫描二维码关注公众号,回复:
11414238 查看本文章
@app.route('/login/<username>')
def login_handler(username):
return username
注:
- 尖括号里面的username和下面函数传递的username字段名称必须一致
- 老版本的路由接收参数可以指定类型,例如int、float、string等,但比较鸡肋
5.3 接受正则表达式
第一步,定义Converter(下面你的代码是通用的)
from werkzeug.routing import BaseConverter
class ReConverter(BaseConverter):
def __init__(self,url_map,param):
BaseConverter.__init__(self,url_map)
self.regex = param
第二步:定义re为ReConverter
app.url_map.converters['re'] = ReConverter
第三步:接受正则参数
@app.route('/<re("[0-9]{3}"):param>')
def re_handler(param):
return param
理解图:
6 上下文
6.1 request
- 导包
from flask import request
6.1.1 常用属性
属性 | 说明 | 类型 |
---|---|---|
data | 记录请求的数据,并转为字符串 | * |
form | 记录请求中的表单数据 | MultiDict |
args | 记录请求中的查询参数 | MultiDict |
cookies | 记录请求中的cookie信息 | Dict |
headers | 记录请求中的报文头 | EnvironHeaders |
method | 记录请求中的HTTP方法 | GET/POST |
url | 记录请求的url地址 | string |
files | 记录请求上传的文件 | * |
6.1.2 获得表单数据
get请求:
- request.args.get(param)
- request.args.getlist(param)
post请求:
- request.form.get(param)
- request.form.getlist(param)
6.2 重定向
- 导包
from flask import redirect
from flask import url_for
- 方法
方法 | 说明 |
---|---|
redirect(URL) | 重定向到url地址 |
url_for(函数名) | 返回路由的url地址 |
例如:
# 1重定向url地址
@app.route('/redirect1')
def myredirect1_handler():
return redirect('/')
# 2.重定向到视图函数
@app.route('/redirect2')
def myredirect2_handler():
return redirect(url_for('myredirect1_handler'))
6.3 cookie
导包
from flask import request,make_response
功能 | 命令 |
---|---|
设置 | mp = make_response() mp.set_cookie(key,value,max_age) ----return mp |
取值 | cookies = request.cookies value = cookies.get(key,default) |
删除 | mp = make_response() mp.delete_cookie(key) ----return mp |
例如:
# 导包
from flask import request,make_response
# ——————————————————————————————————————
@app.route('/setCookie/<cookie_param>')
def setCookie(cookie_param):
mp = make_response()
mp.set_cookie('key',cookie_param,max_age=60*60*24)
return mp
@app.route('/getCookie/<cookie_param>')
def getCookie(cookie_param):
value = request.cookies.get(cookie_param,'默认值')
return value
@app.route('/delCookie/<cookie_param>')
def delCookie(cookie_param):
mp = make_response()
mp.delete_cookie(cookie_param)
return mp
6.4 session
session是基于cookie的,某些敏感信息不应该直接存储在客户端
导包
from flask import session
例如:
# 1.导包
from flask import session
# 2.设置secret_key
app.secret_key = '26b25998-2911-11e9-a7d3-08d40c722b4a'
# 使用session——————————————————————————
@app.route('/setSession')
def setSession():
session['key'] = 'value'
return 'success'
@app.route('/getSession')
def getSession():
value = session.get('key','默认值')
return value
@app.route('/delSession')
def delSession():
session.pop('key',None)
return 'success'
6.5 current_app
导包
from flask import current_app
例如:
from flask import current_app
@app.route('/getCurrentApp')
def getCurrentApp():
value = current_app.key
return value
@app.route('/setG')
def setG():
g.key = 'value2'
return '成功'
7 装饰器
装饰器 | 说明 |
---|---|
before_first_request | 处理第一个请求的时候执行 |
before_request | 请求前执行 |
after_request | 请求后执行(如果请求没有错误) 接收一个视图处理后的response 需要将这个return一个response对象 |
teardown_request | 在每次请求后都会执行(即使请求出现异常) 执行接收一个错误信息参数(如果没有错误,参数值=None) |
例如:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index_handler():
print('index_handler执行了')
return 'index'
@app.before_first_request
def before_first_request_handler():
print('before_first_request_handler')
@app.before_request
def before_request_handler():
print('before_request')
@app.after_request
def after_request_handler(response):
print('response=',response)
print('after_request')
return response
@app.teardown_request
def teardown_request_handler(error):
print('error=',error)
print('teardown_request')
if __name__ == '__main__':
app.run()
8 异常
8.1 手动抛出 abort
导包
from flask import abort
abort(403) 手动抛出403错误
例如:
from flask import abort
# ————————————————————————————————————
@app.route('/error')
def testError():
abort(403)
测试方式:
@app.route('/abort/<param>')
def abort_handler(param):
abort(int(param))
8.2 异常捕捉路由 errorhandler()
from flask import abort
# ————————————————————————————————————
@app.errorhandler(404)
def error404_handler(error):
print(error)
return '没有这个网页哦'
9 启动服务
9.1 app.run()
app.run(
host = 'localhost',
port = '8080',
debug = True,
)
9.2 flask-script
9.2.1 安装Flask-Script
pip install flask-script
9.2.2 使用案例
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
manager.run()
9.2.3 终端使用
查看命令:
python 【py文件名】 runserver –help
例子:
python myflask_script.py runserver -h localhost -p 8080 -d