当前位置: 首页 > article >正文

深入解析 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 等版本控制系统管理代码。
  • 配置管理

    • 使用不同的配置文件或环境变量管理开发、测试、生产环境的配置。
  • 日志记录

    • 配置日志记录,方便调试和问题追踪。

相关文章:

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

Flask 是一个轻量级的 Python Web 应用框架,其内置的命令行工具(CLI)基于 Click 库,提供了方便的命令行接口,用于管理和运行 Flask 应用程序。本文将详细介绍 Flask 命令行工具的功能,以及如何使用 flask r…...

第6篇:中间件 SQL 重写与语义分析引擎实现原理

6.1 章节导读 SQL 是数据库中间件的“输入语言”。 在一个真正强大的中间件系统中,SQL 语句的执行通常不再是“原封不动”地传递给数据库,而是需要先经过: 语义分析:解析 SQL 的结构和含义。 SQL 重写:根据中间件逻辑…...

基于SpringBoot的“嗨玩旅游”网站设计与实现(源码+定制+开发)嗨玩旅游平台开发:景点展示与个性化推荐系统(SpringBoot)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

python版若依框架开发:python版若依部署

python版若依框架开发 从0起步,扬帆起航。 python版若依部署文章目录 python版若依框架开发1.源码2.概述3.部署1.源码 https://gitee.com/insistence2022/RuoYi-Vue-FastAPI 请诸君移步上述链接,即可对python版若依项目进行初步了解。 2.概述 若依框架本身基于java,可以快…...

React进阶:状态管理选择题

React进阶:状态管理选择题 引言 随着React应用复杂度增加,选择合适的状态管理方案成为我们面临的关键决策。 状态管理本质上是解决"谁来存储数据"以及"如何更新和分发这些数据"的问题。在React生态中,随着应用规模扩大…...

h5的aliplayer-min.js 加密视频会走到debugger

h5的aliplayer-min.js 如果 https://g.alicdn.com/apsara-media-box/imp-web-player/2.19.0/aliplayer-min.js走加密视频的话会有debugger 更换aliplayer-min.js版本解决了 https://g.alicdn.com/apsara-media-box/imp-web-player/2.25.1/aliplayer-min.js 对应css&#xff1a…...

第5篇《中间件负载均衡与连接池管理机制设计》

5.1 章节导读 在数据库中间件中,如何高效地管理数据库连接与请求调度至关重要。 本节围绕两个核心模块展开: 连接池管理:提升连接复用能力,避免频繁建立/断开连接。 负载均衡策略:合理调度 SQL 请求,提升…...

DashBoard安装使用

DashBoard安装使用 一、实验目的 1、掌握dashboard 的安装部署 2、熟悉图像化部署任务:产生pod---定义服务--验证访问 二、实验内容: 1、配置步骤 1.1、Helm安装 离线安装(适用于内网/离线环境) # 根据系统架构选择版本&am…...

极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)

题目 做法 启动靶机,打开给出的网址 随便输点东西进去,测试一下 输入1、1’、1"判断SQL语句闭合方式 输入以上两个都是以下结果 但是,输入1’时,出现的是另外结果 输入1,1"时,SQL语句没有…...

C# CallerMemberName特性

当你在一个方法运用了CallerMemberName特性,编译器会自动将调用该方法的方法或属性的名称作为该参数的默认值,可应用于MVVM框架。 代码: using System.ComponentModel; using System.Runtime.CompilerServices;public class Person : INoti…...

采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境

# 国内下载不了 docker pull gezp/ubuntu-desktop:24.04-cu12.6.2# 阿里云镜像 docker pull registry.cn-hongkong.aliyuncs.com/gezp/ubuntu-desktop:24.04-cu12.6.2# create container with nomachine docker run -d --restarton-failure --name myubuntu --shm-size1024m -e…...

关于面试找工作的总结(四)

不同情况下收到offer后的处理方法 1.不会去的,只是面试练手2.还有疑问,考虑中3.offer/职位不满足期望的4.已确认,但又收到更好的5.还想挽回之前的offer6.确认,准备入职7.还想拖一下的1.不会去的,只是面试练手 HR您好,非常荣幸收到贵司的offer,非常感谢一直以来您的帮助,…...

分布式拜占庭容错算法——实现工作量证明(PoW)算法详解

Java 实现工作量证明(PoW)算法详解 一、PoW 核心原理 #mermaid-svg-AAj0Pvst1PVcVy5v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AAj0Pvst1PVcVy5v .error-icon{fill:#552222;}#mermaid…...

深度解析Mysql中MVCC的工作机制

MVCC,多版本并发控制 定义:维护一个数据的多个版本,使读写操作没有冲突,依赖于:隐藏字段,undo log日志,readView MVCC会为每条版本记录保存三个隐藏字段 DB_TRX_ID: 记录最近插入或修改该记录的事务IDDB_R…...

MP4文件声音与视频分离

