У меня проблема с черепахой и фастапи
у меня есть следующий код от 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
│
Tortoise.init_models(models_list, "models")
в моем коде ... где мне это добавить? а в чем польза? - person uberrebu   schedule 22.03.2021