1. 程式人生 > >Flask從入門到精通之flask擴展

Flask從入門到精通之flask擴展

dev 入門到精通 上下 for 開發者 cer -s arguments pip

Flask被設計成可擴展形式,因此並沒有提供一些重要的功能,比如數據庫和用戶認證,所以開發者可以自由選擇最適合程序的包,或者按需求自行開發。社區成員開發了大量不同用途的擴展,如果這還不能滿足需求,你還可使用所有Python 標準包或代碼庫。為了讓你知道如何把擴展整合到程序中,接下來我們將在hello.py 中添加一個擴展,使用命令行參數增強程序的功能。

使用Flask-Script支持命令行選項

Flask 的開發Web 服務器支持很多啟動設置選項,但只能在腳本中作為參數傳給app.run()函數。這種方式並不十分方便,傳遞設置選項的理想方式是使用命令行參數。

Flask-Script 是一個Flask 擴展,為Flask 程序添加了一個命令行解析器。Flask-Script 自帶了一組常用選項,而且還支持自定義命令

Flask-Script 擴展使用pip 安裝:

pip install flask_script

下面的例子顯示了把命令行解析功能添加到hello.py 程序中時需要修改的地方

from flask import Flask
from flask.ext.script import Manager
app = Flask(__name__)
manager = Manager(app)

@app.route(‘/‘)
def index():
    return ‘<h1>hello,flask</h1>‘

if __name__ == ‘__main__‘:
    manager.run()

專為Flask 開發的擴展都暴漏在flask.ext 命名空間下。Flask-Script 輸出了一個名為Manager 的類,可從flask.ext.script 中引入。這個擴展的初始化方法也適用於其他很多擴展:把程序實例作為參數傳給構造函數,初始化主類的實例。創建的對象可以在各個擴展中使用。在這裏,服務器由manager.run() 啟動,啟動後就能解析命令行了

運行python hello.py,會出現一下消息

usage: hello.py [-?] {shell,runserver} ...

positional arguments:
  {shell,runserver}
    shell            在flask應用上下文中運行python shell
    runserver       運行flask開發服務器app.run()

optional arguments:
  -?, --help         顯示幫助信息並退出

顧名思義,runserver 命令用來啟動Web 服務器。運行python hello.py runserver 將以調試模式啟動Web 服務器,但是我們還有很多選項可用:

usage: hello.py runserver [-?] [-h HOST] [-p PORT] [--threaded]
                          [--processes PROCESSES] [--passthrough-errors] [-d]
                          [-D] [-r] [-R] [--ssl-crt SSL_CRT]
                          [--ssl-key SSL_KEY]

Runs the Flask development server i.e. app.run()

optional arguments:
  -?, --help            show this help message and exit
  -h HOST, --host HOST
  -p PORT, --port PORT
  --threaded
  --processes PROCESSES
  --passthrough-errors
  -d, --debug           enable the Werkzeug debugger (DO NOT use in production
                        code)
  -D, --no-debug        disable the Werkzeug debugger
  -r, --reload          monitor Python files for changes (not 100% safe for
                        production use)
  -R, --no-reload       do not monitor Python files for changes
  --ssl-crt SSL_CRT     Path to ssl certificate
  --ssl-key SSL_KEY     Path to ssl key

--host 參數是個很有用的選項,它告訴Web 服務器在哪個網絡接口上監聽來自客戶端的連接。默認情況下,Flask 開發Web 服務器監聽localhost 上的連接,所以只接受來自服務器所在計算機發起的連接

Flask從入門到精通之flask擴展