深入解析 Flask 命令行工具與 flask run命令的使用

Flask 是一個輕量級的 Python Web 應用框架,其內置的命令行工具(CLI)基于 Click 庫,提供了方便的命令行接口,用于管理和運行 Flask 應用程序。本文將詳細介紹 Flask 命令行工具的功能,以及如何使用 flask run 命令啟動應用程序。


一、Flask 命令行接口

1. flask 命令行工具簡介

Flask 提供的命令行接口(CLI)是開發者與 Flask 應用交互的重要工具,基于 Click 庫,具有簡單、可擴展的特性。

主要功能:
  • 運行開發服務器:使用 flask run 命令啟動應用的開發服務器,方便在本地進行開發和測試。
  • 交互式 Shell:使用 flask shell 進入應用的交互式 Python Shell 環境,便于調試和測試代碼。
  • 數據庫遷移:結合 Flask-Migrate 等擴展,使用 flask db 命令執行數據庫遷移操作。
  • 自定義命令:開發者可以添加自定義命令,擴展 CLI 的功能,滿足特定的需求。

二、flask run 命令

1. 功能概述

flask run 命令用于啟動 Flask 內置的開發服務器,方便開發者在本地進行開發和測試。

  • 默認情況下:

    • 服務器會在本地主機(127.0.0.1)的端口 5000 上運行。

2. 命令用法

flask run [OPTIONS]
常用選項:
  • --host:指定服務器監聽的主機地址(默認 127.0.0.1)。
  • --port:指定服務器監聽的端口號(默認 5000)。
  • --debug:啟用調試模式,等價于設置環境變量 FLASK_DEBUG=1
示例:
flask run --host=0.0.0.0 --port=8000 --debug

上述命令將服務器綁定到所有可用的網絡接口,監聽端口 8000,并啟用調試模式。


三、如何識別應用

1. 環境變量 FLASK_APP 的作用

Flask 需要知道哪個 Python 模塊或包包含應用實例,以便啟動服務器。

  • Flask 通過環境變量 FLASK_APP 來識別應用程序的入口
  • 如果未設置 FLASK_APP,運行 flask 命令時會出現錯誤提示

2. 設置 FLASK_APP 環境變量

在命令行中設置
  • Linux/macOS:

    export FLASK_APP=app.py
    
  • Windows CMD:

    set FLASK_APP=app.py
    
  • Windows PowerShell:

    $env:FLASK_APP = "app.py"
    

3. 指定應用實例的方式

模塊或腳本名稱

如果您的應用位于 app.py 文件中,包含 Flask 實例 app

# app.pyfrom flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'
  • 設置 FLASK_APP

    export FLASK_APP=app.py
    
包名稱

如果您的應用是一個包(帶有 __init__.py),例如目錄結構:

myapp/__init__.py
  • 設置 FLASK_APP

    export FLASK_APP=myapp
    
應用工廠

如果您使用了應用工廠模式,需要在 FLASK_APP 中指定創建應用實例的函數。

# app.pyfrom flask import Flaskdef create_app():app = Flask(__name__)@app.route('/')def hello():return 'Hello from factory!'return app
  • 設置 FLASK_APP

    export FLASK_APP='app:create_app()'
    
  • 注意:

    • 使用 模塊:函數名稱() 的形式。
    • 如果函數需要參數,可以在括號內添加。

4. Flask 如何找到應用實例

  • 默認情況下,Flask 會在指定的模塊或包中尋找名為 appapplication 的變量。

  • 如果您的應用實例名稱不同,需要在 FLASK_APP 中指定。

    • 例如,您的應用實例名為 my_app

      # app.pyfrom flask import Flaskmy_app = Flask(__name__)@my_app.route('/')
      def hello():return 'Hello, custom app instance!'
      
      • 設置 FLASK_APP

        export FLASK_APP='app:my_app'
        

四、完整示例:啟動 Flask 應用

1. 編寫應用程序

  • 文件:app.py

    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def index():return 'Welcome to my Flask app!'
    

2. 設置環境變量

  • Linux/macOS

    export FLASK_APP=app.py
    
  • Windows CMD

    set FLASK_APP=app.py
    
  • Windows PowerShell

    $env:FLASK_APP = "app.py"
    

