diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/order_api.py b/api/order_api.py new file mode 100644 index 0000000..c284cce --- /dev/null +++ b/api/order_api.py @@ -0,0 +1,44 @@ +from fastapi import APIRouter,Depends,HTTPException +from day22.schema.order_request import OrderRequest,OrderResponse +from day22.database import get_db +from day22.model.order_model import Order +from day22.dao.order_dao import delete_orders_dao,add_student_dao,update_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/dao/__init__.py b/dao/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dao/order_dao.py b/dao/order_dao.py new file mode 100644 index 0000000..1bece5c --- /dev/null +++ b/dao/order_dao.py @@ -0,0 +1,52 @@ +from day22.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/database.py b/database.py new file mode 100644 index 0000000..a1669b6 --- /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..a4c4d12 --- /dev/null +++ b/main.py @@ -0,0 +1,11 @@ +from fastapi import FastAPI +from day22.api.order_api import order_api + +app = FastAPI() + +app.include_router(order_api,tags=['订单接口'],prefix='/orders') + + +if __name__ == '__main__': + import uvicorn + uvicorn.run("main:app",host='0.0.0.0',port=12345) diff --git a/midlleware.py b/midlleware.py new file mode 100644 index 0000000..4afdb04 --- /dev/null +++ b/midlleware.py @@ -0,0 +1,19 @@ +from fastapi import Response,Request +from time import time + +async def fun_ip(r,n): + print('获取客户端的来访ip:',r.client.host) + if r.client.host not in ['192.168.5.18','192.168.5.6']: + respons = await n(r) + return respons + return Response(status_code=403,content='Not have Permission!') + +async def fun_time(r:Request,n): + start_time = time() # 记录开始的时间 + respons = await n(r) # 接口执行 + end_time = time() # 记录结束的时间 + sss = end_time - start_time + print( f'接口响应耗时:{sss}s' ) + respons.headers["Time"] = str(sss) # 添加到响应头里,必须是字符串 + return respons + diff --git a/model/__init__.py b/model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/model/order_model.py b/model/order_model.py new file mode 100644 index 0000000..0493886 --- /dev/null +++ b/model/order_model.py @@ -0,0 +1,43 @@ +from day22.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 diff --git a/schema/__init__.py b/schema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/schema/order_request.py b/schema/order_request.py new file mode 100644 index 0000000..996c2ae --- /dev/null +++ b/schema/order_request.py @@ -0,0 +1,12 @@ +from pydantic import BaseModel + +# 定义创建订单的请求体模型 +class OrderRequest(BaseModel): + title:str|None = None + userid:int|None =None + +class OrderResponse(BaseModel): + code:int = 200 + detail:str = 'OK' + totals:int = 0 + data:str|dict|tuple|list \ No newline at end of file diff --git a/test.py b/test.py deleted file mode 100644 index a824b63..0000000 --- a/test.py +++ /dev/null @@ -1,7 +0,0 @@ -'''DSFDSFSDFAFASDF''' -11111 -2222 -333 -44 -55 -66 \ No newline at end of file diff --git a/test222.py b/test222.py deleted file mode 100644 index 7b4353a..0000000 --- a/test222.py +++ /dev/null @@ -1 +0,0 @@ -22222 \ No newline at end of file diff --git a/test3.py b/test3.py deleted file mode 100644 index 4f37670..0000000 --- a/test3.py +++ /dev/null @@ -1 +0,0 @@ -333 \ No newline at end of file