Flask介紹
Flask是一個(gè)使用 Python 編寫的輕量級(jí) Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2。
Flask也被成為『微框架』。因?yàn)樗褂煤?jiǎn)單的核心坠非,用 extension 增加其他功能。Flask沒(méi)有默認(rèn)使用的數(shù)據(jù)庫(kù)果正、窗體驗(yàn)證工具炎码。
它的官方地址:http://flask.pocoo.org
簡(jiǎn)單的Hello world
在一個(gè)python文件hello.py中鍵入以下代碼:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
執(zhí)行命令
python hello.py
運(yùn)行結(jié)果
在瀏覽器訪問(wèn) http://127.0.0.1:5000
顯示如下
more
路由配置
flask的路由是由route()裝飾器把一個(gè)函數(shù)綁定到一個(gè)URL實(shí)現(xiàn)的。
下面是一些基本的例子:
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello World'
當(dāng)然一個(gè)web框架的路由肯定不可能只做到這些簡(jiǎn)單固定的路由舱卡,flask自己可以定義一些規(guī)則辅肾。
變量規(guī)則
通過(guò)把 URL 的一部分標(biāo)記為 <variable_name> 就可以在 URL 中添加變量。標(biāo)記的 部分會(huì)作為關(guān)鍵字參數(shù)傳遞給函數(shù)轮锥。通過(guò)使用 <converter:variable_name> 矫钓,可以 選擇性的加上一個(gè)轉(zhuǎn)換器,為變量指定規(guī)則舍杜。請(qǐng)看下面的例子:
@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
現(xiàn)有的轉(zhuǎn)換器有:
int | float | path |
---|---|---|
接受整數(shù) | 接受浮點(diǎn)數(shù) | 和缺省情況相同新娜,但也接受斜杠 |
簡(jiǎn)單介紹到這里,更多規(guī)則可以看官方文檔既绩,地址是 http://werkzeug.pocoo.org/docs/0.11/routing/
渲染模板
在Python內(nèi)部生成HTML不好玩概龄,且相當(dāng)笨拙。因?yàn)槟惚仨氉约贺?fù)責(zé)HTML轉(zhuǎn)義饲握,以確保應(yīng)用的安全私杜。因此蚕键, Flask自動(dòng)為你配置的 Jinja2 模板引擎,就像Java語(yǔ)言里最簡(jiǎn)單的模板JSP一樣衰粹。
Flask使用render_template()方法渲染模板锣光,我們要做的只要提供模板名稱和需要的參數(shù)或者說(shuō)變量就行了。
舉個(gè)栗子:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask一般會(huì)在templates文件夾內(nèi)尋找名稱對(duì)應(yīng)的模板文件铝耻。
接下來(lái)就要看看Jinja2模板的威力了誊爹,就像使用Java語(yǔ)言或者PHP里的html模板標(biāo)簽語(yǔ)言。
舉個(gè)簡(jiǎn)單使用Jinja2模板的栗子:(hello.html)
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
是不是很像PHP瓢捉?哈哈频丘,以前用過(guò)PHP或者JSTL的,這模板已經(jīng)是簡(jiǎn)單得不能再簡(jiǎn)單泡态。
在模板內(nèi)部你也可以訪問(wèn) request 搂漠、session 和 g 對(duì)象,以及 get_flashed_messages() 函數(shù)兽赁。
這幾個(gè)對(duì)象和函數(shù)都可以在官方API文檔中查找得到状答,這里不細(xì)說(shuō)冷守。
總結(jié)
Flask真的是一個(gè)超快速開(kāi)發(fā)web的框架刀崖,配合bootstrap使用快到?jīng)]朋友。Flask官方文檔中的quick start已經(jīng)能覆蓋到我的功能需求拍摇,非常容易學(xué)亮钦。我經(jīng)常用它來(lái)做一些數(shù)據(jù)項(xiàng)目的前端展示或者一些數(shù)據(jù)檢索展示,但如果要做一個(gè)大型網(wǎng)站的話充活,這個(gè)框架恐怕不太適合蜂莉,目前我還沒(méi)看到它的一些關(guān)于并發(fā)的支持。做大型網(wǎng)站我還是會(huì)選擇傳統(tǒng)的Java語(yǔ)言混卵,因?yàn)楸容^容易找到人手映穗。