heroku 避免此代码重复的最佳做法是什么?

d4so4syb  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(159)

我有以下Flask应用程序的代码片段:

import flask import Flask

app = Flask(__name__)

@app.route('/')
def index():

    # Some code...

    on_heroku = 'DYNO' in os.environ
    if on_heroku:
        # Do something
    else:
        # Do something

    return ("SUCCESS", 200)

def open_browser():
    on_heroku = 'DYNO' in os.environ
    if on_heroku:
        # Do something
    else:
        # Do something

if __name__ == "__main__":
    open_browser()
    app.run(debug=True)

我发现on_heroku = 'DYNO' in os.environon_heroku值的检查在代码中写了两次。
我如何改进代码(例如,将on_heroku作为参数传递?),使程序仍然可以正常运行?

yptwkmov

yptwkmov1#

使其成为独立函数:

def check():
    on_heroku = 'DYNO' in os.environ
    if on_heroku:
        # Do something
    else:
        # Do something

def index():
    check()
def open_browser():
    check()

此外,您还可以在if语句中执行环境检查,而不是赋值。

if 'DYNO' in os.environ:
    ...

甚至在运行时全局分配一次:

on_heroku = 'DYNO' in os.environ

# then run the rest of the program
rkue9o1l

rkue9o1l2#

我的建议是使用一个配置类,全局导入配置,并根据需要使用它。如果您有一个较大的项目,请考虑使用库,有很多选项可供选择。(https://www.dynaconf.com/,pydantic-settings)
如果你正在使用pydantic,考虑使用https://pydantic-docs.helpmanual.io/usage/settings/,你也可以创建一个.env文件来轻松地进行本地开发,检查下面的例子。

class Settings(BaseSettings):
    """Application settings."""

    dyno: str = Field(env="DYNO")

    class Config:
        env_file = f".env"

SETTINGS = Settings()

您现在可以在应用程序中全局使用您的设置。

相关问题