Flask介绍
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。
Flask也被成为『微框架』。因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
它的官方地址:http://flask.pocoo.org
简单的Hello world
在一个python文件hello.py中键入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
执行命令
python hello.py
运行结果
在浏览器访问 http://127.0.0.1:5000
显示如下
more
路由配置
flask的路由是由route()装饰器把一个函数绑定到一个URL实现的。
下面是一些基本的例子:
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello World'
当然一个web框架的路由肯定不可能只做到这些简单固定的路由,flask自己可以定义一些规则。
变量规则
通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的 部分会作为关键字参数传递给函数。通过使用 <converter:variable_name> ,可以 选择性的加上一个转换器,为变量指定规则。请看下面的例子:
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
现有的转换器有:
int | float | path |
---|---|---|
接受整数 | 接受浮点数 | 和缺省情况相同,但也接受斜杠 |
简单介绍到这里,更多规则可以看官方文档,地址是 http://werkzeug.pocoo.org/docs/0.11/routing/
渲染模板
在Python内部生成HTML不好玩,且相当笨拙。因为你必须自己负责HTML转义,以确保应用的安全。因此, Flask自动为你配置的 Jinja2 模板引擎,就像Java语言里最简单的模板JSP一样。
Flask使用render_template()方法渲染模板,我们要做的只要提供模板名称和需要的参数或者说变量就行了。
举个栗子:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask一般会在templates文件夹内寻找名称对应的模板文件。
接下来就要看看Jinja2模板的威力了,就像使用Java语言或者PHP里的html模板标签语言。
举个简单使用Jinja2模板的栗子:(hello.html)
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
是不是很像PHP?哈哈,以前用过PHP或者JSTL的,这模板已经是简单得不能再简单。
在模板内部你也可以访问 request 、session 和 g 对象,以及 get_flashed_messages() 函数。
这几个对象和函数都可以在官方API文档中查找得到,这里不细说。
总结
Flask真的是一个超快速开发web的框架,配合bootstrap使用快到没朋友。Flask官方文档中的quick start已经能覆盖到我的功能需求,非常容易学。我经常用它来做一些数据项目的前端展示或者一些数据检索展示,但如果要做一个大型网站的话,这个框架恐怕不太适合,目前我还没看到它的一些关于并发的支持。做大型网站我还是会选择传统的Java语言,因为比较容易找到人手。