2

我正在尝试为我的项目设置 .env 文件。但这似乎不正确。

我将 .env 文件存储在与 config.py 文件相同的文件夹中,如下所示。

|__run.py
|___|myproject
    |__config.py
    |__.env

我的 config.py 文件中的代码:

from starlette.config import Config
from starlette.datastructures import Secret, CommaSeparatedStrings
config = Config(".env")
BACKHUG_JWT_AES_KEY = config('BACKHUG_JWT_AES_KEY', default=None)

print(type(BACKHUG_JWT_AES_KEY))
print(BACKHUG_JWT_AES_KEY)

.env 文件中的数据:

BACKHUG_JWT_AES_KEY="SAMPLE_AES_KEY"

但我得到的结果是:

<class 'NoneType'>
None

我不知道为什么它得到了None对象。我该如何解决?

我从run.py文件运行我的项目。

run.py文件中的代码:

import uvicorn

if __name__ == "__main__":
    uvicorn.run("myproject.main:app", host="0.0.0.0", port=8888, reload=True)

4

3 回答 3

0

我很确定这是当前工作目录的问题。我可以建议两种方法。

  • .env文件移动到文件所在的一个run.py目录

或者

  • 改变路径config = Config("myproject/.env")
于 2020-12-10T07:34:02.893 回答
0

删除值中的双引号,然后重试:

.env 文件:

BACKHUG_JWT_AES_KEY=SAMPLE_AES_KEY
于 2020-12-10T04:54:59.683 回答
0

有一个更好的方法!

为此使用FastAPIPydantic。Pydantic 提供了一个很棒的BaseSettings类。此外,我们有很好的设置和环境变量文档。

通过从Pydantic的继承来创建一个Settings类:BaseSettings

from pydantic import BaseSettings

class Settings(BaseSettings):
    backhug_jwt_access_key: str

    class Config:
        env_file = "myproject/.env"

设置类自动从.env文件中读取变量。然后从您的主文件中,您可以像这样使用它:

from . import config
from functools import lru_cache

from fastapi import Depends, FastAPI

app = FastAPI()

@lru_cache()
def get_settings():
    return config.Settings()


@app.get("/info")
async def info(settings: config.Settings = Depends(get_settings)):
    return {"jwt_key": settings.backhug_jwt_access_key}
于 2020-12-10T08:11:32.017 回答