Flask項目的配置信息

1.安裝pipenv並建立虛擬環境

windows:
pip install pipenv

Linux或macOS:
sudo pip install pipenvcss

若是有多個版本的python注意是安裝到哪一個python上,查看使用pip仍是pip3。python

檢查pipenv是否安裝和版本號git

pipenv --versionshell

建立虛擬環境

先在項目跟目錄下建立.venv文件夾,這樣使得虛擬環境安裝在本項目下。默認狀況下pipenv會統一管理虛擬環境,在windows中虛擬環境文件夾在C:\Users\Administrator.virtualenvs\目錄下,在Linux或macOS中會在~/.local/share/virtualenvs目錄下建立。命令行在建立完成會提示虛擬環境文件夾位置。數據庫

pipenv installflask

若是目錄下沒有pipfile和pipfile.lock文件,則會建立這兩個文件,若是有,會安裝pipfile裏列出的依賴包。windows

激活虛擬環境

pipenv shell服務器

除了顯示地激活虛擬環境,pipenv還提供了一個pipenv run命令,這個名利容許在不顯示激活虛擬環境便可在當前目錄的虛擬環境中執行命令,例如:多線程

pipenv run python hello.pyapp

pipenv install只要在當前目錄,不管激不激活虛擬環境,安裝包時都會裝在虛擬環境中。

pipfile和pipfile.lock用於管理依賴,替代requirements.txt文件,優點是無需手動維護這兩個文件,當使用pipenv安裝/刪除/更新依賴包時,這兩個文件會自動更新。requirements.txt須要手動維護,在文件中指出了包和對應版本號,可是這並不能保證不一樣計算機安裝的就是同一個包,可是pipfile.lock將包的具體版本進行hash,使用這個hash安裝的包就會是相同版本的相同包,不會出現相同版本,可是包不同的狀況。

另外pipfile文件內還區分普通依賴包和開發專屬依賴包,普通依賴包是開發環境和生產環境都須要用到的,開發專屬依賴包則只在開發環境使用,生產環境用不到。安裝開發環境依賴包命令在普通安裝命令後面加--dev:

pipenv install watchdog --dev

查看依賴列表

pipenv graph
或在虛擬環境中使用
pip list

前者展現的內容會更詳細些,會寫出須要的依賴包須要高於哪一個版本,而當前的包版本號是多少。

升級命令

pipenv update flask

2.安裝並運行flask

安裝flask

pipenv install flask

安裝flask時還同時安裝了5個依賴包:

  • Jinja2(模板渲染引擎)
  • MarkupSafe(HTML字符轉義工具,escape)
  • Werkzeug(WSGI工具集,處理請求與相應,內置WSGI開發服務器、調試器和重載器)
  • click(命令行工具)
  • itsdangerous(提供各類加密簽名命令)

在項目根目錄下建立app.py,名字能夠隨便取,可是非app.py須要設置環境變量FLASK_APP=文件名

啓動開發服務器

flask經過依賴包Click內置了一個CLI(Command Line Interface, 命令行交互界面)系統。當安裝flask後,會自動添加一個flask命令腳本。能夠經過flask命令執行內置命令、擴展提供的命令或自定義的命令。前提是須要提早激活虛擬環境,若是沒有激活須要在前面添加pipenv run例如pipenv run flask run.

能夠經過flask --help查看全部可用的命令

Usage: flask [OPTIONS] COMMAND [ARGS]...
命令:
flask assets 關於壓縮css/js等文件的命令,還沒用過,會列出如flask --help的命令介紹
flask db     執行數據庫遷移
flask routes 顯示路由命令
flask run     運行開發服務器(development),這個用的最多
flask shell   在虛擬環境下運行一個python shell。

flask run命令運行的開發服務器默認會監聽127.0.0.1:5000/,按Ctrl + C退出。並開啓多線程支持。若是執行flask run命令後顯示命令未找到提示(command not found)或其餘錯誤,能夠嘗試使用python -m flask run命令。

自動發現程序實例

運行flask run命令之因此不須要提供程序實例(app=Flask(name))所在模塊(app.py)的位置,是由於flask會自動胎側程序實例,自動探測規則:

  • 從運行flask run的當前目錄尋找app.py和wsgi.py模塊,並從中尋找名爲app或application的程序實例。
  • 從環境變量FLASK_APP對應的值尋找app或application的程序實例。

