Skip to content

Commit 9b0e7f0

Browse files
committed
优化user传递逻辑
1 parent f11ff3f commit 9b0e7f0

File tree

14 files changed

+510
-1167
lines changed

14 files changed

+510
-1167
lines changed

fast_tmp/admin/depends.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ async def __get_user_or_none(access_token: Optional[str] = Cookie(None)) -> Opti
5454
return None
5555

5656

57-
async def __get_user(request: Request, user: Optional[User] = Depends(__get_user_or_none)):
58-
if not user:
57+
async def get_user(request: Request, user: Optional[User] = Depends(__get_user_or_none)):
58+
if not user or not user.is_active:
5959
raise NoAuthError
60+
request.scope["user"] = user

fast_tmp/admin/endpoint.py

Lines changed: 12 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,21 @@
44
from pydantic import BaseModel
55
from starlette.requests import Request
66

7-
from fast_tmp.depends.auth import get_current_active_user
87
from fast_tmp.site import ModelAdmin, get_model_site
98

109
from ..models import User
1110
from ..responses import BaseRes, ListDataWithPage
12-
from .depends import __get_user
11+
from .depends import get_user
1312

1413
router = APIRouter()
1514

1615

17-
async def get_data(request: Request) -> dict:
18-
"""
19-
从异步函数里面读取数据
20-
"""
21-
return await request.json()
22-
23-
24-
@router.get("/{resource}/list")
16+
@router.get("/{resource}/list", dependencies=[Depends(get_user)])
2517
async def list_view(
2618
request: Request,
2719
page_model: ModelAdmin = Depends(get_model_site),
2820
perPage: int = 10,
2921
page: int = 1,
30-
user: Optional[User] = Depends(__get_user),
3122
):
3223
datas = await page_model.list(request, perPage, page)
3324
return BaseRes(
@@ -38,15 +29,14 @@ async def list_view(
3829
)
3930

4031

41-
@router.get("/{resource}/prefetch/{field_name}")
32+
@router.get("/{resource}/prefetch/{field_name}", dependencies=[Depends(get_user)])
4233
async def prefetch_view(
4334
request: Request,
4435
field_name: str,
4536
pk: Optional[str] = None,
4637
perPage: Optional[int] = None,
4738
page: Optional[int] = None,
4839
page_model: ModelAdmin = Depends(get_model_site),
49-
user: Optional[User] = Depends(__get_user),
5040
):
5141
"""
5242
对多对多外键进行额外的加载
@@ -55,15 +45,14 @@ async def prefetch_view(
5545
return BaseRes(data=datas)
5646

5747

58-
@router.get("/{resource}/select/{field_name}")
48+
@router.get("/{resource}/select/{field_name}", dependencies=[Depends(get_user)])
5949
async def select_view(
6050
request: Request,
6151
field_name: str,
6252
pk: Optional[str] = None,
6353
perPage: Optional[int] = None,
6454
page: Optional[int] = None,
6555
page_model: ModelAdmin = Depends(get_model_site),
66-
user: Optional[User] = Depends(__get_user),
6756
):
6857
"""
6958
枚举字段的额外加载,主要用于外键
@@ -72,12 +61,11 @@ async def select_view(
7261
return BaseRes(data=datas)
7362

7463

75-
@router.post("/{resource}/patch/{pk}")
64+
@router.post("/{resource}/patch/{pk}", dependencies=[Depends(get_user)])
7665
async def patch_data(
7766
request: Request,
7867
pk: str,
7968
page_model: ModelAdmin = Depends(get_model_site),
80-
user: Optional[User] = Depends(__get_user),
8169
):
8270
"""
8371
内联模式快速修改需要的接口
@@ -87,88 +75,49 @@ async def patch_data(
8775
return BaseRes().dict()
8876

8977

90-
@router.put("/{resource}/update/{pk}")
78+
@router.put("/{resource}/update/{pk}", dependencies=[Depends(get_user)])
9179
async def update_data(
9280
request: Request,
9381
pk: str,
9482
page_model: ModelAdmin = Depends(get_model_site),
95-
user: Optional[User] = Depends(__get_user),
9683
):
9784
data = await request.json()
9885
data = await page_model.put(request, pk, data)
9986
return BaseRes(data=data)
10087

10188

102-
@router.get("/{resource}/update/{pk}")
89+
@router.get("/{resource}/update/{pk}", dependencies=[Depends(get_user)])
10390
async def update_view(
10491
request: Request,
10592
pk: str,
10693
page_model: ModelAdmin = Depends(get_model_site),
107-
user: Optional[User] = Depends(__get_user),
10894
):
10995
data = await page_model.put_get(request, pk)
11096
return BaseRes(data=data)
11197

11298

113-
@router.post("/{resource}/create")
99+
@router.post("/{resource}/create", dependencies=[Depends(get_user)])
114100
async def create(
115101
request: Request,
116102
page_model: ModelAdmin = Depends(get_model_site),
117-
user: Optional[User] = Depends(__get_user),
118103
):
119104
data = await request.json()
120105
await page_model.create(request, data)
121106
return BaseRes(data=data)
122107

123108

124-
@router.delete("/{resource}/delete/{pk}")
109+
@router.delete("/{resource}/delete/{pk}", dependencies=[Depends(get_user)])
125110
async def delete_func(
126111
request: Request,
127112
pk: str,
128113
page_model: ModelAdmin = Depends(get_model_site),
129-
user: Optional[User] = Depends(__get_user),
130114
):
131115
await page_model.delete(request, pk)
132116
return BaseRes()
133117

134118

135-
# def clean_param(field_type, param: str):
136-
# if isinstance(
137-
# field_type, (Integer, DECIMAL, BigInteger, Float, INTEGER, Numeric, SmallInteger)
138-
# ):
139-
# return int(param)
140-
# elif isinstance(field_type, DateTime):
141-
# return datetime.strptime(param, "%Y-%m-%dT%H:%M:%S")
142-
# else:
143-
# return param
144-
#
145-
146-
#
147-
# def search_pk_list(model, request: Request):
148-
# """
149-
# 获取要查询的单个instance的主键
150-
# """
151-
# params = dict(request.query_params)
152-
# pks = get_pk(model)
153-
# w = []
154-
# for k, v in params.items():
155-
# if pks.get(k) is not None:
156-
# field = pks[k]
157-
# if isinstance(
158-
# field.type, (Integer, DECIMAL, BigInteger, Float, INTEGER, Numeric, SmallInteger)
159-
# ):
160-
# w.append(pks[k] == int(v))
161-
# elif isinstance(field.type, DateTime):
162-
# w.append(pks[k] == datetime.strptime(v, "%Y-%m-%dT%H:%M:%S"))
163-
# else:
164-
# w.append(pks[k] == v)
165-
# else:
166-
# return key_error
167-
# return w
168-
169-
170-
class DIDS(BaseModel):
171-
ids: List[int]
119+
# class DIDS(BaseModel):
120+
# ids: List[int]
172121

173122

174123
# todo next version
@@ -181,10 +130,9 @@ class DIDS(BaseModel):
181130
# return BaseRes()
182131

183132

184-
@router.get("/{resource}/schema")
133+
@router.get("/{resource}/schema", dependencies=[Depends(get_user)])
185134
async def get_schema(
186135
request: Request,
187136
page: ModelAdmin = Depends(get_model_site),
188-
user: Optional[User] = Depends(__get_user),
189137
):
190138
return BaseRes(data=page.get_app_page(request))

fast_tmp/admin/model.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

fast_tmp/admin/server.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from fastapi import Depends, FastAPI, Form, Request
66
from fastapi.templating import Jinja2Templates
77
from starlette import status
8-
from starlette.responses import JSONResponse, RedirectResponse
8+
from starlette.responses import RedirectResponse
99
from tortoise.exceptions import BaseORMException
1010

1111
from fast_tmp.admin.site import GroupAdmin, UserAdmin
@@ -36,11 +36,9 @@
3636
admin.exception_handler(BaseORMException)(tortoise_exception_handler)
3737

3838

39-
@admin.post("/", name="index")
40-
@admin.get("/", name="index")
41-
async def index(request: Request, user: Optional[User] = Depends(__get_user_or_none)):
42-
if not user:
43-
return RedirectResponse(request.url_for("admin:login"))
39+
@admin.post("/", name="index", dependencies=[Depends(__get_user_or_none)])
40+
@admin.get("/", name="index", dependencies=[Depends(__get_user_or_none)])
41+
async def index(request: Request):
4442
return templates.TemplateResponse(
4543
"index.html",
4644
{"request": request, "title": admin.title},

0 commit comments

Comments
 (0)