diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..06d7405 Binary files /dev/null and b/__init__.py differ diff --git a/database.py b/database.py new file mode 100644 index 0000000..30351a5 --- /dev/null +++ b/database.py @@ -0,0 +1,18 @@ +from sqlalchemy import * +from sqlalchemy.orm import declarative_base,sessionmaker + +db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8mb4" +engine = create_engine(db_url) + +Base = declarative_base() +Session = sessionmaker(bind=engine + ,autoflush=False + ,autocommit = False + ) + +def get_db(): + db = Session() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..e8fbe3f --- /dev/null +++ b/main.py @@ -0,0 +1,12 @@ +from fastapi import FastAPI +from day24.api.order_api import order_api + +app = FastAPI() + +app.include_router(order_api,tags=['订单接口'],prefix='/orders') + + +if __name__ == '__main__': + import uvicorn + uvicorn.run(app,host='127.0.2.2',port=12355) + diff --git a/order_api.py b/order_api.py new file mode 100644 index 0000000..3253eb7 --- /dev/null +++ b/order_api.py @@ -0,0 +1,45 @@ +from fastapi import APIRouter,Depends,HTTPException +from day24.schema.order_request import OrderRequest,OrderResponse +from day24.database import get_db +from day24.model.order_model import Order +from day24.dao.order_dao import add_student_dao,update_orders_dao,get_orders_dao,delete_orders_dao + +order_api = APIRouter() + + +@order_api.post('',response_model=OrderResponse) +def add_orders(order:OrderRequest,db=Depends(get_db)): + d = order.model_dump() + r = add_student_dao( o=d,db=db ) + if not r: + raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!') + return OrderResponse(totals=1,data=d) + +@order_api.put('/{id}') +def get_orders(order:OrderRequest,id:int,db=Depends(get_db)): + d = order.model_dump(exclude_unset=True) + r = update_orders_dao( id=id,update_data=d,db=db ) + if not r: + raise HTTPException(status_code=500, detail='没有更新!') + return {'code':200,'totals':r,'detail':'更新成功'} + +@order_api.get('') +def get_orders(order_title:str,db=Depends(get_db)): + r = get_orders_dao(order_title,db) + if r: + return r + return + +@order_api.delete('/{id}') +def delete_orders(id:int,db=Depends(get_db)): + rows = delete_orders_dao(id,db) + if not rows: + raise HTTPException(status_code=500,detail='没有删除') + return {'code':200,'totals':rows,'detail':'删除成功'} + + +# 要求: +''' +①把剩下的delete、get查询接口完成dao层的分层 +②新增一个user_info的表,有外键联系,oder订单表外键依赖user_info,改造一下订单post的接口,新增订单前,判断下用户的id是否存在user_info表里 +''' \ No newline at end of file diff --git a/order_dao.py b/order_dao.py new file mode 100644 index 0000000..201f806 --- /dev/null +++ b/order_dao.py @@ -0,0 +1,49 @@ +from http.client import HTTPException + +from day24.model.order_model import Order + + +def add_student_dao(o,db): + try: + o1 = Order( **o) # 将字典解析成键值对关键字参数输入 title = xxx, userid = XXX + db.add(o1) + except: + db.rollback() + return False + else: + db.commit() + return True + + + +def update_orders_dao(id,update_data,db): + try: # 数据更新是有返回值的,返回的是影响的行数 + rows = db.query( Order ).filter( Order.id == id ).update( update_data ) + except: + db.rollback() + return False + else: + db.commit() + return rows + + +def get_orders_dao(order_title,db): + try: + r = db.query(Order).filter( Order.title == order_title ).all() + except: + db.rollback() + return False + else: + return [{"order_id": i.id, 'order_title': i.title, "user_id": i.userid, "create_date": i.create_date, + "update_date": i.update_date} for i in r] + + +def delete_orders_dao(id,db): + try: + r = db.query( Order ).filter( Order.id == id ).delete() + except: + db.rollback() + return False + else: + db.commit() + return True \ No newline at end of file