37创客科创中心

 找回密码
 立即注册
查看: 1318|回复: 0

fastapi接口

[复制链接]

194

主题

324

帖子

2401

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2401
发表于 2024-8-26 08:42:38 | 显示全部楼层 |阅读模式
==========================================硬件应用部分代码======================================================
mind+接入数据部分
--------------------------------------------------------------------------------------------python模式代码参数部分-------------------------------------------------------------------------------------------------------------------
U_GET:注意需要使用''引起来才行
'http://192.168.3.55/users/'
http://192.168.3.55/users/

U_POST:
网址:'http://192.168.3.55/users/7/items/'
字典:{   "title": "8253",   "description": "825" }






======================================后台部分代码==================================================



APP为根目录下
db目录下有其他个文件。

APP_FASTAPI_825
  1. # 第三方类库导入
  2. from typing import List
  3. from fastapi import Depends, FastAPI, HTTPException
  4. from sqlalchemy.orm import Session
  5. import uvicorn
  6. # 自定义类导入
  7. from db import crud, models, schemas
  8. from db.database import SessionLocal, engine

  9. models.Base.metadata.create_all(bind=engine)
  10. app = FastAPI()


  11. # 依赖
  12. def get_db():
  13.     try:
  14.         db = SessionLocal()
  15.         yield db
  16.     finally:
  17.         db.close()


  18. @app.post("/users/", response_model=schemas.User)
  19. def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
  20.     """根据email查找用户"""
  21.     db_user = crud.get_user_by_email(db, email=user.email)
  22.     # 如果用户存在,提示该邮箱已经被注册
  23.     if db_user:
  24.         raise HTTPException(status_code=400, detail="邮箱已经被注册!")
  25.     # 返回创建的user对象
  26.     return crud.create_user(db=db, user=user)


  27. @app.get("/users/", response_model=List[schemas.User])
  28. def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
  29.     """读取指定数量用户,默认0-100条数据"""
  30.     users = crud.get_users(db, skip=skip, limit=limit)
  31.     return users


  32. @app.get("/users/{user_id}", response_model=schemas.User)
  33. def read_user(user_id: int, db: Session = Depends(get_db)):
  34.     """获取当前id的用户信息"""
  35.     db_user = crud.get_user(db, user_id=user_id)
  36.     """如果没有信息,提示用户不存在"""
  37.     if db_user is None:
  38.         raise HTTPException(status_code=404, detail="用户不存在")
  39.     return db_user

  40. # 根据用户id增加item数据表项目数据
  41. @app.post("/users/{user_id}/items/", response_model=schemas.Item)
  42. def create_item_for_user(user_id: int, item: schemas.ItemCreate, db: Session = Depends(get_db)):
  43.     """创建该用户的items,用户关联项目信息"""
  44.     return crud.create_user_item(db=db, item=item, user_id=user_id)


  45. @app.get("/items/", response_model=List[schemas.Item])
  46. def read_items(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
  47.     """"获取所有items,默认0-100条数据"""
  48.     items = crud.get_items(db, skip=skip, limit=limit)
  49.     return items


  50. """KM关联数据操作"""


  51. @app.post("/users/{user_id}/kms/", response_model=schemas.KM)
  52. def create_km_for_user(user_id: int, km: schemas.KMCreate, db: Session = Depends(get_db)):
  53.     """创建该用户的items,用户关联项目信息"""
  54.     return crud.create_user_km(db=db, km=km, user_id=user_id)


  55. @app.get("/kms/", response_model=List[schemas.KM])
  56. def read_kms(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
  57.     """"获取所有items,默认0-100条数据"""
  58.     items = crud.get_kms(db, skip=skip, limit=limit)
  59.     return items

  60. """PM关联数据操作"""


  61. @app.post("/users/{user_id}/pms/", response_model=schemas.PM)
  62. def create_pm_for_user(user_id: int, pm: schemas.PMCreate, db: Session = Depends(get_db)):
  63.     """创建该用户的items,用户关联项目信息"""
  64.     return crud.create_user_pm(db=db, pm=pm, user_id=user_id)


  65. @app.get("/pms/", response_model=List[schemas.PM])
  66. def read_pms(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
  67.     """"获取所有items,默认0-100条数据"""
  68.     items = crud.get_pms(db, skip=skip, limit=limit)
  69.     return items



  70. if __name__ == '__main__':
  71.     uvicorn.run(app, host="0.0.0.0", port=80)
复制代码



crud
  1. from sqlalchemy.orm import Session

  2. # from . import models, schemas
  3. from db import models, schemas


  4. def get_user(db: Session, user_id: int):
  5.     """
  6.     根据id获取用户信息
  7.     :param db: 数据库会话
  8.     :param user_id: 用户id
  9.     :return: 用户信息
  10.     """
  11.     return db.query(models.User).filter(models.User.id == user_id).first()


  12. def get_user_by_email(db: Session, email: str):
  13.     """
  14.     根据email获取用户信息
  15.     :param db: 数据库会话
  16.     :param email: 用户email
  17.     :return: 用户信息
  18.     """
  19.     return db.query(models.User).filter(models.User.email == email).first()


  20. def get_users(db: Session, skip: int = 0, limit: int = 100):
  21.     """
  22.     获取特定数量的用户
  23.     :param db: 数据库会话
  24.     :param skip: 开始位置
  25.     :param limit: 限制数量
  26.     :return: 用户信息列表
  27.     """
  28.     return db.query(models.User).offset(skip).limit(limit).all()


  29. def create_user(db: Session, user: schemas.UserCreate):
  30.     """
  31.     创建用户
  32.     :param db: 数据库会话
  33.     :param user: 用户模型
  34.     :return: 根据email和password登录的用户信息
  35.     """
  36.     fake_hashed_password = user.password + "notreallyhashed"
  37.     db_user = models.User(email=user.email, hashed_password=fake_hashed_password)
  38.     db.add(db_user)  # 添加到会话
  39.     db.commit()  # 提交到数据库
  40.     db.refresh(db_user)  # 刷新数据库
  41.     return db_user


  42. def get_items(db: Session, skip: int = 0, limit: int = 100):
  43.     """
  44.     获取指定数量的item
  45.     :param db: 数据库会话
  46.     :param skip: 开始位置
  47.     :param limit: 限制数量
  48.     :return: item列表
  49.     """
  50.     return db.query(models.Item).offset(skip).limit(limit).all()


  51. def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):
  52.     """
  53.     创建用户item
  54.     :param db: 数据库会话
  55.     :param item: Item对象
  56.     :param user_id: 用户id
  57.     :return: Item模型对象
  58.     """
  59.     db_item = models.Item(**item.dict(), owner_id=user_id)
  60.     db.add(db_item)
  61.     db.commit()
  62.     db.refresh(db_item)
  63.     return db_item


  64. """KM关联数据操作"""


  65. def get_kms(db: Session, skip: int = 0, limit: int = 100):
  66.     """
  67.     获取指定数量的item
  68.     :param db: 数据库会话
  69.     :param skip: 开始位置
  70.     :param limit: 限制数量
  71.     :return: item列表
  72.     """
  73.     return db.query(models.KM).offset(skip).limit(limit).all()


  74. def create_user_km(db: Session, km: schemas.KMCreate, user_id: int):
  75.     """
  76.     创建用户item
  77.     :param db: 数据库会话
  78.     :param km: km对象
  79.     :param user_id: 用户id
  80.     :return: km模型对象
  81.     """
  82.     db_km = models.KM(**km.dict(), km_id=user_id)
  83.     db.add(db_km)
  84.     db.commit()
  85.     db.refresh(db_km)
  86.     return db_km


  87. """PM关联数据操作"""


  88. def get_pms(db: Session, skip: int = 0, limit: int = 100):
  89.     """
  90.     获取指定数量的item
  91.     :param db: 数据库会话
  92.     :param skip: 开始位置
  93.     :param limit: 限制数量
  94.     :return: item列表
  95.     """
  96.     return db.query(models.PM).offset(skip).limit(limit).all()


  97. def create_user_pm(db: Session, pm: schemas.PMCreate, user_id: int):
  98.     """
  99.     创建用户item
  100.     :param db: 数据库会话
  101.     :param km: km对象
  102.     :param user_id: 用户id
  103.     :return: km模型对象
  104.     """
  105.     db_pm = models.PM(**pm.dict(), pm_id=user_id)
  106.     db.add(db_pm)
  107.     db.commit()
  108.     db.refresh(db_pm)
  109.     return db_pm
复制代码



schemas
  1. from typing import List
  2. from pydantic import BaseModel

  3. """PM模型类定义"""


  4. class PMBase(BaseModel):
  5.     pname: str
  6.     remark: str = None


  7. class PMCreate(PMBase):
  8.     pass


  9. class PM(PMBase):
  10.     id: int
  11.     pm_id: int

  12.     class Config:
  13.         orm_mode = True


  14. """KM模型类定义"""


  15. class KMBase(BaseModel):
  16.     title: str
  17.     description: str = None


  18. class KMCreate(KMBase):
  19.     pass


  20. class KM(KMBase):
  21.     id: int
  22.     km_id: int

  23.     class Config:
  24.         orm_mode = True


  25. """Item模型类定义"""


  26. class ItemBase(BaseModel):
  27.     title: str
  28.     description: str = None


  29. class ItemCreate(ItemBase):
  30.     pass


  31. class Item(ItemBase):
  32.     id: int
  33.     owner_id: int

  34.     class Config:
  35.         orm_mode = True


  36. """User模型类定义"""


  37. class UserBase(BaseModel):
  38.     email: str
  39.     name: str


  40. class UserCreate(UserBase):
  41.     password: str
  42.     username: str


  43. class User(UserBase):
  44.     id: int
  45.     is_active: bool

  46.     items: List[Item] = []
  47.     kms: List[KM] = []
  48.     pms: List[PM] = []
  49.     # wts: List[PM] = []
  50.     # emps: List[PM] = []

  51.     class Config:
  52.         orm_mode = True
复制代码



models
  1. # 导入第三类
  2. from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
  3. from sqlalchemy.orm import relationship
  4. # 导入数据库设置类,模型基础类
  5. from db.database import Base


  6. # 定义User类
  7. class User(Base):
  8.     __tablename__ = "users"  # 定义表名
  9.     # 定义属性
  10.     id = Column(Integer, primary_key=True, index=True)
  11.     name = Column(String, index=True)
  12.     username = Column(String, index=True)
  13.     email = Column(String(255), unique=True, index=True)
  14.     hashed_password = Column(String(255))
  15.     is_active = Column(Boolean, default=True)
  16.     # 关联item模型,同时关联items表
  17.     items = relationship("Item", back_populates="owner")  # 关联Item表
  18.     kms = relationship("KM", back_populates="km")  # 关联Item表
  19.     pms = relationship("PM", back_populates="pm")
  20.     # wts = relationship("PM", back_populates="pm")
  21.     # emps = relationship("PM", back_populates="pm")


  22. # 定义Item类
  23. class KM(Base):
  24.     __tablename__ = "kms"  # 定义表名
  25.     # 定义属性
  26.     id = Column(Integer, primary_key=True, index=True)
  27.     title = Column(String(255), index=True)
  28.     description = Column(String(255), index=True)
  29.     # 关联user模型,同时关联users表
  30.     km_id = Column(Integer, ForeignKey("users.id"))  # 关联km表
  31.     km = relationship("User", back_populates="kms")


  32. class PM(Base):
  33.     __tablename__ = "pms"  # 定义表名
  34.     # 定义属性
  35.     id = Column(Integer, primary_key=True, index=True)
  36.     pname = Column(String(255), index=True)
  37.     remark = Column(String(255), index=True)
  38.     # 关联user模型,同时关联users表
  39.     pm_id = Column(Integer, ForeignKey("users.id"))  # 关联km表
  40.     pm = relationship("User", back_populates="pms")


  41. # 定义Item类
  42. class Item(Base):
  43.     __tablename__ = "items"  # 定义表名
  44.     # 定义属性
  45.     id = Column(Integer, primary_key=True, index=True)
  46.     title = Column(String(255), index=True)
  47.     description = Column(String(255), index=True)
  48.     # 关联user模型,同时关联users表
  49.     owner_id = Column(Integer, ForeignKey("users.id"))
  50.     owner = relationship("User", back_populates="items")  # 关联User表
复制代码




database

  1. # 导入第三方库文件
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy.orm import sessionmaker

  5. # 数据库连接配置
  6. # SQLALCHEMY_DATABASE_URL = "sqlite:///sqlitefastapi.db"
  7. SQLALCHEMY_DATABASE_URL = "sqlite:///826.db"
  8. # SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:andy123456@localhost/fastapi?charset=utf8mb4"
  9. # 创建引擎
  10. engine = create_engine(SQLALCHEMY_DATABASE_URL)
  11. # 创建数据库会话
  12. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  13. # 声明基类;该类为后面models定义模型类使用
  14. Base = declarative_base()
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|37创客科创中心

GMT+8, 2025-12-11 17:15 , Processed in 0.151846 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表