diff --git a/internal/models.py b/internal/models.py index 6afd342..61958d5 100644 --- a/internal/models.py +++ b/internal/models.py @@ -9,9 +9,6 @@ class Token(BaseModel): class TokenData(BaseModel): username: str = None - - - # User相关的模型 class User(BaseModel): username: Annotated[str,Field( @@ -59,6 +56,20 @@ class Blog(BaseModel): description="备注允许为空" )] +class Classtic(BaseModel): + header:Annotated[str,Field( + title="语录名称", + description="语录名称不允许为空" + )] + text:Annotated[str,Field( + title="语录内容", + description="语录内容不允许为空" + )] + descr:Annotated[str,Field( + title="备注", + default=None, + description="备注允许为空" + )] class TypeList(BaseModel): blogid:Annotated[int,Field( diff --git a/main.py b/main.py index 18a192a..678364e 100644 --- a/main.py +++ b/main.py @@ -4,13 +4,14 @@ from fastapi import Depends, FastAPI, HTTPException, status from dependencies import * from internal.models import Token from fastapi.middleware.cors import CORSMiddleware -from routers import usermanage,typemanage,blogmanage,classticmanage,commonlinkmanage +from routers import usermanage,typemanage,blogmanage,classticmanage,commonlinkmanage,labelmanage app=FastAPI() app.include_router(usermanage.router) app.include_router(typemanage.router) app.include_router(blogmanage.router) app.include_router(classticmanage.router) app.include_router(commonlinkmanage.router) +app.include_router(labelmanage.router) # 解决跨域 app.add_middleware( CORSMiddleware, diff --git a/routers/blogmanage.py b/routers/blogmanage.py index 39ea4ea..c17896a 100644 --- a/routers/blogmanage.py +++ b/routers/blogmanage.py @@ -1,52 +1,79 @@ from fastapi import Depends, APIRouter, status, Query, Path, HTTPException from internal.models import * -from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists,raise_if_not_found +from internal.database import ( + fetch_one, + fetch_all, + execute_query, + response_success, + raise_if_exists, + raise_if_not_found, +) from dependencies import get_current_active_user -router = APIRouter( - prefix="/blogs", - tags=['博客管理'] -) +router = APIRouter(prefix="/blogs", tags=["博客管理"]) + # 获取列表 + + @router.get("/list") async def blog_list(): - select_query = "SELECT blogs.id,blogs.blogtitle,blogs.img,blogs.blogcontent,blogs.readnum,blogs.readminite,blogs.wordcount,`types`.typename,labels.labelname,blogs.descr,blogs.create_at,blogs.update_at FROM blogs LEFT JOIN `types` ON blogs.typeid=types.id JOIN labels ON labels.id=blogs.labelid ORDER BY create_at DESC;" + select_query = """ + SELECT blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.img, + blogs.readminite, blogs.readnum, blogs.wordcount, types.typename, + JSON_ARRAYAGG(labels.labelname) AS labelnames +FROM blogs +LEFT JOIN `types` ON blogs.typeid = types.id +LEFT JOIN blog_label ON blog_label.blogid = blogs.id +LEFT JOIN labels ON blog_label.labelid = labels.id +GROUP BY blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.img, + blogs.readminite, blogs.readnum, blogs.wordcount, types.typename; + + + """ blog_list = fetch_all(select_query) return response_success(blog_list, "blog get list success") + # 博客新增 -@router.post('/add') +@router.post("/add") async def blog_add(blog: Blog, _: 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 is already exists") - insert_query = "INSERT INTO blogs (blogtitle,blogcontent,typeid,descr) VALUES (%s,%s,%s,%s)" + insert_query = ( + "INSERT INTO blogs (blogtitle,blogcontent,typeid,descr) VALUES (%s,%s,%s,%s)" + ) insert_data = (blog.blogtitle, blog.blogcontent, blog.typeid, blog.descr) execute_query(insert_query, insert_data) - return response_success(data=blog,message="blog create success") + return response_success(data=blog, message="blog create success") + # 博客删除 @router.delete("/delete/{id}") async def blog_delete(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") + existing_blog = fetch_one(select_query, (id,)) + raise_if_not_found(existing_blog, "blog not found") insert_query = "DELETE FROM blogs WHERE id = %s" execute_query(insert_query, (id,)) return response_success(message="blog delete success") + # 博客修改 @router.put("/update/{id}") async def blog_put(blog: Blog, 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") - update_query = "UPDATE blogs SET blogtitle=%s,blogcontent=%s,typeid=%s,descr=%s WHERE id=%s;" + select_query = "SELECT * FROM blogs WHERE id=%s" + existing_blog = fetch_one(select_query, (id,)) + raise_if_not_found(existing_blog, "blog not found") + update_query = ( + "UPDATE blogs SET blogtitle=%s,blogcontent=%s,typeid=%s,descr=%s WHERE id=%s;" + ) update_data = (blog.blogtitle, blog.blogcontent, blog.typeid, blog.descr, id) execute_query(update_query, update_data) return response_success("blog update sucess") + # 博客模糊查询 @router.get("/list/search") async def blog_list_search( @@ -71,12 +98,15 @@ async def blog_list_search( params.append(end_date) select_query += " ORDER BY create_at DESC" blog_list = fetch_all(select_query, params=params, fetchall=True) - return response_success(data=blog_list,message="blog serach succuessfully!") + return response_success(data=blog_list, message="blog serach succuessfully!") + # 根据id查询博客 @router.get("/list/search/{id}") -async def get_id_blog(id:str=Path(description="博客id")): - select_query="SELECT * FROM blogs WHERE id=%s" - blog_list=execute_query(select_query,(id,)) - return response_success(data=blog_list,message="blog search success") -# 我就测试一下 \ No newline at end of file +async def get_id_blog(id: str = Path(description="博客id")): + select_query = "SELECT * FROM blogs WHERE id=%s" + blog_list = execute_query(select_query, (id,)) + return response_success(data=blog_list, message="blog search success") + + +# 我就测试一下 diff --git a/routers/classticmanage.py b/routers/classticmanage.py index 4fcab4d..e1e0e80 100644 --- a/routers/classticmanage.py +++ b/routers/classticmanage.py @@ -4,12 +4,31 @@ from internal.database import fetch_one, fetch_all, execute_query, response_succ from dependencies import get_current_active_user router = APIRouter( - prefix="/classtic", + prefix="/classtics", tags=['语录管理'] ) # 获取列表 @router.get("/list") async def classtic_list(): - select_query = "SELECT id,header,TEXT FROM classtics;" + select_query = "SELECT id,header,`text`,descr FROM classtics;" classtic_list = fetch_all(select_query) - return response_success(classtic_list, "classtic get list success") \ No newline at end of file + return response_success(classtic_list, "classtic get list success") + +# 新增 +@router.post("/add") +async def classtic_add(classtic:Classtic): + insert_query="""INSERT INTO classtics (header,`text`,descr) VALUES(%s,%s,%s)""" + insert_value=(classtic.header,classtic.text,classtic.descr) + execute_query(insert_query,insert_value) + return response_success(data=classtic,message="classtic create success") + +# 单条数据查询 +@router.get("/search") +async def classtic_search(header:str=Query(description="语录标题")): + select_query="SELECT header FROM classtics WHERE 1=1 " + params=[] + if header: + select_query+="AND header LIKE %s" + params.append(f"%{header}%") + classtic_query=fetch_all(select_query,params=params,fetchall=True) + return response_success(data=classtic_query,message="classtic search success") diff --git a/routers/labelmanage.py b/routers/labelmanage.py new file mode 100644 index 0000000..38ba8de --- /dev/null +++ b/routers/labelmanage.py @@ -0,0 +1,15 @@ +from fastapi import Depends, APIRouter, status, Query, Path, HTTPException +from internal.models import * +from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists,raise_if_not_found +from dependencies import get_current_active_user + +router = APIRouter( + prefix="/labels", + tags=['标签管理'] +) +# 获取列表 +@router.get("/list") +async def label_list(): + select_query = "SELECT blogs.`blogtitle`,labels.`labelname` FROM blogs LEFT JOIN blog_label ON blog_label.`blogid`=blogs.`id` LEFT JOIN labels ON blog_label.`labelid`=labels.id;" + label_list = fetch_all(select_query) + return response_success(label_list, "label get list success") \ No newline at end of file