feat: docker本地调试:

- 1. import不同系统语法不一致
- 2. mysql允许远程访问
This commit is contained in:
eric
2022-12-18 21:12:02 +08:00
parent 4272acb677
commit 1423965912
25 changed files with 106 additions and 28 deletions

View File

Binary file not shown.

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,56 @@
from sqlalchemy.orm import Session
from sqlalchemy import select
from . import models, schemas
# 删除
def delete_user(db: Session, user_id: int):
db.query(models.User).where(models.User.id == user_id).delete()
db.commit()
# db.refresh(db_user)
# 更新
def update_user(db: Session, user_id: int):
db_test=db.query(models.User).filter(models.User.id == user_id).update({"email":'111'},synchronize_session=False)
db.commit()
# db_test=db.query(models.User).filter(models.User.id == user_id).first()
# db_test.email='12345@qq.com'
# db.commit()
# 查询
def get_user(db: Session, user_id: int):
return db.query(models.User).filter(models.User.id == user_id).first()
def get_user_by_email(db: Session, email: str):
return db.query(models.User).filter(models.User.email == email).first()
def get_users(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.User).offset(skip).limit(limit).all()
# 新增
def create_user(db: Session, user: schemas.UserCreate):
fake_hashed_password = user.password + "notreallyhashed"
db_user = models.User(email=user.email, hashed_password=fake_hashed_password,is_active=False)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
def get_items(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.Item).offset(skip).limit(limit).all()
def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):
db_item = models.Item(**item.dict(), owner_id=user_id)
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item

View File

@@ -0,0 +1,15 @@
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymysql
# SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
# 从docker访问ip需要 mysql服务端允许外部访问=> 参考地址:https://blog.csdn.net/weixin_42599091/article/details/125224850
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:Xiao4669805@192.168.31.245:3306/test"
# SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} #sqlite
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

114
cloudcontainers/app/main.py Normal file
View File

@@ -0,0 +1,114 @@
from fastapi import FastAPI,Header,Depends,HTTPException
import requests
import json
from enum import Enum
from typing import Union
from pydantic import BaseModel
from sqlalchemy.orm import Session
from . import crud, models, schemas
from .database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
# Dependency
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
class User(BaseModel):
user_id: str
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
@app.post("/delete_user")
async def delete(user:User,db: Session = Depends(get_db)):
db_user = crud.delete_user(db,user_id=user.user_id)
# print('db_user'+db_user)
return {"message": "Hello delete_user"}
@app.post("/update_user")
async def update(user:User,db: Session = Depends(get_db)):
db_user = crud.update_user(db,user_id=user.user_id)
return {"message": "Hellupdate_usero World"}
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = crud.get_user_by_email(db, email=user.email)
if db_user:
raise HTTPException(status_code=400, detail="Email already registered")
return crud.create_user(db=db, user=user)
# 飞书通知
@app.get("/feishu")
async def root():
headers = {'Content-Type': 'application/json'}
# https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd
try:
r = requests.post('https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd',
data=json.dumps({'msg_type': 'text', "content": {"text": "cityNew有新用户注册"}}), headers=headers)
except(e):
print('e')
return {"message": "触发飞书webhook"}
# 飞书通知
@app.post("/nihao")
async def root():
headers = {'Content-Type': 'application/json'}
# https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd
try:
r = requests.post('https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd',
data=json.dumps({'msg_type': 'text', "content": {"text": "cityNew有新用户注册"}}), headers=headers)
except(e):
print('e')
return {"message": "nihao"}
# post请求
@app.post("/testPost")
async def root():
return {"message": "test-post"}
# 路径参数
@app.get("/path/{pathName}")
async def root(pathName:ModelName):
return {"message": pathName}
# 查询参数
@app.get("/items/")
async def read_item(skip: int = 0, limit: Union[int, None] = None):
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
# return fake_items_db[skip : skip + limit]
return f'{skip}+{limit}'
# 请求体
@app.post("/postitems/")
async def create_item(item: Item):
return item
# header参数
@app.get("/items/header")
async def read_items(user_agent: Union[str, None] = Header(default=None)):
return {"User-Agent": user_agent}

View File

@@ -0,0 +1,26 @@
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from .database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String(1000), unique=True, index=True)
hashed_password = Column(String(1000))
is_active = Column(Boolean, default=True)
items = relationship("Item", back_populates="owner")
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(1000), index=True)
description = Column(String(1000), index=True)
owner_id = Column(Integer, ForeignKey("users.id"))
owner = relationship("User", back_populates="items")

View File

@@ -0,0 +1,35 @@
from pydantic import BaseModel
class ItemBase(BaseModel):
title: str
description: str | None = None
class ItemCreate(ItemBase):
pass
class Item(ItemBase):
id: int
owner_id: int
class Config:
orm_mode = True
class UserBase(BaseModel):
email: str
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool
items: list[Item] = []
class Config:
orm_mode = True

Binary file not shown.