1. 程式人生 > 其它 >3 第一個flask程式

3 第一個flask程式

1 pycharm新建專案

 

 

 

 

注意 如果找不到虛擬環境路徑可以參考虛擬環境其他命令

lsvirtualenv         # 列出所有的虛擬環境
workon flaskenv  # 切換到指定的虛擬環境
cdvirtualenv         # 切換到指定的虛擬環境路徑 該目錄就是我們所要的路徑

2 第一個flask程式

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()


 

 

3 程式碼拆分為三部分

第一部分

from flask import Flask

app = Flask(__name__)

匯入我們安裝好的flask包,通過flask包匯入Flask類,Flask類即為Flask的核心,例項化這個Flask類的到一個例項化物件app。

__name__這個特殊的引數:Python會根據所處的模組來賦予__name__變數相應的值,對於我們的程式來說(app.py),這個值為app。

第二部分

@app.route('/')
def hello_world():
    return 'Hello World!'

如果有過對其他web框架的瞭解,相信看見這個已經看出了一些門道。沒錯這個 @app.route('/')

就是用來匹配url的,在我們的flask裡面是以裝飾器來實現的,裝飾器引用的也是我們上面例項化核心類出來的物件。

那麼如果路由下面跟的函式什麼呢 ?沒錯就是我們的檢視函式,如果匹配到了路由就會觸發我們的檢視函式執行,並且return回具體的資料給前端或者移動端。

不是很理解沒關係,我們先大概有個印象,會在接下來的章節詳細講解路由以及檢視函式的使用

第三部分

if __name__ == '__main__':
    app.run()

先不管邏輯判斷,先看 app.run(), app.run()原始碼如下去閱讀原始碼不難發現,在內部定義了預設的 ip+埠為127.0.0.1:5000,並且呼叫了werkzeug.serving為我們建立了一個開發伺服器(由依賴包Werkzeug提供),對套接字有一定了解的朋友,其內部就是做了一個迴圈監聽的功能以便互動.

關鍵詞:app.run()實現了flask程式在開發環境下執行起來,並且預設ip和埠是127.0.0.1:5000

def run(self, host=None, port=None, debug=None,
            load_dotenv=True, **options):
       
    	 ...
        
         _host ='127.0.0.1'
         _port = 5000
        
         ...
            
         host = host or sn_host or _host
         port = int(port or sn_port or _port)
            
         ...
    
         from werkzeug.serving import run_simple

            try:
                run_simple(host, port, self, **options)
            finally:
                # reset the first request information if the development server
                # reset normally.  This makes it possible to restart the server
                # without reloader and that stuff from an interactive shell.
                self._got_first_request = False

在第三部分中還有一個if判斷,那麼這個判斷的作用是什麼呢,有python基礎的朋友對這個寫法大概不陌生,if邏輯判斷時只有本檔案為執行檔案的時候才會執行,為什麼要這麼設計呢?因為在開發環境我們是以app.py作為執行檔案,但是在真實的生產環境下 ,此檔案會作為被呼叫的檔案,並且真實的生成環境不會用到app.run()做監聽分配, 原因是效能太低了,

關鍵詞:保證了app.run()只用於開發環境,並且不影響真實的生產環境。

三部分串講

匯入Flask的核心類例項化物件app,然後app作為裝飾器使用匹配url分發給下面的檢視函式,然後執行該頁面會觸發app呼叫run()方法執行起來整個專案。