Skip to content

Commit a6f7bc9

Browse files
committed
feat:CORS
1 parent 564ee49 commit a6f7bc9

File tree

8 files changed

+79
-38
lines changed

8 files changed

+79
-38
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
/.venv/
33
uploads/*
44
log/*
5+
.venv
6+
.idea

api/adminapi.py

+24-6
Original file line numberDiff line numberDiff line change
@@ -28,30 +28,46 @@ async def get_admin(current_user: TokenData = Depends(get_current_user)):
2828
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail='非管理员')
2929

3030

31-
@adminapp.get("/alluser", response_model=list[UserOut | None], dependencies=[Depends(get_admin)])
31+
@adminapp.get("/alluser",
32+
response_model=list[UserOut | None],
33+
dependencies=[Depends(get_admin)],
34+
summary='查询所有用户信息',
35+
description='返回用户信息列表')
3236
async def alluserinfo(session: Session = Depends(get_session)):
3337
userlist: list[UserOut | None] = await crud.get_all_user(session=session)
3438
return userlist
3539

3640

37-
@adminapp.get("/is_allow_register", response_model=bool)
41+
@adminapp.get("/is_allow_register",
42+
response_model=bool,
43+
summary='返回是否可以注册',
44+
description='返回是否可以注册')
3845
async def is_allow_register():
3946
return Allow_register
4047

4148

42-
@adminapp.get("/is_limiter", response_model=bool)
49+
@adminapp.get("/is_limiter",
50+
response_model=bool,
51+
summary='返回是否开启接口频率限制',
52+
description='返回bool ')
4353
async def is_limiter():
4454
return limiter.enabled
4555

4656

47-
@adminapp.put("/allow_register", dependencies=[Depends(get_admin)])
57+
@adminapp.put("/allow_register",
58+
dependencies=[Depends(get_admin)],
59+
summary='设置是否允许注册',
60+
description='输入bool')
4861
async def allow_register(allow: bool):
4962
global Allow_register
5063
Allow_register = allow
5164
return '修改成功'
5265

5366

54-
@adminapp.put("/set_limiter", dependencies=[Depends(get_admin)])
67+
@adminapp.put("/set_limiter",
68+
dependencies=[Depends(get_admin)],
69+
summary='设置是否开启接口频率限制',
70+
description='输入bool')
5571
async def set_limiter(allow: bool):
5672
limiter.enabled = allow
5773
if allow:
@@ -60,6 +76,8 @@ async def set_limiter(allow: bool):
6076
return '关闭限制'
6177

6278

63-
@adminapp.delete("/deleteuser")
79+
@adminapp.delete("/deleteuser",
80+
summary = '删除用户',
81+
description = '根据用户名')
6482
async def deleteuser(username, session: Session = Depends(get_session), current_admin=Depends(get_admin)):
6583
return await crud.delete_user(session=session, username=username)

api/postapi.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
postapp = APIRouter()
1010

1111

12-
@postapp.get("/test")
12+
@postapp.get("/test",
13+
summary='测试')
1314
async def userinfo(session: Session = Depends(get_session), current_user: TokenData = Depends(get_current_user)):
1415
return current_user

api/userapi.py

+24-8
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
userapp = APIRouter()
2020

2121

22-
@userapp.post("/token", response_model=Token)
22+
@userapp.post("/token",
23+
response_model=Token,
24+
summary='登录返回获取token',
25+
description='5 pre minute')
2326
@limiter.limit(limit_value="5/minute")
2427
async def login_for_access_token(request: Request, form_data: OAuth2PasswordRequestForm = Depends(),
2528
session: AsyncSession = Depends(get_session)):
@@ -38,7 +41,7 @@ async def login_for_access_token(request: Request, form_data: OAuth2PasswordRequ
3841
return {"access_token": access_token, "token_type": "bearer"}
3942

4043

41-
@userapp.post("/register", description='用户注册', response_model=RegisterSuccess)
44+
@userapp.post("/register", summary='用户注册', response_model=RegisterSuccess)
4245
@limiter.limit(limit_value="5/minute")
4346
async def register(request: Request, user_in: UserCreate, session: AsyncSession = Depends(get_session)):
4447
if get_is_Allow_register():
@@ -49,7 +52,9 @@ async def register(request: Request, user_in: UserCreate, session: AsyncSession
4952
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='不允许注册')
5053

5154

52-
@userapp.get("/pubInfo", response_model=PubUserInfo)
55+
@userapp.get("/pubInfo",
56+
response_model=PubUserInfo,
57+
summary='返回用户公开信息')
5358
@limiter.limit(limit_value="10/minute")
5459
async def publish_user_info(
5560
request: Request,
@@ -63,7 +68,9 @@ async def publish_user_info(
6368
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f'user:{username} not found')
6469

6570

66-
@userapp.get("/info", response_model=UserOut)
71+
@userapp.get("/info",
72+
response_model=UserOut,
73+
summary='返回当前登录用户信息')
6774
async def userinfo(session: AsyncSession = Depends(get_session), current_user: TokenData = Depends(get_current_user)):
6875
user = await crud.findUser_by_name(session, current_user.username)
6976
if user is not None:
@@ -72,7 +79,9 @@ async def userinfo(session: AsyncSession = Depends(get_session), current_user: T
7279
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f'user:{current_user.username} not found')
7380

7481

75-
@userapp.put("/update_username", response_model=UpdateSuccess)
82+
@userapp.put("/update_username",
83+
response_model=UpdateSuccess,
84+
summary='更新用户名')
7685
async def update_username(old_password: str, username_new: str,
7786
session: AsyncSession = Depends(get_session),
7887
current_user: TokenData = Depends(get_current_user)):
@@ -84,7 +93,9 @@ async def update_username(old_password: str, username_new: str,
8493
return r
8594

8695

87-
@userapp.put("/update_password", response_model=UpdateSuccess)
96+
@userapp.put("/update_password",
97+
response_model=UpdateSuccess,
98+
summary='更新密码')
8899
async def update_password(old_password: str, password_new: str,
89100
session: AsyncSession = Depends(get_session),
90101
current_user: TokenData = Depends(get_current_user)):
@@ -96,7 +107,9 @@ async def update_password(old_password: str, password_new: str,
96107
return r
97108

98109

99-
@userapp.put("/update_avatar", response_model=UploadSuccess)
110+
@userapp.put("/update_avatar",
111+
response_model=UploadSuccess,
112+
summary='更新用户头像')
100113
@limiter.limit(limit_value="5/minute")
101114
async def update_username(request: Request, avatar_new: UploadFile, session: AsyncSession = Depends(get_session),
102115
current_user: TokenData = Depends(get_current_user)):
@@ -105,7 +118,10 @@ async def update_username(request: Request, avatar_new: UploadFile, session: Asy
105118
return r
106119

107120

108-
@userapp.post("/upload_file/", response_model=UploadSuccess, dependencies=[Depends(get_current_user)])
121+
@userapp.post("/upload_file/",
122+
response_model=UploadSuccess,
123+
dependencies=[Depends(get_current_user)],
124+
summary='图片文件上传')
109125
@limiter.limit(limit_value="5/minute")
110126
async def create_upload_file(request: Request, file: UploadFile):
111127
return await upload(file)

app.py

+11-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import uvicorn
22
from fastapi import FastAPI
3+
from fastapi.middleware.cors import CORSMiddleware
34
from uvicorn.config import LOGGING_CONFIG
45

56
from api.adminapi import adminapp
@@ -11,33 +12,30 @@
1112
app = FastAPI(
1213
title='api docs',
1314
version='1.0',
14-
description='接口文档'
1515
)
1616

17-
18-
@app.on_event("startup")
19-
async def startup():
20-
...
21-
22-
23-
@app.on_event("shutdown")
24-
async def shutdown():
25-
...
17+
app.add_middleware(
18+
CORSMiddleware,
19+
allow_origins=Config['allow_origins'],
20+
allow_origin_regex=Config['allow_origin_regex'],
21+
allow_methods=["*"],
22+
allow_headers=["*"],
23+
)
2624

2725

2826
app.include_router(userapp, prefix='/api/user', tags=['用户'])
2927
app.include_router(adminapp, prefix='/api/admin', tags=['管理员'])
3028
app.include_router(postapp, prefix='/api/post', tags=['post'])
3129

32-
log_cfg = my_LOGGING_CONFIG if Config['Development'] else LOGGING_CONFIG
33-
30+
log_cfg = LOGGING_CONFIG if Config['Development'] else my_LOGGING_CONFIG # Development 输出到终端
3431

3532
if __name__ == '__main__':
33+
print('后台运行: nohup python3 app.py > ./log/output.log 2>&1 &\n')
3634
c = Config["uvicorn"]
3735
uvicorn.run(app='app:app',
3836
host=c["host"],
3937
port=c["port"],
4038
reload=Config['Development'],
4139
workers=c['workers'],
42-
log_config=log_cfg,
40+
# log_config=log_cfg,
4341
)

config.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# 开发模式输出更多信息
22
Development: true
3+
#Development: false
4+
5+
# 跨域规则
6+
allow_origins:
7+
- '*'
8+
- 'http://127.0.0.0:8000'
9+
10+
# 匹配一个字符串
11+
allow_origin_regex: 'https://.*\.unrun\.top'
12+
313
# mysql数据库信息
414
databases:
515
host: 127.0.0.1
@@ -15,14 +25,18 @@ uvicorn:
1525
# 使用多个工作进程
1626
workers: 1
1727

28+
1829
# token密钥
1930
SECRET_KEY: "b7a9563b93f709f4caa6cf63be75e094faa9d288e8d36ca259f6f056c818166"
31+
2032
ALGORITHM: "HS256"
33+
2134
# token过期时间
2235
ACCESS_TOKEN_EXPIRE_MINUTES: 1440
2336

2437
# 默认管理员
2538
Default_Administrator: 'admin'
39+
2640
# 默认密码
2741
Default_Passwd: 'nHYjlSm773RlLq'
2842

config/__init__.py

-8
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
1-
import logging
21
import os
32
import yaml
43

54
with open(os.path.join(os.path.dirname(__file__), '..', 'config.yaml'), 'r', encoding='utf8') as f:
65
Config = yaml.safe_load(f)
76

8-
if Config['Development'] is False:
9-
logging.basicConfig()
10-
handler = logging.FileHandler('./log/sqlalchemy.log')
11-
handler.setLevel(logging.INFO)
12-
handler.setFormatter(logging.Formatter('%(levelname)s [%(asctime)s] - %(name)s - %(message)s'))
13-
logging.getLogger('sqlalchemy.engine').addHandler(handler)
14-
157
if __name__ == '__main__':
168
print(Config)

sql/database.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
DATABASE_URL = f'mysql+aiomysql://{d["username"]}:{d["password"]}@{d["host"]}:{d["port"]}/{d["dbname"]}'
99
engine = create_async_engine(
1010
DATABASE_URL,
11-
echo=True,
1211
hide_parameters=True,
1312
connect_args={'charset': 'utf8mb4'}
1413
)
1514
engine.echo = 'debug' if Config['Development'] else True
16-
# engine.echo = False
15+
engine.echo = False
16+
1717
async_session = async_sessionmaker(bind=engine, expire_on_commit=False, class_=AsyncSession)
1818
Base = declarative_base()
1919

0 commit comments

Comments
 (0)