3. 運行應用

flask run
  • 輸出

     * Serving Flask app 'app.py'* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

4. 訪問應用

  • 在瀏覽器中打開 http://127.0.0.1:5000/

  • 頁面顯示:

    Welcome to my Flask app!
    

五、環境變量的設置方式

1. 使用 .flaskenv 文件

避免每次都在命令行中設置環境變量

  • 創建文件:在項目根目錄下創建 .flaskenv 文件。

  • 內容示例

    FLASK_APP=app.py
    FLASK_ENV=development
    
  • 自動加載環境變量

    • 需要安裝 python-dotenv 包。

      pip install python-dotenv
      
    • Flask 會自動加載 .flaskenv.env 文件中的環境變量。

2. 在代碼中設置環境變量

  • 不推薦在生產環境中使用,但在開發中可以簡化步驟。

    # app.pyimport os
    from flask import Flaskos.environ['FLASK_APP'] = 'app.py'app = Flask(__name__)
    

六、應用工廠模式的詳細解釋

1. 什么是應用工廠模式?

  • 定義

    • 應用工廠是一種設計模式,通過一個函數(工廠)創建并返回應用實例,而不是在全局作用域中創建。
  • 優點

    • 延遲創建:只有在需要時才創建應用實例。
    • 配置靈活:可以在創建應用時傳入配置參數。
    • 支持多應用:可以根據需要創建多個應用實例。

2. 示例:

# factory_app.pyfrom flask import Flaskdef create_app(config_name):app = Flask(__name__)# 根據配置名稱加載不同的配置if config_name == 'development':app.config.from_object('config.DevelopmentConfig')elif config_name == 'production':app.config.from_object('config.ProductionConfig')# 注冊藍圖、初始化擴展等# ...@app.route('/')def home():return f'Running in {config_name} mode.'return app
  • 設置環境變量并運行

    export FLASK_APP='factory_app:create_app("development")'
    flask run
    
    • 說明

      • FLASK_APP 指定了調用 create_app("development") 函數,返回應用實例。

七、總結

  • flask 命令行工具是與 Flask 應用交互的重要接口,用于啟動服務器、管理數據庫、進入交互式 Shell 等。

  • flask run 命令用于啟動開發服務器,默認在本地主機的 5000 端口上運行。

  • Flask 通過環境變量 FLASK_APP 來識別應用程序的入口,需要確保正確設置該變量,指向包含應用實例的模塊或包。

  • 應用實例默認名稱為 appapplication,如果使用了其他名稱或工廠函數,需要在 FLASK_APP 中明確指定。

  • 使用 .flaskenv 文件可以簡化環境變量的設置,并保持配置的統一性。

  • 應用工廠模式為應用的可擴展性和配置管理提供了便利,適用于大型或復雜的應用程序。


八、附加內容

1. 常見問題

1. 運行 flask run 時出現錯誤:

Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable.
  • 解決方法

    • 確保已經設置了 FLASK_APP 環境變量。
    • 檢查 FLASK_APP 的值是否正確指向應用實例。

2. 更改代碼后,服務器未自動重載:

  • 原因

    • 未啟用調試模式。
  • 解決方法

    • 設置環境變量 FLASK_ENV=development,或使用 --debug 選項:

      flask run --debug
      

3. 在瀏覽器中訪問時,出現 404 錯誤:

  • 原因

    • 路由未正確定義,或訪問的 URL 不匹配。
  • 解決方法

    • 檢查應用代碼中路由的定義。
    • 確保訪問的 URL 與路由匹配。

2. 推薦的開發實踐

  • 使用虛擬環境

    • 創建隔離的 Python 環境,避免依賴沖突。

    • 示例

      python -m venv venv
      source venv/bin/activate
      
  • 安裝必要的依賴

    • 使用 requirements.txt 記錄項目依賴。

    • 安裝依賴

      pip install -r requirements.txt
      
  • 版本控制

    • 使用 Git 等版本控制系統管理代碼。
  • 配置管理

    • 使用不同的配置文件或環境變量管理開發、測試、生產環境的配置。
  • 日志記錄

    • 配置日志記錄,方便調試和問題追蹤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908027.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QFramework v1.0 Guide: 工具篇——ViewControllor, ActionKit時序動作執行系統,ResKit資源管理開發解決方案

