Flask工程搭建及路由和蓝图
-
简介
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。
-
与django对比
django提供了:django-admin快速创建项目工程目录,manage.py 管理项目工程,orm模型(数据库抽象层),admin后台管理站点,缓存机制,文件存储系统,用户认证系统,而这些,flask都没有,都需要扩展包来提供。
django是一个重量级框架,它提供了丰富的组件,可以让我们快速构建web应用
flask是一个轻量级框架,它只提供了路由核心和jinja2模板引擎
-
常用扩展包
扩展列表:http://flask.pocoo.org/extensions/
- Flask-SQLalchemy:操作数据库;
- Flask-script:插入脚本;
- Flask-migrate:管理迁移数据库;
- Flask-Session:Session存储方式指定;
- Flask-WTF:表单;
- Flask-Mail:邮件;
- Flask-Bable:提供国际化和本地化支持,翻译;
- Flask-Login:认证用户状态;
- Flask-OpenID:认证;
- Flask-RESTful:开发REST API的工具;
- Flask-Bootstrap:集成前端Twitter Bootstrap框架;
- Flask-Moment:本地化日期和时间;
- Flask-Admin:简单而可扩展的管理接口的框架
-
Flask文档
- 中文文档(http://docs.jinkan.org/docs/flask/)
- 英文文档(http://flask.pocoo.org/docs/1.0/)
-
Flask的HelloWorld程序
# 导入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()
-
参数说明
# import_name: 导入模块的名字,给Flask寻找静态资源用的。固定__name__ # static_url_path: 静态资源的路由 / + 'static' # static_folder: 静态资源文件夹 static # templates_folder: 模板文件夹 templates
-
开发服务器启动方式
-
终端运行
# 导入环境变量 export FLASK_APP=helloworld # 运行命令 flask run * Running on http://127.0.0.1:5000/
-
环境变量 FLASK_APP 指明flask的启动实例
-
flask run -h 0.0.0.0 -p 8000
绑定地址 端口 -
flask run --help
获取帮助 -
生产模式与开发模式的控制
通过
FLASK_ENV
环境变量指明export FLASK_ENV=production
运行在生产模式,未指明则默认为此方式export FLASK_ENV=development
运行在开发模式
-
-
pycharm运行
-
设置环境变量
-
运行命令
新版
旧版
-
-
-
查看路由方式
# 1.新版flask export FLASK_APP=app所在模块 export FLASK_ENV=工作模式(production生产模式, development调试、开发模式) flask routes # 2.打印app.url_map print(app.url_map) # 3.使用app.url_map构造一个接口返回(希望大家掌握) @app.route("/") def index() data = {} for i in app.url_map.iter_rules(): data[i.endpoint] = i.rule return json.dumps(data) # return jsonify(data)
-
Flask三种配置参数设置方式
# flask对象中,是使用app.config存放所有的配置参数 # app.config 可以简单的理解是一个字典 # 设置: app.config['key'] = 'value' # 获取: app.config.get('key') (建议写法) app.config['key'] (不存在就会报错) # 方式一: 从配置类中加载(方便,是常用的) class Config(object): REDIS = 'redis://127.0.0.1/1' app.config.from_object(Config) # 方式二: 从配置文件中加载(安全,一般使用第三种替代) config.ini: REDIS = 'redis://127.0.0.1/1' app.config.from_pyfile('config.ini') # 方式三: 从环境变量中加载,本质是从文件中加载,环境变量的值就是文件的路径 # 可以是相对路径,也可以是绝对路径 (灵活, 安全) export CONFIG=/home/python/Desktop/config.ini app.config.from_envvar('CONFIG')
-
创建Flask对象工厂函数 (封装配置)
def create_app(config): app = Flask(__name__) # 通过两种加载配置的方式加载 # 1.使用方式一 app.config.from_object(config) # 2.使用方式三 app.config.from_envvar('CONFIG', silent=True) return app
-
能够使用methods限定Flask视图的请求方式
# GET POST PUT PATCH DELETE # GET @app.route('/', methods=['GET', 'POST']) def index(): return ''
-
OPTIONS和HEAD请求方法的作用
HEAD: 只返回首部,一般用于检查超链接。 OPTIONS: 1.返回接口路由允许的请求方式。 2.跨域前预检测 2.1设置两个本地host指向127.0.0.1 2.2编写两个接口,在一个接口返回页面,并在页面中对另外一个接口请求数据。 2.3不设置跨域,看效果 2.4设置跨域,看效果
展示效果
from flask import Flask, render_template from flask_cors import CORS app = Flask(__name__) # 允许跨域 CORS(app) @app.route('/') def index(): return render_template('d06_options.html') @app.route('/index2') def index2(): return 'index2' if __name__ == '__main__': app.run(debug=True)
-
能够在Flask中使用蓝图
# 导入Flask类 from flask import Flask, Blueprint app = Flask(__name__, static_url_path='/static', static_folder='static') # 1.创建蓝图对象 user_bp = Blueprint("user", "__name__") # 2.使用蓝图对象定义路由和视图函数 @user_bp.route('/') def index(): return 'Hello World' # 3.把蓝图对象注册到app中 app.register_blueprint(user_bp) # Flask应用程序实例的run方法启动WEB服务器 if __name__ == '__main__': app.run()