from fastapi import FastAPI,Query,HTTPException,status,Request
import uvicorn
from pydantic import BaseModel,Field
from typing import Optional
from fastapi.responses import JSONResponse
app = FastAPI()
class User(BaseModel):
name:str = Field(...,title='name',min_length=3,max_length=20)
address:str
clas:str
class userOut(BaseModel):
name:str
address: str
clas: str
@app.post('/user',status_code=201,response_model=userOut)
async def ko_user(user:User):
return user.model_dump()
users = {
"xxx": {"id": 0},
"aaa": {"id": 1,"username": "aaa"},
"bbb": {"id": 2,"username": "bbb","password": "bbb"},
"ccc": {"id": 3,"username": 'ccc',"password":"ccc","description": "default"},
"ddd": {"id": 4,"username": "ddd","password":"ddd","description": "user ddd"},
"eee": {"id": 5,"username": "eee","password":"eee","description":"user eee","fullname": "Mary Water"}
}
@app.post('/user/login')
async def kobe_user(username:Optional[str]=Query(...,title='name',max_length=20,min_length=1)):
user = users.get(username,None)
if user:
return user
#异常处理,非常重要
raise HTTPException(status_code=404,detail=F'{username} not fund ok bro')
class UserC(BaseModel):
username:str
address:str
class UserNotException(Exception):
def __init__(self,username:str):
self.username = username
# 验证用户存不存在
@app.post('/get/user')
async def get_user(user:UserC):
userss = users.get(user.username,None)
if userss:
return userss
# raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,detail=f'{user.username} not found')
raise UserNotException('zzz')
# 自己写一个抛出异常
@app.exception_handler(UserNotException)
async def exception_not_user_create(request:Request,exc:UserNotException):
return JSONResponse(status_code=404,content={
'message':f'{exc.username} not found',
'error_code':'404',
})
# 验证用户存不存在
class ErrorMessage(BaseModel):
error_code:int
error_message:str
@app.post('/create/user')
async def create_user(user:UserC):
error_message = ErrorMessage(error_code=404,error_message=f'{user.username} already exists')
if users.get(user.username,None):
return JSONResponse(status_code=402,content=error_message.model_dump())
user_dict = user.model_dump()
return user_dict
if __name__ == '__main__':
uvicorn.run('main:app',port=3200,reload=True)
fastapi,状态码,自己设置状态码
最新推荐文章于 2024-06-19 15:11:21 发布