目錄 一、QFramework.Toolkits簡介 二、View Controllor 1、作用 2、應用場景 3、示例 三、ActionKit時序動作執行系統 1. 用法 (1)延時回調 (2)序列執行 (3)幀延時 (4)條…

GLIDE論文閱讀筆記與DDPM(Diffusion model)的原理推導

Abstract 擴散模型(Diffusion model)最近被證明可以生成高質量的合成圖像,尤其是當它們與某種引導技術結合使用時,可以在生成結果的多樣性與保真度之間進行權衡。本文探討了在文本條件圖像生成任務中使用擴散模型,并比…

@Pushgateway 數據自動清理

文章目錄 Pushgateway 數據自動清理一、Pushgateway 數據清理的必要性二、自動清理方案方案1:使用帶TTL功能的Pushgateway分支版本方案2:使用Shell腳本定期清理方案3:結合Prometheus記錄規則自動清理 三、最佳實踐建議四、驗證與維護五、示例…

QML視圖組件ListView、TableView、GridView介紹

1 MVD模型 Model:模型,包含數據及其結構。View:視圖,用于顯示數據。Delegate:代理,規定數據在視圖中的顯示方式。2 ListView 以列表形式展示數據。2.1 屬性 model:設置或獲取列表視圖的數據模型delegate:定義了列表中每一項的外觀和行為currentIndex:獲取或設置當前選…

解決vscode打開一個單片機工程文件(IAR/keil MDK)因無法找到頭文件導致的結構體成員不自動補全問題。

最近一直在用vscode安裝c/c插件后編輯STM32標準庫(keil MDK)項目源文件,因為我感覺vscode在代碼編輯方面比keil MDK本身優秀太多。發現打開工程后,結構體變量的成員在輸入“.”后不自己彈出的問題,后來查找各方資料&am…

5分鐘申請edu郵箱【方案本周有效】

這篇文章主要展示的是成果。如果你是第1次看見我的內容,具體的步驟請翻看往期的兩篇作品。先看更正補全,再看下一個。 建議你邊看邊操作。 【更正補全】edu教育申請通過方案 本周 edu教育郵箱注冊可行方案 #edu郵箱 偉大無需多言 我已經驗證了四個了…

零知開源——STM32F407VET6驅動ILI9486 TFT顯示屏 實現Flappy Bird游戲教程

簡介 本教程使用STM32F407VET6零知增強板驅動3.5寸 ILI9486的TFT觸摸屏擴展板實現經典Flappy Bird游戲。通過觸摸屏控制小鳥跳躍,躲避障礙物柱體,挑戰最高分。項目涉及STM32底層驅動、圖形庫移植、觸摸控制和游戲邏輯設計。 目錄 簡介 一、硬件準備 二…

云臺式激光甲烷探測器:守護工業安全的“智慧之眼”

在石油化工、天然氣場站、城市燃氣管網等場景中,甲烷泄漏的早期監測是保障生產安全的核心防線。云臺式激光甲烷探測器憑借高精度、無接觸、智能化的技術優勢,成為工業安全監測領域的革新者。本文將深度解析其技術原理、核心功能及適用場景,助…

解決 Ubuntu 20.04 虛擬機中 catkin_make 編譯卡死問題

完整解決步驟 1. 禁用當前交換文件 sudo swapoff /swapfile 2. 刪除舊的交換文件 sudo rm /swapfile 3. 使用更可靠的創建方法 # 使用 dd 命令創建交換文件(更兼容但較慢) sudo dd if/dev/zero of/swapfile bs1M count4096# 或者使用 truncate 命令…

實驗設計與分析(第6版,Montgomery)第5章析因設計引導5.7節思考題5.7 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第5章析因設計引導5.7節思考題5.7 R語言解題。主要涉及方差分析&#xff0c;正態假設檢驗&#xff0c;殘差分析&#xff0c;交互作用圖&#xff0c;等值線圖。 dataframe <-data.frame…

linux變量的分類

