v0.1 fastapi: route + model + orm
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# from idlelib.query import Query
|
||||
from typing import Optional
|
||||
from fastapi import APIRouter,Query
|
||||
from pydantic import BaseModel
|
||||
import re
|
||||
|
||||
from enum import Enum
|
||||
|
||||
route = APIRouter(prefix="/path_query_variables",tags=["path_query_variables"])
|
||||
|
||||
stu = [{"sid":'001','name':'gk','age':18,'address':'dd_abc_lg_', 'sex':'male'},
|
||||
{"sid":'002','name':'gk2','age':19},
|
||||
{"sid":'003','name':'gk3','age':20}]
|
||||
|
||||
class Sex(str,Enum):
|
||||
MALE = 1
|
||||
FEMAIL = 2,
|
||||
TRANS = 3
|
||||
|
||||
maile = '男'
|
||||
femail = '女',
|
||||
trans = '跨性别'
|
||||
|
||||
|
||||
|
||||
@route.get("/{sid}")
|
||||
def get(sid: str):
|
||||
for s in stu:
|
||||
if s['sid'] == sid: return s
|
||||
return None
|
||||
|
||||
|
||||
@route.get("/")
|
||||
def get(age_min: int | None = None, age_max: int| None=None):
|
||||
lst = []
|
||||
for s in stu:
|
||||
if age_min <= s['age'] <= age_max: lst.append(s)
|
||||
return lst
|
||||
|
||||
# todo: not support int|None? <0.141.1
|
||||
'''
|
||||
BP:
|
||||
- Optional[str,None]
|
||||
- str | None
|
||||
- str | None = None
|
||||
|
||||
'''
|
||||
@route.get("/validate")
|
||||
def get(age_min: int=Query(default=0, ge=0,le=100),
|
||||
age_max: int=Query(default=0, ge=0,le=100),
|
||||
sname:str=Query(default='',min_length=2,max_length=10),
|
||||
address:str=Query(pattern=".*lg.*"),
|
||||
sex:Sex=Query()
|
||||
):
|
||||
|
||||
return [x for x in stu if age_min <= x['age'] <= age_max and x['name']==sname and re.search(address,x['address'])]
|
||||
|
||||
|
||||
|
||||
# path
|
||||
@route.get("/good/{path:path}")
|
||||
def get_path(path: str):
|
||||
return path
|
||||
|
||||
@route.get("/bad/{path}")
|
||||
def get_path(path: str):
|
||||
return path
|
||||
|
||||
class Object(BaseModel):
|
||||
id:int|None = None
|
||||
name: str|None = None
|
||||
price: float|None = None
|
||||
|
||||
|
||||
@route.post("/model_dump_extraset")
|
||||
def model_dump_extraset(obj: Object):
|
||||
return obj.model_dump(exclude_unset=True)
|
||||
|
||||
|
||||
@route.get("/model_dump_extraset")
|
||||
def model_dump_extraset(obj: Object):
|
||||
return obj.model_dump(exclude_unset=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user