程序主模塊命名爲app.py,flask run能自動在其尋找程序實例,若是不是app.py,則必須設置環境變量FLASK_APP,將包含程序實例的模塊名賦值給這個變量。只有這樣,flask run才能正確扎到這個模塊。

Linux 或 macOS命令:

export FLASK_APP=hello #hello是包含程序實例的模塊名hello.py

windows命令:

set FLASK_APP=hello

管理環境變量

除了FLASK_APP以外,後面還會有其餘的環境變量要設置,在命令行設置的缺點就是關掉命令行後環境變量就消失了,再運行flask時還須要從新設置,因此人們爲了避免頻繁設置環境變量,決定用配置文件來設置,這就涉及了一個依賴包python-dotenv,用這個依賴來管理環境變量,安裝後在項目跟目錄下建立.env和.flaskenv兩個文件。

.flaskenv用來存儲和flask相關的公開環境變量,好比FLASK_APP、FLASK_ENV等,.env用來存儲包含敏感信息的環境變量,好比用來配置email服務器的帳戶名密碼。內容格式使用鍵值對形式如FLASK_APP=hello,不須要引號,#用做註釋。.env文件都是私有信息,不要上傳到遠程倉庫,記得把它的名稱添加到.gitignore文件中,會告訴git忽略這個文件。

優先級:手動在命令行設置的環境變量>.env中設置的環境變量>.flaskenv中設置的環境變量。

flask run命令擴展

flask run命令後面能夠帶主機和端口

flask run --host=0.0.0.0   #這會讓服務器監聽全部外部請求
flask run --port=8000     #監聽8000端口

主機和端口也能夠用環境變量來設置FLASK_RUN_HOST=0.0.0.0和FLASK_RUN_PORT=8000。

設置運行環境

環境變量FLASK_ENV能夠設置運行環境,development爲開發環境,production爲生產環境,flask run運行的是開發環境,若是設置爲production會有警告,可是能夠運行。通常這個環境變量在.flaskenv文件中設置

在開發環境中,調試模式(Debug Mode)將開啓,運行flask run程序會自動激活Werkzeug內置的調試器和重載器。

注意在生產環境絕對不能開啓調試模式。

調試器:當程序出錯時,會在網頁上看到詳細的錯誤追蹤,有時候內容實在太多,把頂部的報錯信息複製,經過Ctrl + F查找,能夠迅速肯定到報錯位置。

調試器容許在網頁上運行python代碼。單機錯誤信息右側的命令行圖標,會彈出窗口要求輸入PIN碼,也就是在啓動服務器在命令行窗口打印出的調試器PIN碼。輸入PIN碼後,能夠單擊錯誤堆棧的某個節點右側的命令行節面圖標,這回打開一個包含代碼執行上下文信息的python shell,能夠利用它來進行調試。

重載器:每次修改代碼後,會自動重啓服務器便可看到修改的變化。HTML文件修改不會重啓服務器,直接刷新網頁就能夠了。

默認使用的是Werkzeug內置的stat重載器,缺點是耗電嚴重,準確性通常。改用python庫中的Watchdog,由於只有開發環境使用,因此安裝時在後面添加--dev.會在pipfile文件的dev-packages部分顯示開發依賴包。

pipenv install watchdog --dev

3.python shell

在flask項目中能夠使用flask shell命令打開python shell,退出能夠執行exit()或quit(),windows中能夠使用Ctrl+Z並按Enter退出,Linux和macOS則按Ctrl+D直接退回。

使用flask shell命令打開的python shell自動包含程序上下文,而且已經導入了app實例:

>>> app
<Flask 'hello'>
>>> app.name
'hello'

我試了下用python打開python shell,而後直接輸入app會報錯

(helloflask) D:\GitHub\flask\helloflask\demos\hello>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> app
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'app' is not defined

須要提早導入app實例才行

>>> from hello import app
>>> app
<Flask 'hello'>
>>> app.name
'hello'

上下文(context)能夠理解爲環境。爲了正常運行,一些相關操做的狀態和數據須要被臨時保存下來,這些狀態和數據被統稱爲上下文,在flask中,上下文有兩種,分爲程序上下文和請求上下文。後面記得單獨整一篇上下文的筆記。

相關文章
相關標籤/搜索