首页 > 编程问答 >如何将flask应用程序分成多个py文件?

如何将flask应用程序分成多个py文件?

时间:2024-07-27 14:46:32浏览次数:5  
标签:python flask

我的 Flask 应用程序当前由一个具有多个路径的文件组成,并定义了路径。有什么方法可以创建一个 test.py 文件,其中包含 main() 中未处理的路由吗? test2.py 我担心 test.py 中的路由太多,并且希望使其可以run

@app.route('/somepath')
def somehandler():
    # Handler code here

,它也会拾取 test.py 上的路由,就好像它是同一文件的一部分一样。我必须在 python test.py 中进行哪些更改和/或包含在 test.py 中才能使其正常工作? test.py and/or include in test2.py to get this to work?


当然,可以将的 Flask 应用程序拆分成多个文件。这不仅可以使的代码更易于管理,还可以提高可读性和可维护性。以下是如何操作:

1. 创建一个应用程序工厂函数:

不是直接创建 Flask 应用程序实例,而是创建一个返回应用程序实例的函数。这允许在其他文件中导入和使用该实例。

2. 从其他文件中导入和注册蓝图:

蓝图就像 Flask 应用程序的模块化组件。可以将相关的路由和视图函数分组到蓝图中,然后将这些蓝图注册到的主应用程序中。

示例:

main.py :

from flask import Flask
from test import test_bp  # 从 test.py 文件导入蓝图

def create_app():
    app = Flask(__name__)
    app.config.from_mapping(
        # 在此处配置的应用程序
    )

    app.register_blueprint(test_bp, url_prefix='/test')  # 注册蓝图,并为其设置可选的 URL 前缀

    return app

if __name__ == '__main__':
    app = create_app()
    app.run(debug=True)

test.py :

from flask import Blueprint

test_bp = Blueprint('test', __name__)  # 创建一个名为 'test' 的蓝图

@test_bp.route('/somepath')  # 使用 blueprint.route 装饰器而不是 app.route
def somehandler():
    # 处理程序代码在此
    return 'Hello from test blueprint!'

解释:

  • main.py :
    • create_app 函数创建 Flask 应用程序实例,加载配置,注册蓝图,并返回该实例。
    • 蓝图 test_bp 使用 app.register_blueprint() 注册。 url_prefix 参数是可选的,它会将蓝图的所有路由放在 /test 前缀下。
  • test.py :
    • 创建一个名为 test_bp 的蓝图。
    • 路由使用 test_bp.route 装饰器定义,而不是 app.route

现在,当运行 python main.py 时,的应用程序将加载 test.py 中定义的路由,并可以通过 /test/somepath 访问。

优点:

  • 模块化: 将的应用程序分解成更小的、可管理的部分。
  • 可重用性: 蓝图可以在不同的 Flask 应用程序中重复使用。
  • 可维护性: 更容易找到和修复代码中的错误。

其他提示:

  • 可以根据需要创建任意数量的蓝图,并将它们组织到不同的文件夹中。
  • 可以将配置、数据库连接和其他全局设置放在 main.py 或单独的配置文件中。

希望这可以帮助更好地构建的 Flask 应用程序!

标签:python,flask
From: 11994325

相关文章

  • 使用 docker run 将 Python 单击选项传递给 ENTRYPOINT 会出现错误:“在 $PATH 中找不
    我有一个简单的python脚本,我想在docker容器内运行它。它打印一行消息“Hello{name}”。python脚本使用clickCLI界面来定义收件人名称,如果我直接运行它(不使用dockerrun命令),它将如下所示:pythonhello.py-nSmithDockerbuild命令:dockerbuild.-thello:1.......
  • 标题:在 OpenSees Python 中定义具有特定卸载行为的双线性弹塑性材料
    我正在使用Python中的OpenSees,我想定义一种在负载下表现出双线性弹塑性行为的材料。但是,我需要在卸载过程中将材质返回到其原始位置,遵循准确的加载路径。在此处输入图像描述我不确定如何在OpenSees中正确实现卸载行为,我正在寻找实现这一具体材料反应的指导。......
  • 使用正则表达式删除Python中常见的公司名称后缀
    我正在努力删除一些公司名称中的后缀。预期结果如下:原始名称:AppleInc.SonyCorporationFiatChryslerAutomobilesS.p.A.SamsungElectronicsCo.,Ltd.清除名称:AppleSonyFiatChryslerAutomobilesSamsungElectronics到目前为止我所做的:importred......
  • 如何将 Brave 网络浏览器与 python、selenium 和 chromedriver 结合使用?
    我从Google的Chrome切换到Brave网络浏览器并且很难让它像Chrome一样与Brave一起使用。Brave是基于Chromium的,所以我猜它应该不会那么难。我确保我的Brave和Chromedriver处于相同版本,像这样,~/some/path$chromedriver--versionChromeDriver76.0.3......
  • 覆盖 python 应用程序时权限被拒绝
    我使用python制作了一个粗略的自动更新应用程序,并使用freeze-cx制作了exe文件。首先,该应用程序检查firebase服务器上是否有最新版本的文件可用,如果可用则下载zip文件。并且应用程序解压并覆盖文件。this_file_path=sys.executableifgetattr(sys,'frozen......
  • Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测
    案例背景时间序列的异常值检测是方兴未艾的话题。比如很多单变量的,一条风速,一条用电量这种做时间序列异常值检测,想查看一下哪个时间点的用电量异常。多变量时间序列由不同变量随时间变化的序列组成,这些时间序列在实际应用中通常来自不同的传感器或数据源。多变量时间序列异......
  • 使用 Flask 时,为什么这个 html 模板不能在 Web 浏览器中呈现抓取的网站数据?
    每当我在终端中打印出抓取的数据时,它都会很好地显示抓取的数据,但每当我尝试使用PythonFlask提供它时,我使用的HTML模板不会在Web浏览器中呈现数据。如果您能帮我修复此代码。Python(Flask)文件:fromflaskimportFlask,render_templatefrombs4importBeautifulSoup......
  • 我没有 python 但我有 python3
    我最近格式化了我的笔记本电脑并安装了Ubuntu操作系统。我没有明确安装Python。为了检查它是否已预安装,我在终端中运行python--version并得到了这个:$python--versionCommand'python'notfound,butcanbeinstalledwith:sudoaptinstallpython3......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 1-python的数据类型与变量
    一、交互模式与脚本模式交互模式:就相当于一种问答模式,关闭即消失无法保存重用比如python自带的编译器脚本模式:可以将代码长期保存以及重复使用如何创建脚本模式:idle——file——newfile[快捷方式:idle——ctrl+n]保存:ctrl+s运行:F5二、变量(Variable)变量:会变化......