一, Flask 介绍
Flask 是当下流行的 web 框架, 它是用 Python 实现的其 WSGI 工具箱采用 Werkzeug , 模板引擎则使用 Jinja2 .Flask 使用 BSD 授权..Flask 显著的特点是: 它是一个 "微" 框架."微" 意味着 Flask 旨在保持核心的简单, 但同时又易于扩展. 默认情况下, Flask 不包含数据库抽象层, 表单验证, 或是其它任何已有多种库可以胜任的功能. 然而, Flask 支持用扩展来给应用添加这些功能. 众多的扩展提供了数据库集成, 表单验证, 上传处理, 各种各样的开放认证技术等功能. Flask 的这些特性, 使得它在 Web 开发方面变得非常流行.
Flask 的两大核心: Werkzeug 和 Jinja2
- Werkzeug 实现路由, 调试和 Web 服务器网关接口
- Jinja2 实现了模板
二, Flask 的安装
pip3 install flask
常用扩展包:
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 的基本使用
- from flask import Flask
- App = Flask(__name__)
- @App.route('/')
- def hello_world():
- return 'Hello World!'
- if __name__ == '__main__':
- App.run()
{
'DEBUG': get_debug_flag(default=False), 是否开启 Debug 模式
'TESTING': False, 是否开启测试模式
- 'PROPAGATE_EXCEPTIONS': None,
- 'PRESERVE_CONTEXT_ON_EXCEPTION': None,
- 'SECRET_KEY': None,
- 'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
- 'USE_X_SENDFILE': False,
- 'LOGGER_NAME': None,
- 'LOGGER_HANDLER_POLICY': 'always',
- 'SERVER_NAME': None,
- 'APPLICATION_ROOT': None,
- 'SESSION_COOKIE_NAME': 'session',
- 'SESSION_COOKIE_DOMAIN': None,
- 'SESSION_COOKIE_PATH': None,
- 'SESSION_COOKIE_HTTPONLY': True,
- 'SESSION_COOKIE_SECURE': False,
- 'SESSION_REFRESH_EACH_REQUEST': True,
- 'MAX_CONTENT_LENGTH': None,
- 'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
- 'TRAP_BAD_REQUEST_ERRORS': False,
- 'TRAP_HTTP_EXCEPTIONS': False,
- 'EXPLAIN_TEMPLATE_LOADING': False,
- 'PREFERRED_URL_SCHEME': 'http',
- 'JSON_AS_ASCII': True,
- 'JSON_SORT_KEYS': True,
- 'JSONIFY_PRETTYPRINT_REGULAR': True,
- 'JSONIFY_MIMETYPE': 'application/json',
- 'TEMPLATES_AUTO_RELOAD': None,
- }
配置文件
配置文件
方式一:
App.config['DEBUG'] = True
PS: 由于 Config 对象本质上是字典, 所以还可以使用 App.config.update(...)
方式二:
App.config.from_pyfile("python 文件名称")
如:
settings.py
- DEBUG = True
- App.config.from_pyfile("settings.py")
- App.config.from_envvar("环境变量名称")
环境变量的值为 python 文件名称名称, 内部调用 from_pyfile 方法
App.config.from_json("json 文件名称")
JSON 文件名称, 必须是 JSON 格式, 因为内部会执行 JSON.loads
App.config.from_mapping({'DEBUG':True})
字典格式
- App.config.from_object("python 类或类的路径")
- App.config.from_object('pro_flask.settings.TestingConfig')
settings.py
- class Config(object):
- DEBUG = False
- TESTING = False
- DATABASE_URI = 'sqlite://:memory:'
- class ProductionConfig(Config):
- DATABASE_URI = 'mysql://[email protected]/foo'
- class DevelopmentConfig(Config):
- DEBUG = True
- class TestingConfig(Config):
- TESTING = True
调用方式
调用方式
四, Flask 的路由系统
- @App.route('/xxx/<username>')
- @App.route('/xxx/<int:id>')
- @App.route('/xxx/<float:id>')
- @App.route('/xxx/<path:path>')
- @App.route('/xxx', methods=['GET', 'POST'])
- DEFAULT_CONVERTERS = {
- 'default': UnicodeConverter,
- 'string': UnicodeConverter,
- 'any': AnyConverter,
- 'path': PathConverter,
- 'int': IntegerConverter,
- 'float': FloatConverter,
- 'uuid': UUIDConverter,
- }
处理关系
处理关系
五, Flask 的蓝图
"蓝图" 系统在 Flask 应用的组件化和扩展提供了很大的便利."组件化" 是指可以在 Flask 层上将一个 Flask 应用进行 "分割", 实现模块化管理, 这极大地简化了构建大型应用的流程, 也使得应用的维护变得更加容易. 另外,"蓝图" 还提供了一种 Flask 扩展在应用上注册操作的核心方法.
"蓝图" 和一个 Flask 应用对象很相似, 但是并不是一个 Flask 应用对象. 它是可以注册到 Flask 应用上的一系列操作 (对于此的理解, 后文会详细讲到). 使用 "蓝图", 可以实现以下的一些功能:
将 Flask 应用 "分割" 为一系列 "蓝图" 的集合, 简化了大型应用工作的方式;
在 Flask 应用上, 以 URL 前缀和或子域名注册一个蓝图. 可以以不同的 URL 多次注册一个蓝图;
通过蓝图提供模板过滤器, 静态文件, 模板和其它功能.
- from blueprint import app_index
- App.register_blueprint(app_index)
蓝图的注册
- from flask import Blueprint
- app_index = Blueprint("app_index", __name__, template_folder="templates")
蓝图的创建
来源: http://www.bubuko.com/infodetail-3106362.html