diff --git a/internal/models.py b/internal/models.py index caf5d0c..b13b4fa 100644 --- a/internal/models.py +++ b/internal/models.py @@ -35,6 +35,17 @@ class UserInDB(User): hashed_password: str = None class Label(BaseModel): + labelname:Annotated[str,Field( + title="标签名称", + description="名称不允许为空" + )] + descr:Annotated[str,Field( + title="备注", + default=None, + description="备注允许为空" + )] + +class MoreLable(Label): id:Annotated[int,Field( title="标签id", description="主键自增" @@ -48,7 +59,6 @@ class Label(BaseModel): default=None, description="备注允许为空" )] - class Blog(BaseModel): blogtitle:Annotated[str,Field( diff --git a/main.py b/main.py index 0564bb7..4270087 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,7 @@ from slowapi.middleware import SlowAPIMiddleware from slowapi import _rate_limit_exceeded_handler from limiter_config import limiter -from routers import blogtype, usermanage,blogmanage,classticmanage,commonlinkmanage,labelmanage,diarymanage,diarytype,statistic,disbursemanage,photomanage +from routers import bloglabel, blogtype, usermanage,blogmanage,classticmanage,commonlinkmanage,diarymanage,diarytype,statistic,disbursemanage,photomanage app=FastAPI() app.state.limiter = limiter app.add_exception_handler(429, _rate_limit_exceeded_handler) @@ -21,7 +21,7 @@ app.include_router(diarymanage.router) app.include_router(diarytype.router) app.include_router(classticmanage.router) app.include_router(commonlinkmanage.router) -app.include_router(labelmanage.router) +app.include_router(bloglabel.router) app.include_router(statistic.router) app.include_router(disbursemanage.router) app.include_router(photomanage.router) diff --git a/routers/labelmanage.py b/routers/bloglabel.py similarity index 97% rename from routers/labelmanage.py rename to routers/bloglabel.py index 9812258..d41c565 100644 --- a/routers/labelmanage.py +++ b/routers/bloglabel.py @@ -4,8 +4,8 @@ from internal.database import fetch_one, fetch_all, execute_query, response_succ from dependencies import get_current_active_user router = APIRouter( - prefix="/labels", - tags=['标签管理'] + prefix="/bloglabels", + tags=['博客标签'] ) # 获取列表 @router.get("/list") diff --git a/routers/blogmanage.py b/routers/blogmanage.py index 35739d3..bff4e0a 100644 --- a/routers/blogmanage.py +++ b/routers/blogmanage.py @@ -1,4 +1,4 @@ -from fastapi import Depends, APIRouter, Query, Path,Request +from fastapi import Depends, APIRouter, Query, Path, Request from internal.models import * from datetime import date from internal.database import ( @@ -15,16 +15,18 @@ from limiter_config import limiter router = APIRouter(prefix="/blogs", tags=["博客管理"]) # 获取列表 + + @router.get("/list") -@limiter.limit("5/minute") -async def blog_list(request: Request,page: int = Query(None), page_size: int = Query(None)): +# @limiter.limit("5/minute") +async def blog_list(request: Request, page: int = Query(None), page_size: int = Query(None)): limit_clause = "" if page is not None and page_size is not None: offset = (page - 1) * page_size limit_clause = f"LIMIT {page_size} OFFSET {offset}" # 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表 select_query = f""" - SELECT blogs.id,blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink, + SELECT blogs.id,blogs.blogtitle, blogs.blogcontent,blogs.readnum, blogs.create_at, blogs.imglink, blogs.wordcount, blogtypes.typename,JSON_ARRAYAGG(labels.labelname) AS labelnames FROM blogs LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id @@ -45,7 +47,7 @@ async def blog_list(request: Request,page: int = Query(None), page_size: int = Q @router.get("/list/{id}") @limiter.limit("5/minute") -async def blog_one(request:Request,id: int): +async def blog_one(request: Request, id: int): # 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表 select_query = """ @@ -60,7 +62,7 @@ async def blog_one(request:Request,id: int): # 博客新增 @router.post("/add") @limiter.limit("5/minute") -async def blog_add(request:Request,blog: Blog, labels: list[Label], _: User = Depends(get_current_active_user)): +async def blog_add(request: Request, blog: Blog, labels: list[MoreLable], _: User = Depends(get_current_active_user)): select_query = "SELECT * FROM blogs WHERE blogtitle = %s" existing_blog = fetch_one(select_query, (blog.blogtitle,)) raise_if_exists(existing_blog, "Blog already exists") @@ -80,7 +82,7 @@ async def blog_add(request:Request,blog: Blog, labels: list[Label], _: User = De # 博客删除 @router.delete("/delete/{id}") @limiter.limit("5/minute") -async def blog_delete(request:Request,id: str = Path(description="博客id")): +async def blog_delete(request: Request, id: str = Path(description="博客id")): select_query = "SELECT * FROM blogs WHERE id = %s" existing_blog = fetch_one(select_query, (id,)) raise_if_not_found(existing_blog, "blog not found") @@ -88,10 +90,10 @@ async def blog_delete(request:Request,id: str = Path(description="博客id")): execute_query(insert_query, (id,)) return response_success(message="blog delete success") - +# 博客修改 @router.put("/update/{id}") @limiter.limit("5/minute") -async def blog_update(request:Request,id: int, blog: Blog, labels: list[Label], _: User = Depends(get_current_active_user)): +async def blog_update(request: Request, id: int, blog: Blog, labels: list[MoreLable], _: User = Depends(get_current_active_user)): # 检查要编辑的博客是否存在 select_query = "SELECT * FROM blogs WHERE id = %s" existing_blog = fetch_one(select_query, (id,)) @@ -115,12 +117,22 @@ async def blog_update(request:Request,id: int, blog: Blog, labels: list[Label], execute_query(insert_label_query, (id, label.id)) return response_success("blog update sucess") +# 修改次数 + +@router.put("/update/{id}/readnum") +@limiter.limit("5/minute") +async def blog_update_num(request: Request, id: int): + update_query ="UPDATE blogs SET readnum = readnum + 1 WHERE id = %s" + execute_query(update_query,(id,)) + return response_success("blog update sucess") # 博客模糊查询 + + @router.get("/search") -@limiter.limit("5/minute") +# @limiter.limit("5/minute") async def blog_list_search( - request:Request, + request: Request, blogtitle: str = Query(None, description="博客标题"), typename: str = Query(None, description="博客类型"), start_date: str = Query(None, description="开始时间"), @@ -155,7 +167,7 @@ async def blog_list_search( # 根据id查询博客 @router.get("/search/{id}") @limiter.limit("5/minute") -async def get_id_blog(request:Request,id: str = Path(description="博客id")): +async def get_id_blog(request: Request, id: str = Path(description="博客id")): select_query = """SELECT blogs.id, blogtitle, blogcontent,wordcount, blogs.typeid, blogs.descr,JSON_ARRAYAGG(labels.id) AS labelnames,imglink FROM blogs LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id LEFT JOIN blog_label ON blogs.id = blog_label.blogid @@ -173,4 +185,3 @@ async def get_id_blog(request:Request,id: str = Path(description="博客id")): except json.JSONDecodeError: blog_list['labelnames'] = [] return response_success(data=blog_list, message="blog search success") - diff --git a/routers/blogtype.py b/routers/blogtype.py index db1d41e..d17b750 100644 --- a/routers/blogtype.py +++ b/routers/blogtype.py @@ -24,7 +24,7 @@ async def type_add(type:Type): # 单条数据查询 @router.get("/list/search") -async def type_search(typename:str=Query(description="类型名称")): +async def type_search(typename:str=Query(None,description="类型名称")): select_query="SELECT id,typename,descr FROM blogtypes WHERE 1=1 " params=[] if typename: diff --git a/routers/diarymanage.py b/routers/diarymanage.py index aabcc2d..bcffd75 100644 --- a/routers/diarymanage.py +++ b/routers/diarymanage.py @@ -1,4 +1,4 @@ -from fastapi import Depends, APIRouter, Query, Path +from fastapi import Depends, APIRouter, Query, Path,Request from internal.models import * from internal.database import ( fetch_one, @@ -92,9 +92,16 @@ async def diary_update(id: int, diary: Diary, _: User = Depends(get_current_acti execute_query(update_query, update_data) return response_success("diary update sucess") +@router.put("/update/{id}/readnum") +# @limiter.limit("5/minute") +async def diary_update_num(request: Request, id: int): + update_query ="UPDATE diarys SET readnum = readnum + 1 WHERE id = %s" + execute_query(update_query,(id,)) + return response_success("diary update sucess") + # 日记模糊查询 -@router.get("/list/search") +@router.get("/search") async def diary_list_search( diarytitle: str = Query(None, description="日记标题"), typename: str = Query(None, description="日记类型"), @@ -134,7 +141,4 @@ async def get_id_diary(id: str = Path(description="日记id")): """ diary_list = execute_query(select_query, (id,)) - return response_success(data=diary_list, message="diary search success") - - -# 我就测试一下 + return response_success(data=diary_list, message="diary search success") \ No newline at end of file diff --git a/routers/statistic.py b/routers/statistic.py index 4dc59f3..91e6e0d 100644 --- a/routers/statistic.py +++ b/routers/statistic.py @@ -9,8 +9,6 @@ router = APIRouter( tags=['统计'] ) # 统计编辑量 - - @router.get("/list") async def statistic_list(): select_query = """SELECT DATE(create_at) AS date,COUNT(*) AS writCount FROM