我遇到了乌龟 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)
在于
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
│