1. 程式人生 > 程式設計 >在flask中使用python-dotenv+flask-cli自定義命令(推薦)

在flask中使用python-dotenv+flask-cli自定義命令(推薦)

最近在重構flask 專案的時候發現專案的環境變數異常的混亂,非常不便於管理。而且,更重要的事情是我需要通過自定義命令來執行devlopment 和production 兩種專案環境。

自定義命令工具——flask-cli

在Flask 1.0+ 中已經支援了flask-cli,在翻閱了flask-cli文件之後,發現文件中提供的自定義命令的方法約束還是有點多,而且介紹的也不是特別詳細。後來,通過檢視flask-cli的原始碼發現flask-cli是基於Click開發的。

Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It's the “Command Line Interface Creation Kit”. It's highly configurable but comes with sensible defaults out of the box.

Click是一個可以使用簡潔程式碼和組合方法來建立漂亮的命令列命令的Python包。它還是一個高度可配置的,具有合理的預設設定的命令列工具建立工具包。

管理環境變數——python-dotenv

在使用flask-cli的時候,為了不需要每次都在flask run 之前都引入環境變數。官方文件中提了python-dotenv ,需要在專案中建立.env 和.flaskenv 兩個檔案。

命令列設定的變數會過載.env 中的變數, .env 中的變數會過載 .flaskenv 中的變數。.flaskenv 應當用於公共變數,如FLASK_APP 而.env 則應用用於私有變數,並且不提交到儲存庫。

在使用python-dotenv 之前還需要通過pip 去安裝依賴包(我這裡使用的pipenv ):

pipenv install python-dotenv

在.env 檔案中一般寫一些私有變數或者是涉及到隱私的變數,即使不上傳到git 上也不影響程式執行的這種。

下面以.flaskenv 中的幾個變數為例:

# .flaskenv
FLASK_APP = "app"
FLASK_ENV = "development"
FLASK_RUN_HOST = '0.0.0.0'
FLASK_RUN_PORT = '5000'

讀取環境變數

這裡介紹如何在專案讀取變數的方法:

import os
from dotenv import load_dotenv
# 載入環境變數檔案,dotenv_path預設值為.env,override是表示是否可以過載,預設值為False
load_dotenv(dotenv_path='.flaskenv',override=True)
# 讀取環境變數 FLASK_ENV,通過os.getenv()方法中引入欄位名稱來讀取
env = os.getenv("FLASK_ENV")
print(env)

自定義命令

這裡我的專案的入口檔案為app.py

# app.py
import click
import os
from os.path import dirname,join
from dotenv import load_dotenv
# 載入變數檔案
load_dotenv(dotenv_path='.flaskenv')

'''
下面這一段程式碼是根據在命令列中傳入的dev的值來執行不同的命令,從而達到一個命令區分開發環境和生產環境
'''
@click.command()
@click.option('--dev',default=os.getenv("FLASK_ENV"),help='environment variable')
def runserver(dev):
 os.system("FLASK_ENV=%s flask run" % (dev))

if __name__ == '__main__':
 runserver()

執行程式碼:

# 開發環境
python app.py
或者
python app.py --dev=development
# 生產環境
python app.py --dev=production

目前,第一階段就做了這麼多,其中還有很多不足之處,希望大家幫忙提出點意見,後續我有更多的做法,也會第一時間更新這些內容。

總結

以上所述是小編給大家介紹的在flask中使用python-dotenv+flask-cli自定義命令,希望對大家有所幫助!