From bc517de91387213eecc18182a12f07219b3b47b6 Mon Sep 17 00:00:00 2001 From: Miyamizu-MitsuhaSang <2510681107@qq.com> Date: Thu, 21 Aug 2025 09:50:30 +0800 Subject: [PATCH] =?UTF-8?q?dict.py:=20-=E6=96=B0=E5=A2=9E=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E4=B8=8A=E4=BC=A0xlsx=E8=A1=A8=E6=A0=BC=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=BF=9B=E8=A1=8C=E6=89=B9=E9=87=8F=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/sqldialects.xml | 1 + app/api/admin/dict.py | 11 +++++------ app/api/search.py | 4 +--- app/models/__init__.py | 2 +- scripts/update_fr.py | 8 ++++++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 4f0d6ed..74756e4 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/app/api/admin/dict.py b/app/api/admin/dict.py index 02cbabf..7e97ba1 100644 --- a/app/api/admin/dict.py +++ b/app/api/admin/dict.py @@ -2,13 +2,12 @@ import tempfile from pathlib import Path from fastapi import Depends, HTTPException, Request, Query, UploadFile, File -from typing import Literal, Tuple, Union +from typing import Literal, Tuple from tortoise.exceptions import DoesNotExist from tortoise.transactions import in_transaction from app.models.base import User -from app.models.fr import DefinitionFr from app.utils.security import is_admin_user from app.api.admin.router import admin_router import app.models.fr as fr @@ -29,10 +28,9 @@ async def get_wordlist(request: Request, :param page: 显示的表格视窗的页数,起始默认为 1 :param page_size: 控制每页的单词内容条数 :param lang_code: 查询并显示对应语言的单词表 + :param admin_user: 管理员权限校验(自动完成) :return: None """ - if not admin_user[0].is_admin: - raise HTTPException(status_code=403, detail="非管理员,无权限访问") offset = (page - 1) * page_size if lang_code == "fr": total = await fr.DefinitionFr.all().count() @@ -201,8 +199,8 @@ async def add_dict( ) if not created: raise HTTPException(status_code=409, detail="释义已存在") - else: - raise HTTPException(status_code=400, detail="暂不支持语言类型") + else: + raise HTTPException(status_code=400, detail="暂不支持语言类型") @admin_router.post("/dict/update_by_xlsx", deprecated=False) @@ -229,5 +227,6 @@ async def update_by_xlsx( await import_def_fr(path=tmp_path) except Exception as e: raise HTTPException(status_code=500, detail=f"导入失败:{str(e)}") + #TODO: 导入失败后的回滚(删除本次已经添加的内容) return {"message": "导入成功"} diff --git a/app/api/search.py b/app/api/search.py index 61856af..a8369ec 100644 --- a/app/api/search.py +++ b/app/api/search.py @@ -7,9 +7,7 @@ dict_search = APIRouter() @dict_search.get("/search") -async def search( - request: Request, lang_pref: str, query_word: str, user=Depends(get_current_user) -): +async def search(request: Request, lang_pref: str, query_word: str, user= Depends(get_current_user)): word_content = await DefinitionFr.filter( word__icontains=query_word, lang_pref=lang_pref ).values("word", "part_of_speech", "meaning", "example") diff --git a/app/models/__init__.py b/app/models/__init__.py index 3d2eb4e..8c7ac3d 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -1,4 +1,4 @@ from . import signals from .fr import WordlistFr, DefinitionFr, AttachmentFr from .jp import WordlistJp, DefinitionJp, AttachmentJp -from .base import User +from .base import User \ No newline at end of file diff --git a/scripts/update_fr.py b/scripts/update_fr.py index b15d747..c151338 100644 --- a/scripts/update_fr.py +++ b/scripts/update_fr.py @@ -2,7 +2,7 @@ import asyncio from pathlib import Path import pandas as pd -from tortoise import Tortoise +from tortoise import Tortoise, connections from tortoise.exceptions import MultipleObjectsReturned from fastapi import UploadFile @@ -95,7 +95,11 @@ async def import_def_fr( async def main(): await Tortoise.init(config=TORTOISE_ORM) - await DefinitionFr.all().delete() + await DefinitionFr.all().delete() # TRUNCATE TABLE definitions_fr; + conn = connections.get("default") + await conn.execute_script(""" + ALTER TABLE definitions_fr AUTO_INCREMENT = 1; + """) await import_def_fr() # await import_wordlist_fr()