文章目錄 bash中的引號linux變量的分類1.環境變量2.本地變量&#xff1a;3.局部變量4.內置變量5. 位置參數變量6. 特殊變量 變量的定義規則8.數組 bash中的引號 雙引號"" &#xff1a;會把引號的內容當成整體來看待&#xff0c;允許通過 符號引用其他變量值單引 號 …

邏輯回歸知識點

一、邏輯回歸概念 邏輯回歸(Logistic Regression)是一種廣泛應用于分類問題的統計方法&#xff0c;尤其適用于二分類問題。 注意: 盡管名稱中有"回歸"二字&#xff0c;但它實際上是一種分類算法。 解決二分類的問題。 API&#xff1a;sklearn.linear_model.Logis…

GCC內存占用統計使用指南

GCC 的 --print-memory-usage 選項用于在編譯鏈接過程中輸出程序的內存占用統計信息&#xff0c;特別適用于嵌入式開發等內存受限的場景。其主要作用和輸出內容如下&#xff1a; 核心功能 顯示內存分段占用 輸出程序在目標設備內存中的分段占用情況&#xff0c;通常包括&#…

Vue3 + Typescript:類型使用記錄 / 類型注解 / 積累

一、ReturnType<typeof createApp> ReturnType<typeof createApp> 是一種類型安全的寫法&#xff0c;是 TypeScript 中的一個高級類型&#xff0c;它用于獲取函數 createApp 的返回類型。 實例&#xff1a; import registerFocus from ./focus // 獲取焦點 impo…

SIFT 算法原理詳解

SIFT 算法原理詳解 SIFT&#xff08;尺度不變特征變換&#xff0c;Scale-Invariant Feature Transform&#xff09;是一種經典的局部特征檢測和描述算法&#xff0c;它能夠在不同的尺度、旋轉和光照變化下穩定地檢測圖像特征。SIFT 主要包括以下幾個步驟&#xff1a;尺度空間極…

2024年認證杯SPSSPRO杯數學建模D題(第二階段)AI繪畫帶來的挑戰解題全過程文檔及程序

2024年認證杯SPSSPRO杯數學建模 D題 AI繪畫帶來的挑戰 原題再現&#xff1a; 2023 年開年&#xff0c;ChatGPT 作為一款聊天型AI工具&#xff0c;成為了超越疫情的熱門詞條&#xff1b;而在AI的另一個分支——繪圖領域&#xff0c;一款名為Midjourney&#xff08;MJ&#xff…

電子電路:全面深入了解晶振的定義、作用及應用

本次了解重點: 1.壓電效應的數學描述 2.生產工藝以及關鍵工序 3.電路設計部分如負阻原理和匹配電容計算 4.失效案例比如冷啟動問題 5.新形態晶振技術引入5G和量子計算 6.溫補晶振的補償機制 7故障案例講解-更換負載電池或增加預熱電路 藍牙音頻斷續-頻偏導致 工控機死機-起振電…

【Java實用工具類】手擼SqlBuilder工具類,優雅拼接動態SQL,MyBatisPlus同款風格!

&#x1f4cc; 正文&#xff1a; 有時候我們項目底層是 JdbcTemplate 查詢&#xff0c;沒法像 MyBatisPlus 一樣用 Wrapper 拼接條件&#xff0c;但我們又不想手擼字符串。那怎么辦&#xff1f;我今天就給你整了個 SqlBuilder 工具類&#xff0c;支持 eq、ne、like、in、gt、l…

WEB3——開發者怎么查看自己的合約日志記錄

在區塊鏈中查看合約的日志信息&#xff08;也叫事件 logs&#xff09;&#xff0c;主要有以下幾種方式&#xff0c;具體方法依賴于你使用的區塊鏈平臺&#xff08;如 Ethereum、BSC、Polygon 等&#xff09;和工具&#xff08;如 Etherscan、web3.js、ethers.js、Hardhat 等&am…

Maven-生命周期

目錄 1.項目對象模型 2.依賴管理模型 3.倉庫&#xff1a;用于存儲資源&#xff0c;管理各種jar包 4.本地倉庫路徑 1.項目對象模型 2.依賴管理模型 3.倉庫&#xff1a;用于存儲資源&#xff0c;管理各種jar包 4.本地倉庫路徑