From 1bbe70806c6782672b12f92c3abd5ba2b27e22b3 Mon Sep 17 00:00:00 2001 From: hackrobot Date: Wed, 20 Mar 2024 18:30:39 +0800 Subject: [PATCH] feat: fastapi --- __init__.py | 0 __pycache__/crud.cpython-312.pyc | Bin 0 -> 2347 bytes __pycache__/database.cpython-312.pyc | Bin 0 -> 570 bytes __pycache__/main.cpython-312.pyc | Bin 0 -> 2404 bytes __pycache__/models.cpython-312.pyc | Bin 0 -> 989 bytes __pycache__/schemas.cpython-312.pyc | Bin 0 -> 1058 bytes crud.py | 41 +++++++++++++++++++++ database.py | 13 +++++++ kunpeng.db | Bin 0 -> 24576 bytes main.py | 53 +++++++++++++++++++++++++++ models.py | 22 +++++++++++ schemas.py | 28 ++++++++++++++ 12 files changed, 157 insertions(+) create mode 100644 __init__.py create mode 100644 __pycache__/crud.cpython-312.pyc create mode 100644 __pycache__/database.cpython-312.pyc create mode 100644 __pycache__/main.cpython-312.pyc create mode 100644 __pycache__/models.cpython-312.pyc create mode 100644 __pycache__/schemas.cpython-312.pyc create mode 100644 crud.py create mode 100644 database.py create mode 100644 kunpeng.db create mode 100644 main.py create mode 100644 models.py create mode 100644 schemas.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/__pycache__/crud.cpython-312.pyc b/__pycache__/crud.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a47f48c6d27b2a97d5108d47ce82d70bbd340924 GIT binary patch literal 2347 zcmds2%}*Og6yLGeYs1*)GoejO>(WNXmCB)@2B8Xtk`O)=_kel`LPBPDT-M*2Sr^<; z2_)2n6ChP`jvRxC6ps84yG@9t-S^e<bJZ}u;3exvIvz9P=yaW93 z(Bdm#8%mW1c1E{Hf0-)I?ah^Gs6xXf8h)+4p$GI$@E~{`E)7nU={FTRU82)vI(wqd zo`R<$wQP=MX8uRH;F$f0#xXj)4H-5H$NcdwWC37K4iISMfCoXA-A;s;mJ3Vu(C{8m zppzH{c5|#NgJY$^vEz7Y@IjeAtkAg*bVQ6KY8{JbiXW=?uiX4*TguajmWV@O(P-PP3ISmxJ<7D^}{7tG?f;Iq;lOQj<2dWH7_V50)B77B&xF>Z5W zEcp9?;|via!2T_?uhcUAqC$sDbol6DnT}QHc!`de>HQP+ej}{d6PLyb=F5)f&oC5< ziq#w@iRK6aiw3Qe>&6M7nqzUk0($MRNZ8}}+zutM^G6=zCYu*W|E~>7QIMYCpJYab6PyhjIT^3upY<`j4;bFMYu^4?P!+P^qr2 znTFkn(kAXUOgXgAz6jsp;7? zG^zA*7UxW?I5m9-Exg9EJ%%sWHPtzbS*$*wKL-BCQ= z=Tnwe6J?$8*{wufnxuI-Qs7yui+8Qr`S0E z5>(iHA_uJICWQQ<4E(Jrq_5^9WRC3i)f8O!hfnRb)=o&2yu62Kl)RcmG)n#gbb{=L m5uG6WJ@xgd2elKV=I zTU*JM7J|+7HUTY;fq-IVr<_$PXHCR=#qhn4_kHijd}=m5q~qiJC7fV{zE{b=u-D*p ztic;Z5ydHDIKa5VMrtrKF#lpRwU`~)8e4&5Ai&^In>q&6op`5J7g3WT1%+3UNv}k;w~)MnqIxLx2!To-r~3{_3)L zo+c8uI-O3tGbyt|Yuj|BF2rMqCy^iwB01K!v|nlCJj)=K5#a~IH)lP#vCaJP^^rr97sg|Op-`fiJ1#l4pPvUSF#6;#r zsM|!OC_+jksSeXFrpwx0meVqYZGK5B_1_}V)6Y*6W4u7u7wFCc-T1nBdyZPa9OSi5 ttgG`|+sF3&X8*Toc*dcl>5Xe|%MbQ(|I7LNhmCJ;>$7|1wZ$)LpFgGNsZ{^~ literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33e0eda5b0583c66ea8a187245526506d8e38602 GIT binary patch literal 2404 zcmah~T})I*6rQ<1dw2K3UD)MU5H_V$w)Ll}KOs$Ht%5(Pp{8h?Zb-;wXP_7F{&emo z3SH6_P1H86q-iRTB)(vvi7$O|zPJy*$+i~PJnoPCfh%?(8H@*$dR)hdYQqhsE4KLXwk^3N4R0?=Tb$~1>MZyp z21XL1(rjUY;vwR@gyK~+G~8DFRK|!_Iz{}K(B_#iXzwUfD~cpg(uNx_ttzbsF$q%t zaK{Ty=u{n4NW~>}({}AkJlV7j$W%UOUnT~vBO#c=o{vmKqYPLnk|>8nfrZGyx(nn($kTP?7ITI+u^&ePltn*E*D(e@ESDQ7 z$R#8(8U=H&(m99D%b%fh_$T=sj$v?^X<&w{2|MiwHzhLQ2q&T&?ML42JL6F1^igId z`nsrd)=g*noGzPJAQ0U;bI{#2a|eGhj)ecM;}# z7)Svuf{A3|UgU)$_i!xUS?@dDQWkjnA&4aLf*z2(@?A@NYu0$HOXj{ z(ILxmDWl}3#C69t-4UlhktUS;2z5=%h6)ftv05Nd?Mi};5UwZSv`hQFn1zcm*;DXT zxkd)O9Y+KnjYd6OS(C6LNDEBo5Re>t;zOaxveB|&v`n$-eTzm%?$}+;xMwuY$SZ9J zpU60L2titV z%J`tZAiA;&%avD{MC7fSnZQ}es~dRqzQWDc52AvMGf?Q!RN9RWrbkkQ)r(N%0w&=S zCjA4W{e?rUSRU=5R;Z+Ake(?G9@s>NiQmZELSZKm0LBO}8|@25`}DxAx+SACcWgy7 za$k7`GQY2D$>^T<16JW&kB3#Pk!yp{h0Tn`L=KrEi12_L(3ng+@i|S7?oP8L^NAfV zk-j99yAA!@5xb_t{ls+50TaR$y^o1MI9CqCn){RRCd4ie7GHpA+gyfz=k+%(L;POr z;7TU#xI8GZI^w+*uk^WWrCcxhUZ7s<@f`P_$cFztaAm}%2ibnOQ?yyf{G#}Wuh@0-d{?^RV8y~GA1xKcKtO+J`!Bvnvfc^)V5b_WJ literal 0 HcmV?d00001 diff --git a/__pycache__/models.cpython-312.pyc b/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfa8655523e35e931f5b09e8f5bf86b31bffba07 GIT binary patch literal 989 zcmZXTy=xRf7{+J6KQ4DkObm!|PA4Q@s29=AC(Y=b71$&87|bn0z=x?_~hK z3pgLzR7|$HI0g_v2?HWI5|JI5D2_r@MofwW$Y6Y9bax4kRU<*L?2tW;4 zCrVY%u`|7G{1njEn6Vy37;^Gsb=^ylUsbN6I)%w87smhrM}okSq2wqsKq}Ip{7yOHhZV!o%Q@pjnzC7A ztHySX8#SJ(akIv)8qd~vuEz5l!ED~Bhy7hdGAdqqWv2LlN=GXD4@w(IG-Yh`Zz>=YZoz_IU&~d4YDd^SIDW5TcKKo>J{=T)TmIiLNgU= zX_U47S=HQ?Ol%59Q>MHTmGX#-P&r4(QK)Ks#FFh$*^(Wrdcem?Dl%XRei$VIQw_<- zB4E!`p}aB3q}d2Wk|@|u=n%q3$22fmswUWwihal!(m38@H0=4V@(9sHLR6EGArHr~ z#w|h)#x%Z&*b>w`gwQ16DNQ4uNJ2iLiGI`R%I4ZY-(L=xh=Rc*Cihc58pwl~&=Ksx z9+Z`F8&d}$H^96>#q5oIr)akG?V{DmpA?N&{3xMOpj2=|HW_ z5qIHm8-7wh*9j`R3-7&>b`KmqzkXfOj$k%!K}Igf>=T@x2t&=_4*YBKb|o5{C| zPB(w{$HDI6F9fD6q}gzF7`H5>Ng4%0|AERz8l|gOpL*-%1Z{}>z|$`zm%;qBF~(of ao%2=;cRwthBiPQDUA*{i?KgtW6#ENBU-vx# literal 0 HcmV?d00001 diff --git a/crud.py b/crud.py new file mode 100644 index 0000000..af462f3 --- /dev/null +++ b/crud.py @@ -0,0 +1,41 @@ +from sqlalchemy.orm import Session + +# from . import models, schemas +import models, schemas + + +# 通过id获取用户 +def get_user(db: Session, user_id: int): + return db.query(models.User).filter(models.User.id == user_id).first() + + +# 通过openId岔村用户 +def get_user_by_openId(db: Session, openId: str): + return db.query(models.User).filter(models.User.openId == openId).first() + + +# 分页查询-用户all +def get_users(db: Session, skip: int = 0, limit: int = 100): + return db.query(models.User).offset(skip).limit(limit).all() + + +# 创建用户 +# user:schemas.UserCreate +def create_user(db: Session, user:schemas.UserCreate): + db_user = models.User( + wxid=user.wxid, + openId=user.openId, + sex=user.sex, + country=user.country, + province=user.province, + sourceStr=user.sourceStr, + usertype=user.usertype, + nickname=user.nickname, + wxaccount=user.wxaccount, + remark=user.remark, + smallhead=user.smallhead, + ) + db.add(db_user) + db.commit() + db.refresh(db_user) + return db_user diff --git a/database.py b/database.py new file mode 100644 index 0000000..23bb2c2 --- /dev/null +++ b/database.py @@ -0,0 +1,13 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +SQLALCHEMY_DATABASE_URL = "sqlite:///./kunpeng.db" +# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db" + +engine = create_engine( + SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} +) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +Base = declarative_base() \ No newline at end of file diff --git a/kunpeng.db b/kunpeng.db new file mode 100644 index 0000000000000000000000000000000000000000..efbb3973f2ba7896b76cd100aa7c3efea8d2ad22 GIT binary patch literal 24576 zcmeI&(Qnc~90%|g1`3l^Lk!`;hyOwQRuL!X$ zYhAUhYH8KhRJ$D?)xm7`^5lx+y7f5tRZt1`#<{g|zS!^lzG4KrAOHafKmY;|fB*y_ z009VGTi{bBTY6Tqzw)5ZW_;FF%bju5?X##S_(bwBFoA5%qt!Mgb@vVZKrTxoO_!Kd zvY8lMQA?X|m6FX?%S$dt%w%USFKiMLCCzJHY^zi%*=N4=KgR`3m9@A^yZX98m($4S zcwbGpO?RnB+-94&okrsk$>$cu-&eib+p4Dni3yWLI6MuQ=>9FDQ}@04yQ+6c_UIwm zegtBOd}>Dlb%=CU!T7sCqE*txNWKPrZrF7i- zK_>y8$kQ%yNi$BneAF&K3dY6snWxm*%j_-P^ZoE*&x%-Ft#CP+3ZKpt!;(h54ks+A zuS6m?OD6QfX&}Ws8JdXj3lDlM8H>WH=&_a*$)KK%oKIE~1Kt}3{&*#JI`ezxeUgKP zA`!!6BpUmp(J}K^rdw;et+rQHUk}o0QLokA-y;`4+d{sg*XAi_ns%nn&ujmQVITw` z009U<00Izz00bZa0SG_<0z{} zfB*y_009U<00Izz00bcL9}8sCj{PK+OP6zte-`Nb|LRBo*dPD_2tWV=5P$##AOHaf zKmY;|xWNK>eQj9(-{4Oemj(d{KmY;|fB*y_009U<00I!OEUf?WEr0+7AOHafKmY;| OfB*y_009Wxe1Sh!eKZUJ literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..77ded4d --- /dev/null +++ b/main.py @@ -0,0 +1,53 @@ +from fastapi import Depends, FastAPI, HTTPException +from sqlalchemy.orm import Session + +# from . import crud, models, schemas +import crud, models, schemas +from database import SessionLocal, engine +# 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() + + +# 默认首页 +@app.get("/") +async def root(): + return {"message": "Hello World"} + + +# 创建用户 +@app.post("/users/") +# schemas.UserCreate决定了swagger文档 +def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)): + db_user = crud.create_user(db, user) + if db_user: + raise HTTPException(status_code=400, + detail="openId already registered") + return crud.create_user(db=db, user=user) + + +# 分页查询-用户 +@app.get("/users/") +def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): + users = crud.get_users(db, skip=skip, limit=limit) + return users + + +# 根据openId查询用户 +@app.get("/users/{openId}") +def read_user(openId, db: Session = Depends(get_db)): + db_user = crud.get_user_by_openId(db, openId=openId) + if db_user is None: + raise HTTPException(status_code=404, detail="User not found") + return db_user diff --git a/models.py b/models.py new file mode 100644 index 0000000..7bc5a26 --- /dev/null +++ b/models.py @@ -0,0 +1,22 @@ +from sqlalchemy import Boolean, Column, ForeignKey, Integer, String +from sqlalchemy.orm import relationship + +from database import Base +# from .database import Base + +class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True) + wxid = Column(String) + openId = Column(String) + sex = Column(String) #性别 + country = Column(String) #"CN" + province = Column(String) #"Hubei" + sourceStr = Column(String) #:"通过朋友验证消息添加" + usertype = Column(String) + nickname = Column(String) #昵称 + wxaccount = Column(String) #微信号 + remark = Column(String) #备注 + smallhead = Column(String) #头像 + diff --git a/schemas.py b/schemas.py new file mode 100644 index 0000000..d7c3fab --- /dev/null +++ b/schemas.py @@ -0,0 +1,28 @@ +from pydantic import BaseModel + + + + +# 用户信息 +class UserCreate(BaseModel): + password: str + wxid: str + openId: str + sex: str + country: str + province: str + sourceStr: str + usertype: str + nickname: str + wxaccount: str + remark: str + smallhead: str + + + +class User(UserCreate): + id: int + is_active: bool + + class Config: + orm_mode = True \ No newline at end of file