From 03f0761974a46314382f214bba9609a01586f47c Mon Sep 17 00:00:00 2001 From: lookerzz <1031516901@qq.com> Date: Sun, 20 Sep 2026 19:45:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/config.py | 6 ++++++ core/database.py | 33 +++++++++++++++++++++++++++++++++ main.py | 15 ++++++++++++--- middleware.py | 9 +++++++++ requirements.txt | 5 +++++ schemas/common.py | 10 ++++++++++ 6 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 schemas/common.py diff --git a/core/config.py b/core/config.py index e69de29..437375f 100644 --- a/core/config.py +++ b/core/config.py @@ -0,0 +1,6 @@ +"mysql+pymysql://root:123456@localhost/fastapi_db?charset=utf8mb4" + +database_connect_user = 'root' +database_connect_password = '123456' +database_connect_ip = 'localhost' +database_connect_database_name = 'student_manager' \ No newline at end of file diff --git a/core/database.py b/core/database.py index e69de29..874c6ef 100644 --- a/core/database.py +++ b/core/database.py @@ -0,0 +1,33 @@ +''' +1.此文件已经配置 engine 和 SessionLocal . +由于还没合库,需要自己去 /core/database 配置库名。默认为 student_manager +具体配置如下 +用户:root +密码:123456 +IP:localhost +库名:student_manager + +2.如果还没开始建库,建库时统一将名称命名为 student_manager。 + 如果已经建库或在 models 目录写好Base函数,那先别提交分支,不然合并的时候会出问题,后天合库的时候再说。 +''' + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from .config import ( + database_connect_user, + database_connect_password, + database_connect_ip, + database_connect_database_name, +) +engine = create_engine( #engine负责连接mysql + f"mysql+pymysql://{database_connect_user}:{database_connect_password}@{database_connect_ip}/{database_connect_database_name}?charset=utf8mb4", + pool_size=50 +) +SessionLocal = sessionmaker(bind=engine, autoflush=False,autocommit=False) + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() diff --git a/main.py b/main.py index 235d211..fe32962 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,24 @@ from fastapi import FastAPI from api.example import example_router +from middleware import log_middleware import uvicorn app = FastAPI() +app.middleware("http")(log_middleware) + +#-------------朱婷婷-------------- + +#-------------李玉杰-------------- + +#-------------张义--------------- + +#-------------薄鑫--------------- #-------------张昕浩--------------- app.include_router(example_router) +#-------------曾凯--------------- - - - +#-------------南方宇--------------- #-----------主程序---------------- diff --git a/middleware.py b/middleware.py index e69de29..164a3f2 100644 --- a/middleware.py +++ b/middleware.py @@ -0,0 +1,9 @@ +import time + +async def log_middleware(request, call_next): + start_time = time.time() + response = await call_next(request) + end_time = time.time() + cost = end_time - start_time + print(f'{request.method} {request.url.path} cost={cost}') + return response \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e69de29..0b1a59e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.128.0 +uvicorn==0.40.0 +SQLAlchemy==2.0.49 +PyMySQL==1.1.2 +pydantic==2.13.3 diff --git a/schemas/common.py b/schemas/common.py new file mode 100644 index 0000000..423ea2d --- /dev/null +++ b/schemas/common.py @@ -0,0 +1,10 @@ +''' +两种情况: + 1.响应成功,响应体设置为SuccessResponse。 + 2.响应失败,需要主动调用HTTPExpection报错,不然会产生响应码200,响应失败的问题。 +''' +from pydantic import BaseModel,Field +from typing import Any +class SuccessResponse(BaseModel): + status_code:int=Field(default=200, ge= 200, lt = 300) + msg: Any=Field(default='OK') From 1d085867d693397144fa82275708f777844063a1 Mon Sep 17 00:00:00 2001 From: lookerzz <1031516901@qq.com> Date: Sun, 20 Sep 2026 19:58:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- environment.yml | Bin 0 -> 7994 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/environment.yml b/environment.yml index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f427ba657a2881b01f37ac19c2e2007c960d1e3d 100644 GIT binary patch literal 7994 zcmb`M>u%ym5QY2qO8XA;0*n9yftC2TkFgTM20}922FT>{@Vk4yF8A1NJ9fy75X1pj z^{G?WZvXf1!7bh1t=(Vli>@AA-`%;PKL2!oxXf+!-9fLl+qsMG;oC2I_4Hop+l_vI z(r;J&%5Qvk()-}A4$|hE0Ny}HB=bPblJ zo4K)Gi7+m5lmXAuo!z}VYVD!)Wx}@6>T~@!maf5X(${mTv|=Bh_p+^Rg}zo_N@AkV zO#|YK?7j-~H_sWm5|0zSx7eP_-m_=$DmmRU! zpQl;{zwKmw!7%p^-&u3&roxj7ODdmMeU`d6X*x-Io_px4?w`xoL*1Wx9}e_)AqLB_ zmkB98UJK7v8t^pV5l!Y1n4buf`F`Yew#QGb4X*|r=otw8EgmV@d5@WDYz!(E67OeO zvzApo#oAH-?e!hpzj@0oT1G;LeIL)1Ecf3xNlhgU!mfC$qB}|lh^QV*=^@@gGPx1S zQS$p-9vsO{^3$VtTdfei7t=DxX_7>PhKY)iSW-@xYf$6jmP1++q#(R ztq@#giSfP8EkfH&*B_7KpywsWGW4LhcCDEvm=bwxv*BUIK@ z@-IS4FR=_^5*h1yD;Dq6X;L9w`JU7y9i|R4lzLcnv!Rccq3?pjC}wQkt$X%0HOto> z{H#9lq_q$d<}PNUO!3Dg#5J#SB$`(GBJuM>TIth+98spfGufKyGpWU%$zCK$l@&hAiKD+}v@km_rSQ)$5 z{?+%^m+ht>QD5j!HmRh_ZZaKhh$#8J^G7;-KXsEOZ8{1ioi#+Im|?`YvtsI5jC#XIZLu+uj2l zxATe~=1M$6HK*?0Hrt}XEGV**D%mxK#=Z9>D^8wEv!Tewt?Zl%6O|?rKh(FfU&(E9 zd?Oo}iK$UoH1`#ky5EH)jK0$}$t}ziOeZ|5^Z+#E1Q`Yvx*ajyH9=H;&V&;tHk;CoW6;pK z`ijkwY)%>~C>VltPZ44JS)17L7M`-*#7Ri0wOuyGb4INH(d(chhAPyht#0eHuSA^2 zpvCqDtP)Oas=Kag-o0ukyLaEcZN_$e2E3Erk?hV?3F@_gi2km~w%!w>h#uVSyBLk_ zw3#SF1wh->vyKnDBB847L33o7xv;H^-KzXS+}bo5dgy0t`mQ{;={@+_PHTupCaAHZ zjDA<2;D|5lIEy?M!#7gfWFVaW-y+}X11az}&`E}i_agmkmFgT&J zJuG>I{wf1q(ZkuWp{9HNUes^$50#eaw#eeN*7CznniF}Ao*aAjNtSW?NRC_2!Y(E< z=9UoM?UvDzcRoXz^{v9+o?TD*Zh~oulLBMeFvXG9j^>9f!WujT8ctzX%962igovcEP;Z*T7z^^WyKe6+f_l z_gPr!S1Y01<}6W(z<&!%&yuEchWTmaD+7F$bGn^r>zfN7)8zC*veX;AN9=_7Y10^Y z;}>;Os|(EYK9t4J6E9bga2v#4jDMSUZ-W8t#RTeKhwQZ&*M68BehUPqN~tPE>Z24jEjW=2c~1 zJw{f7t1x4R$SvPpJc~K{liQ`dyOnJwYqJ3Lp-FZnjMU9y5=4qPwezti8F+v}PBCq= zC(5a5c9L!KaM`>jr%BfB@e%962Io)jugQrtS-`0Z5sVZoSWjv~2`0K}xDy7O?t2u5 zgL~ASM6qebx5X2nGS^uCO?Gl8ciD{895dW|*4@l_7hP|JJgi{R)`W+>Ap1?Extlww z(ame%Ik>l4Xt8Bg24u|^S7msz6;3kEccI2K;X^vk9Lt0@gymfZ8G#=;Av6xb`@VIB z>|RXr?3aB!%vuzLOrpj&;k68B|H<=ZV%IW*RgtAXG|SPW>6gSCn1eUQUamQ|$pOwF oEv{L^vX>Ru_wx*!NuB54f9vxf&pl^hOI;f;7hREGp8x;= literal 0 HcmV?d00001