最近学习PR剪辑 要添加视频文件和音频文件 但是直接给MP4文件 得到的是一个整体 不管怎么切分 都是无法得到单独的整体 这就需要将视频文件和音频文件分离 我推荐使用ffmpeg工具进行分离 迅雷链接:https://pan.xunlei.com/s/VORu5x64jjL-gXFd_VTpYjRPA1?pwd8wec#…...

接口自动化测试之pytest 运行方式及前置后置封装

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Pytest 优点认知 1.可以结合所有的自动化测试工具 2.跳过失败用例以及失败重跑 3.结合allure生产美观报告 4.和Jenkins持续集成 5.很多强大的插件 pytest-htm…...

服务器被攻击了怎么办

可以上一个高防IP或者AI云防护都是可以的。(有效防御CC、APl接口、http、tcp、WEB应用扫描/爬虫、SYN、WAF、DDOS、UDP、入侵、渗透、SQL注入、XSS跨站脚本攻击、远程恶意代码执行、session fixation、Webshell攻击、恶意请求,恶意扫描、暴力破解、CSRF等…...

06-排序

排序 1. 排序的概念及其应用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键…...

python,shell,linux,bash概念的不同和对比联系

一、基本概念理解 1. Linux 是一个 操作系统内核,常与 GNU 工具集成组成完整的 Linux 操作系统。 提供对硬件的管理能力与系统调用接口。 用户通过 Shell 或 GUI 与 Linux 交互。 2. Shell 是用户与 Linux 内核之间的 命令行解释器(CLI)…...

FPGA管脚类型,及选择

fpga的IO Type选择,如下: 具体的定义:...

如何在 Ubuntu22.04 上安装并开始使用 RabbitMQ

单体架构学的差不多了,可以朝着微服务进军了,笔者打算实操一下 RabbitMQ(这个和 Redis 一样重要的组件) 笔者这里采用的是本地 wsl2 的 Ubuntu22.04 先按指定的博客进行前置操作 Ubuntu22.04 安装 RabbitMQ 解决 ARM Ubuntu 22.04 缺少 libs…...

R-CNN 模型算法流程梳理

目录 一、R-CNN整体流程 二、需要注意的地方 论文连接:[1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation 如果你之前了解过RNN,很容易混淆认为R-CNN也具有RNN的时序循环功能,这种理解是错误…...

细说C语言将格式化输出到FILE *stream流的函数fprintf、_fprintf_I、fwprintf、_fwprintf_I

目录 1、将格式化数据输出到FILE *stream流基本型 (1)语法 (2)参数 (3)示例 2、将格式化数据输出到FILE *stream流并启用并启用在格式字符串中使用参数的顺序的规范 (1)语法 …...

本地日记本,用于记录日常。

文章目录 想法程序说明展望 想法 本人想要复盘以前的事情,所以就想着写一个小程序,记录一下一天发生了什么事情。以后如果忘记了可以随时查看。写日记的想法来自我看的一本书,里面有一段话说的意思是,经验从来都不是随着年龄增长…...

[蓝桥杯]格子刷油漆

格子刷油漆 题目描述 X 国的一段古城墙的顶端可以看成 2N2N 个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数&…...

Monorepo架构: 项目管理工具介绍、需求分析与技术选型

概述 如何实现 monorepo,以及在项目中如何管理多个包,在进行具体项目开发前,有必要强调一个重要思维 — 全局观 即看待技术方案时,要从需求角度出发,综合考量该方案能否长远满足项目或团队需求 为什么要有全局观呢&a…...

ubuntu下libguestfs-tools

在ubuntu下,使用libguestfs-tools工具挂载其他磁盘和分区。 首先安装libguestfs-tools将vmx虚拟磁盘共享:sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other执行如下命令查看分区名称:virt-filesystems -a /mnt/hgfs/D/vmware/FGT_VM64-v7…...

Authentication failed(切换了新的远程仓库tld)

启用 Git Credential Manager git config --global credential.helper manager 强制弹出凭据输入窗口 git config --global credential.helper.modalprompt true 指定 TFS 服务器使用基础认证(Basic Auth) git config --global credential.https://…...

【Web应用】若依框架:基础篇14 源码阅读-后端代码分析-课程管理模块前后端代码分析

文章目录 一、课程管理模块前端代码截图二、前端代码及分析index.vuecourse.js 三、前端执行流程1. 组件初始化2. 查询操作3. 列表操作4. 对话框操作5. API 请求6. 执行流程总结关键点 四、课程管理模块后端代码截图五、后端代码块CourseControllerICourseServiceCourseMapperC…...

在 Linux 上安装 `pgvector`(这是一个 PostgreSQL 的向量类型扩展,常用于处理嵌入向量,便于进行向量相似度搜索)

1. 安装 PostgreSQL 确保你已经安装好 PostgreSQL 数据库。 例如在 Ubuntu 上: sudo apt update sudo apt install postgresql postgresql-contrib2. 安装依赖 pgvector 扩展用的是 make、gcc 等开发工具,因此你需要先安装 PostgreSQL 的开发包和编译…...