commit af17532f4a92d8174247c989d10aa4f636b26aec Author: wolin_LeeERbn <2659388772@qq.com> Date: Sat Sep 19 15:04:27 2026 +0800 修改成了飞书文档上的代码 diff --git a/day23sk/api/order_api.py b/day23sk/api/order_api.py new file mode 100644 index 0000000..6241774 --- /dev/null +++ b/day23sk/api/order_api.py @@ -0,0 +1,47 @@ +from fastapi import APIRouter,Depends,HTTPException +from day23sk.schema.order_request import OrderRequest,OrderResponse +from day23sk.database import get_db +from day23sk.model.order_model import Order +from day23sk.dao.order_dao import add_student_dao,update_orders_dao,delete_orders_dao,get_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(id:int|None = None ,order_title:str|None = None,db=Depends(get_db),page:int=1,page_size:int=10): + r = get_orders_dao(id,order_title,db,page,page_size ) + if r: + return r + raise HTTPException(status_code=404,detail='订单不存在!') + +@order_api.delete('/{id}') +def get_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表里 +''' + + + diff --git a/day23sk/dao/order_dao.py b/day23sk/dao/order_dao.py new file mode 100644 index 0000000..5dceb76 --- /dev/null +++ b/day23sk/dao/order_dao.py @@ -0,0 +1,50 @@ +from day23sk.model.order_model import Order,User +def add_student_dao(o,db): + try: + r = db.query(User).filter(User.id == o['userid']).all() + if r: + o1 = Order( **o) # 将字典解析成键值对关键字参数输入 title = xxx, userid = XXX + db.add(o1) + else: + raise ValueError + 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(id,order_title,db,page,page_size): + q = db.query(Order) + if id: + q = q.filter( Order.id == id ) + if order_title: + q = q.filter( Order.title == order_title ) + r = q.offset( (page-1)*page_size ).limit( page_size ).all() + if r: + 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: # 删除有返回值,删除的行数 + rows = db.query(Order).filter(Order.id == id).delete() + except: + db.rollback() + rows = 0 + else: + db.commit() + finally: + return rows \ No newline at end of file diff --git a/day23sk/model/order_model.py b/day23sk/model/order_model.py new file mode 100644 index 0000000..73b0f29 --- /dev/null +++ b/day23sk/model/order_model.py @@ -0,0 +1,43 @@ +from day23sk.database import DATETIME,Base,Column,Integer,String +from datetime import datetime + +class Order(Base): # python里的表名字 + __tablename__ = 'order_info_detail' # 实际数据库的表名字 + id = Column( Integer # 声明字段的数据类型 + , primary_key=True # 声明是主键 + , autoincrement=True # 声明是自增主键 + , comment='订单编号,自增主键' # 注释 + ) + title = Column( String(50) # 对应数据库的varchar类型 + ,nullable=False # 不允许为null + ) + userid = Column( Integer + # ,ForeignKey('user_info_detail.id') + ,nullable=False ) # 外键约束 + create_date = Column(DATETIME + , default=datetime.now # 默认值是当前时间 + ) + update_date = Column(DATETIME + , default=datetime.now # 首次创建的时间跟更新时间一致 + , onupdate=datetime.now + ) + + +class User(Base): # python里的表名字 + __tablename__ = 'user_info_detail' # 实际数据库的表名字 + id = Column( Integer # 声明字段的数据类型 + , primary_key=True # 声明是主键 + , autoincrement=True # 声明是自增主键 + , comment='用户编号,自增主键' # 注释 + ) + usernmae = Column( String(50) # 对应数据库的varchar类型 + ,nullable=False # 不允许为null + ,comment='用户名' + ) + create_date = Column(DATETIME + , default=datetime.now # 默认值是当前时间 + ) + update_date = Column(DATETIME + , default=datetime.now # 首次创建的时间跟更新时间一致 + , onupdate=datetime.now + ) \ No newline at end of file