【发布时间】:2021-06-18 20:12:34
【问题描述】:
我遇到了乌龟 orm 和 fastapi 的问题
我有来自app.py 的以下代码;为了简洁,我跳过了一些行
app.py
from fastapi import FastAPI, HTTPException
from app.models import User_Pydantic, UserIn_Pydantic, Users
from app.utils import cryptoUtil
from app.auth import auth as auth_router
from tortoise.contrib.fastapi import HTTPNotFoundError, register_tortoise
app = FastAPI()
@app.post("/users", response_model=User_Pydantic)
async def create_user(user: UserIn_Pydantic):
user.password = cryptoUtil.hash_password(user.password)
user_obj = Users(email=user.email, password=user.password, fullname=user.fullname, status=user.status)
await user_obj.save()
return await User_Pydantic.from_tortoise_orm(user_obj)
register_tortoise(
app,
db_url=config.DATABASE_URL,
modules={"models": ["app.models"]},
generate_schemas=True,
add_exception_handlers=True,
)
app.include_router(auth_router.router, tags=["Auth"])
if __name__ == '__main__':
app.run()
这很好用并且能够创建用户
但现在我正在尝试从另一个文件中做同样的事情
auth.py
from fastapi import APIRouter, Depends, HTTPException
from app.auth import crud
from app.utils import cryptoUtil
from app.models import User_Pydantic, UserIn_Pydantic, Users
router = APIRouter()
@router.post("/auth/register", response_model=User_Pydantic)
async def register(user: UserIn_Pydantic):
result = await crud.find_exist_user(user.email)
if result:
raise HTTPException(status_code=404, detail="user already exists!")
user.password = cryptoUtil.hash_password(user.password)
user_obj = Users(email=user.email, password=user.password, fullname=user.fullname, status=user.status)
await user_obj.save()
return await User_Pydantic.from_tortoise_orm(user_obj)
但这不起作用,我在 404 错误响应中得到了这个
{
"detail": "Object does not exist"
}
我认为问题在于from_tortoise_orm(user_obj) in
return await User_Pydantic.from_tortoise_orm(user_obj)
无法在auth.py 文件中工作,因为由于某种原因我无法在初始化乌龟的app.py 文件之外运行它
我该怎么做才能解决这个问题?
我遇到的部分问题是如何能够从外部app.py 调用乌龟初始化,其中register_tortoise 存在
更新:
文件夹结构
├── app
│ ├── app.py
│ ├── models.py
│ ├── config.py
│ │
│ ├── auth
│ │ ├── auth.py
│ │ ├── crud.py
│ │
│ └── utils
│ ├── cryptoUtil.py
│
【问题讨论】:
-
如果您不显示文件夹结构,则假设所有内容都在同一个文件夹中(我猜不是)。另外,我认为您在 register_tortoise 之前缺少 Tortoise.init_models(models_list, "models")
-
我添加了文件夹结构...我的代码中没有这个
Tortoise.init_models(models_list, "models")...我在哪里添加这个?它有什么用?
标签: python fastapi tortoise-orm