# apps/user/curd.py
from typing import Annotated
from fastapi import Form
from sqlalchemy.ext.asyncio import AsyncSession
from apps.user.models import User
from apps.user.schemas import CreateUser, UpdateUser
async def async_create_user(form_data: CreateUser, session: AsyncSession) -> User:
user = User(
username=form_data.username,
email_address=form_data.email_address,
display_name=form_data.display_name,
password=form_data.password
)
async with session.begin():
session.add_all([user])
return user
async def async_update_user(form_data: UpdateUser, session: AsyncSession):
stmt = select(User).where(User.id == data.pk)
result = await session.execute(stmt)
user = result.scalars().first()
if form_data.username:
user.username = form_data.username
if form_data.email_address:
user.email_address = form_data.email_address
if data.display_name:
user.display_name = form_data.display_name
if data.password:
user.password = form_data.password
return user
8. 路由及请求处理
python复制代码
from fastapi import APIRouter
from sqlalchemy.ext.asyncio import AsyncSession
from core.db_handle import get_db
from apps.user.schemas import CreateUser, UpdateUser
from apps.user.curd import async_create_user, async_update_user
user_router = APIRouter(prefix="/user", tags=["users"])
@user_router.post("/create_user")
async def create_user(form: CreateUser, session: AsyncSession = Depends(get_db)):
user = await async_create_user(form, session)
return user
@user_router.put("/update_user")
async def create_user(form: Annotated[UpdateUser, Form()], session: AsyncSession = Depends(get_db)):
user = await async_update_user(form, session)
return user
9. 项目主入口
python复制代码
import uvicorn
from fastapi import FastAPI
from apps.user.router import user_router
app = FastAPI()
app.include_router(user_router)
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)