Browse Source

add new

master
panda 8 months ago
parent
commit
0140325f4c
  1. 12
      internal/models.py
  2. 4
      main.py
  3. 4
      routers/bloglabel.py
  4. 37
      routers/blogmanage.py
  5. 2
      routers/blogtype.py
  6. 14
      routers/diarymanage.py
  7. 2
      routers/statistic.py

12
internal/models.py

@ -35,6 +35,17 @@ class UserInDB(User):
hashed_password: str = None hashed_password: str = None
class Label(BaseModel): class Label(BaseModel):
labelname:Annotated[str,Field(
title="标签名称",
description="名称不允许为空"
)]
descr:Annotated[str,Field(
title="备注",
default=None,
description="备注允许为空"
)]
class MoreLable(Label):
id:Annotated[int,Field( id:Annotated[int,Field(
title="标签id", title="标签id",
description="主键自增" description="主键自增"
@ -49,7 +60,6 @@ class Label(BaseModel):
description="备注允许为空" description="备注允许为空"
)] )]
class Blog(BaseModel): class Blog(BaseModel):
blogtitle:Annotated[str,Field( blogtitle:Annotated[str,Field(
title="博客标题", title="博客标题",

4
main.py

@ -9,7 +9,7 @@ from slowapi.middleware import SlowAPIMiddleware
from slowapi import _rate_limit_exceeded_handler from slowapi import _rate_limit_exceeded_handler
from limiter_config import limiter 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=FastAPI()
app.state.limiter = limiter app.state.limiter = limiter
app.add_exception_handler(429, _rate_limit_exceeded_handler) 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(diarytype.router)
app.include_router(classticmanage.router) app.include_router(classticmanage.router)
app.include_router(commonlinkmanage.router) app.include_router(commonlinkmanage.router)
app.include_router(labelmanage.router)
app.include_router(bloglabel.router)
app.include_router(statistic.router) app.include_router(statistic.router)
app.include_router(disbursemanage.router) app.include_router(disbursemanage.router)
app.include_router(photomanage.router) app.include_router(photomanage.router)

4
routers/labelmanage.py → 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 from dependencies import get_current_active_user
router = APIRouter( router = APIRouter(
prefix="/labels",
tags=['标签管理']
prefix="/bloglabels",
tags=['博客标签']
) )
# 获取列表 # 获取列表
@router.get("/list") @router.get("/list")

37
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 internal.models import *
from datetime import date from datetime import date
from internal.database import ( from internal.database import (
@ -15,16 +15,18 @@ from limiter_config import limiter
router = APIRouter(prefix="/blogs", tags=["博客管理"]) router = APIRouter(prefix="/blogs", tags=["博客管理"])
# 获取列表 # 获取列表
@router.get("/list") @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 = "" limit_clause = ""
if page is not None and page_size is not None: if page is not None and page_size is not None:
offset = (page - 1) * page_size offset = (page - 1) * page_size
limit_clause = f"LIMIT {page_size} OFFSET {offset}" limit_clause = f"LIMIT {page_size} OFFSET {offset}"
# 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表 # 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表
select_query = f""" 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 blogs.wordcount, blogtypes.typename,JSON_ARRAYAGG(labels.labelname) AS labelnames
FROM blogs FROM blogs
LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id 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}") @router.get("/list/{id}")
@limiter.limit("5/minute") @limiter.limit("5/minute")
async def blog_one(request:Request,id: int):
async def blog_one(request: Request, id: int):
# 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表 # 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表
select_query = """ select_query = """
@ -60,7 +62,7 @@ async def blog_one(request:Request,id: int):
# 博客新增 # 博客新增
@router.post("/add") @router.post("/add")
@limiter.limit("5/minute") @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" select_query = "SELECT * FROM blogs WHERE blogtitle = %s"
existing_blog = fetch_one(select_query, (blog.blogtitle,)) existing_blog = fetch_one(select_query, (blog.blogtitle,))
raise_if_exists(existing_blog, "Blog already exists") 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}") @router.delete("/delete/{id}")
@limiter.limit("5/minute") @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" select_query = "SELECT * FROM blogs WHERE id = %s"
existing_blog = fetch_one(select_query, (id,)) existing_blog = fetch_one(select_query, (id,))
raise_if_not_found(existing_blog, "blog not found") 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,)) execute_query(insert_query, (id,))
return response_success(message="blog delete success") return response_success(message="blog delete success")
# 博客修改
@router.put("/update/{id}") @router.put("/update/{id}")
@limiter.limit("5/minute") @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" select_query = "SELECT * FROM blogs WHERE id = %s"
existing_blog = fetch_one(select_query, (id,)) 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)) execute_query(insert_label_query, (id, label.id))
return response_success("blog update sucess") 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") @router.get("/search")
@limiter.limit("5/minute")
# @limiter.limit("5/minute")
async def blog_list_search( async def blog_list_search(
request:Request,
request: Request,
blogtitle: str = Query(None, description="博客标题"), blogtitle: str = Query(None, description="博客标题"),
typename: str = Query(None, description="博客类型"), typename: str = Query(None, description="博客类型"),
start_date: str = Query(None, description="开始时间"), start_date: str = Query(None, description="开始时间"),
@ -155,7 +167,7 @@ async def blog_list_search(
# 根据id查询博客 # 根据id查询博客
@router.get("/search/{id}") @router.get("/search/{id}")
@limiter.limit("5/minute") @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 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 `blogtypes` ON blogs.typeid = blogtypes.id
LEFT JOIN blog_label ON blogs.id = blog_label.blogid 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: except json.JSONDecodeError:
blog_list['labelnames'] = [] blog_list['labelnames'] = []
return response_success(data=blog_list, message="blog search success") return response_success(data=blog_list, message="blog search success")

2
routers/blogtype.py

@ -24,7 +24,7 @@ async def type_add(type:Type):
# 单条数据查询 # 单条数据查询
@router.get("/list/search") @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 " select_query="SELECT id,typename,descr FROM blogtypes WHERE 1=1 "
params=[] params=[]
if typename: if typename:

14
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.models import *
from internal.database import ( from internal.database import (
fetch_one, 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) execute_query(update_query, update_data)
return response_success("diary update sucess") 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( async def diary_list_search(
diarytitle: str = Query(None, description="日记标题"), diarytitle: str = Query(None, description="日记标题"),
typename: str = Query(None, description="日记类型"), typename: str = Query(None, description="日记类型"),
@ -135,6 +142,3 @@ async def get_id_diary(id: str = Path(description="日记id")):
""" """
diary_list = execute_query(select_query, (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")
# 我就测试一下

2
routers/statistic.py

@ -9,8 +9,6 @@ router = APIRouter(
tags=['统计'] tags=['统计']
) )
# 统计编辑量 # 统计编辑量
@router.get("/list") @router.get("/list")
async def statistic_list(): async def statistic_list():
select_query = """SELECT DATE(create_at) AS date,COUNT(*) AS writCount FROM select_query = """SELECT DATE(create_at) AS date,COUNT(*) AS writCount FROM

Loading…
Cancel
Save