1. 程式人生 > >Flask系列----快速入門實戰解析(上篇)

Flask系列----快速入門實戰解析(上篇)

Flask入門


Flask並不是小白就能隨意入門的,需要基礎知識。例如:

  • Python基礎
  • 網路基礎
  • Jinja2模板引擎和Werkzeug WSGI套件
  • 工具的使用(PyCharm)

所以,小白請謙虛,請Google不會的專業名稱!我就是這樣過來的……


Flask概述


摘要:Flask是一個微型框架,核心很小。但是,藉助於Python的擴充套件性,Flask的功能很強大。

Flask有兩個重要的依賴,搞不懂這些,後面的學習會相當吃力【大概率學不會】,戳連結去學吧。如下:

(1)路由、除錯和Web伺服器閘道器介面(WSGI,Web Server Gateway Interface )子系統,由

Werkzeug提供。About Werkzeug:

In this tutorial, we will together create a simple URL shortener service with Werkzeug. Please keep in mind that Werkzeug is not a framework, it’s a library with utilities to create your own framework or application and as such is very flexible. The approach we use here is just one of many you can use.

Werkzeug is a utility library for WSGI. WSGI itself is a protocol or convention that ensures that your web application can speak with the webserver and more importantly that web applications work nicely together.

(2)模板系統,用Jinja2提供。About Jianja2:

Jinja2 is a modern and designer-friendly templating language for Python, modelled after Django’s templates. It is fast, widely used and secure with the optional sandboxed template execution environment:

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
  <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

基礎資料就羅列到這,動手做點Demo吧。


新建專案


執行下面的指令碼,讓Flask飛起來:

from flask import Flask

myApplication = Flask(__name__)

@myApplication.route(“/”)   # 靜態路由
def index():
    return “Hello World!”

@myApplication.route(“/username/<name>”) # 動態路由
def user(name):
    return “Hello , %s ! ”%name

if __name__ = “__main__”:
    myApplication.run(debug = True)


解析


初始化

所有的Flask程式都必須建立一個程式例項,也就是Flask類的物件(小白,請戳傳送門。)。Flask使用WSGI的協議,將客戶端的所用請求都轉交給程式例項處理。
簡單的建立過程:

import flask import Flask

myApplication = Flask(__name__)

name是建構函式的引數,這是程式主模組或包的名字。Flask用這個引數決定程式的根目錄,方便找到程式執行所需的其他資原始檔。

還有複雜的初始化過程,沒有寫到。


路由和檢視函式

Web瀏覽器(也就是客戶端)將請求傳送給Web伺服器,Web伺服器將請求傳送給Flask的物件。眾多的物件,需要知道每個URL請求所需執行哪些程式碼,此時,就需要:保持一個URL—>Flask物件的對映關係。這裡URL與函式之間關係的程式就叫路由。用myApplication.route修飾器來定義。比如:

@myApplication.route("/")    # 靜態路由 
def index():
    return “Hello World!”

index(),學名就叫檢視函式,當訪問“/”目錄時,就會返回“hello world!”。

說說動態路由:比如URL的內容有些是固定不變的,有些是可變的。例如:http://127.0.0.1/username/LiHua , http://127.0.0.1/username/XiaoMing等。只需要在route修飾器中使用特殊語法即可。例如:

@myApplication.route(“/username/<name>”) # 動態路由
def user(name):
    return “Hello , %s ! ”%name

URL會想匹配靜態部分,在吧動態的部分作為檢視函式的引數傳入。這裡的預設是字串格式,也可以是int、float、path型別。例如想動態傳入ID的時候可以是:@myApplication.route(“/userid/”)

其中,path型別也是字串,但不把斜線視作分隔符,而將其當作動態片段的一部分。也就是對“/”進行轉義的意思。


啟動伺服器

程式例項用run()方法來啟動Flask整合的開發Web伺服器
例如:

if __name__ = “__main__”:
    myApplication.run(debug = True)

執行這個指令碼時,才啟動開發Web伺服器。不容許其他指令碼對其引用,如果你非要引用,myApplication.run()將不會執行。

Ctrl + C 鍵終止程式。

debug = True ,開啟除錯模式。

PS:Flask提供的Web伺服器不適合在生成環境中使用,可以嘗試Heroku

Flask預設埠是5000,瀏覽器輸入:http://127.0.0.1:5000/
也可以輸入:http://127.0.0.1:5000/username/谷震平


結語


班門弄斧,我也不好意思,歡迎交流指正!
另外,也歡迎關注我的微信公眾號“谷震平的專欄”,將推送原創文章。

谷震平的專欄,微信公眾號


參考資料


Flask官方文件:http://dormousehole.readthedocs.org/en/latest/