一.Flask的简单介绍
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
官方文档:
二.Flask的相关依赖
1.依赖
当安装 Flask 时,以下配套软件会被自动安装。
• Werkzeug 用于实现 WSGI ,应用和服务之间的标准 Python 接口。
• Jinja 用于渲染页面的模板语言。
• MarkupSafe 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。
• ItsDangerous 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie.
• Click 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义管理命令。
2.可选依赖
以下配套软件不会被自动安装。如果安装了,那么 Flask 会检测到这些软件。
• Blinker 为信号 提供支持。
• SimpleJSON 是一个快速的 JSON 实现,兼容 Python’s json 模块。如果安装了这个软件,那么会优先
使用这个软件来进行 JSON 操作。
• python-dotenv 当运行 flask 命令时为通过 dotenv 设置环境变量 提供支持。
• Watchdog 为开发服务器提供快速高效的重载。
3.Flask常用扩展包
Flask-SQLalchemy:操作数据库,ORM;
Flask-script:终端脚本工具,脚手架; 终端自动生成代码工具的称为脚手架
Flask-migrate:管理迁移数据库;
Flask-Session:Session存储方式指定;
Flask-WTF:表单;
Flask-Mail:邮件;
Flask-Bable:提供国际化和本地化支持,翻译;
Flask-Login:认证用户状态;
Flask-OpenID:认证, OAuth;
Flask-RESTful:开发REST API的工具;
Flask JSON-RPC: 开发rpc远程服务[过程]调用
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和时间
Flask-Admin:简单而可扩展的管理接口的框架
可以通过 http://flask.pocoo.org/extensions/ 查看更多flask官方推荐的扩展
三.flask安装
在虚拟环境下使用下面命令安装flask:
pip install flask
与时俱进[最新版的flask代码]
如果想要在正式发行之前使用最新的Flask开发版本,可以使用如下命令从主分支安装或者更新代码:
$pip install -U https://github.com/pallets/flask/archive/master.tar.gz
四.最简单的flask应用
创建一个hello_world.py的文件:
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "hello world!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True) # 运行 python hello_world.py # 使用以下url访问 可以得到打印结果 # http://127.0.0.1:5000/
代码分析:
# 导入Flask类 from flask import Flask """ import_name Flask程序所在的包(模块),传 __name__ 就可以 其可以决定 Flask 在访问静态文件时查找的路径 static_path 静态文件访问路径(不推荐使用,使用 static_url_path 代替) static_url_path 静态文件访问路径,可以不传,默认为:/ + static_folder static_folder 静态文件存储的文件夹,可以不传,默认为 static template_folder 模板文件存储的文件夹,可以不传,默认为 templates """ app = Flask(__name__) # 加载项目配置 # 配置类 class Config(object): DEBUG = True app.config.from_object( Config ) # 指定服务器IP和端口 app.run(host="0.0.0.0", port=5000)
访问的结果:
最简单应用的解释:
1.首先我们导入了Flask类。该类的实例将会成为我们的WSGI应用。
2.接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用一个单一模块(就像本例),那么应当使用__name__,因为名称会根据这个模块是按应用方式使用还是作为一个模块导入而发生变化(可能是‘__main__’,也可能是实际导入的名称)。这个参数是必需的,这样Flask才能知道在哪里可以找到模板和静态文件等东西。
3.然后我们使用route()装饰器来告诉Flask触发函数的URL。
4.函数名称被用于生成相关联的URL。函数最后返回需要在用户浏览器中显示的信息。
再写一个简单的练习Index Page:
代码如下:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "hsz" from flask import Flask app = Flask(__name__) @app.route("/index") def index(): return "Index Page!" if __name__ == "__main__": app.run(host='127.0.0.1', port=5000)
#运行后使用下面url访问
# http://127.0.0.1:5000/index