# Hertz Studio Django Wiki 接口文档 - 基础路径: `/api/wiki/` - 统一响应: 使用 `HertzResponse`,结构如下(参考 `hertz_studio_django_utils/responses/HertzResponse.py`) ```json { "success": true, "code": 200, "message": "操作成功", "data": {} } ``` - 路由挂载: 项目主路由中已通过 `path('api/wiki/', include('hertz_studio_django_wiki.urls'))` 挂载(`hertz_server_django/urls.py:29`)。 - 认证说明: 标注“需要登录”的接口需在请求头携带 `Authorization: Bearer `(`hertz_studio_django_auth/utils/decorators/auth_decorators.py:1`)。 ## 一、知识分类管理 ### (1)获取分类列表 - 方法: `GET` - 路径: `/api/wiki/categories/` - 认证: 不需要 - 查询参数: - `page`: 页码,默认 `1` - `page_size`: 每页数量,默认 `10` - `name`: 分类名称关键字 - `parent_id`: 父分类ID(`0` 表示顶级) - `is_active`: `true/false` - 实现: `wiki_category_list`(`hertz_studio_django_wiki/views.py:41`) - 请求示例: ```bash curl "http://localhost:8000/api/wiki/categories/?page=1&page_size=10&name=技术" ``` - 返回示例: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "list": [ { "id": 1, "name": "技术文档", "description": "技术相关文档", "parent": null, "parent_name": null, "sort_order": 1, "is_active": true, "created_at": "2024-01-01T10:00:00Z", "updated_at": "2024-01-01T10:00:00Z", "children_count": 3, "articles_count": 15, "full_path": "技术文档" } ], "total": 1, "page": 1, "page_size": 10 } } ``` ### (2)获取树形分类 - 方法: `GET` - 路径: `/api/wiki/categories/tree/` - 认证: 不需要 - 实现: `wiki_category_tree`(`hertz_studio_django_wiki/views.py:101`) - 请求示例: ```bash curl "http://localhost:8000/api/wiki/categories/tree/" ``` - 返回示例: ```json [ { "id": 1, "name": "技术文档", "description": "技术相关文档", "sort_order": 1, "is_active": true, "articles_count": 15, "children": [ {"id": 2, "name": "后端", "children": []} ] } ] ``` ### (3)创建分类 - 方法: `POST` - 路径: `/api/wiki/categories/create/` - 认证: 不需要 - 请求体: `application/json` - 字段: `name`, `description`, `parent`, `sort_order`, `is_active` - 实现: `wiki_category_create`(`hertz_studio_django_wiki/views.py:136`) - 请求示例: ```http POST /api/wiki/categories/create/ Content-Type: application/json { "name": "新分类", "description": "分类描述", "parent": null, "sort_order": 10, "is_active": true } ``` - 返回示例: ```json { "success": true, "code": 200, "message": "知识分类创建成功", "data": { "id": 5, "name": "新分类", "description": "分类描述", "parent": null, "parent_name": null, "sort_order": 10, "is_active": true, "created_at": "2025-11-17T10:00:00Z", "updated_at": "2025-11-17T10:00:00Z", "children_count": 0, "articles_count": 0, "full_path": "新分类" } } ``` ### (4)分类详情 - 方法: `GET` - 路径: `/api/wiki/categories/{category_id}/` - 认证: 不需要 - 实现: `wiki_category_detail`(`hertz_studio_django_wiki/views.py:178`) - 请求示例: ```bash curl "http://localhost:8000/api/wiki/categories/1/" ``` - 返回示例: 同“获取分类列表”中的单项结构。 ### (5)更新分类 - 方法: `PUT`(支持部分更新) - 路径: `/api/wiki/categories/{category_id}/update/` - 认证: 不需要 - 请求体: `application/json` - 可更新字段: `name`, `description`, `parent`, `sort_order`, `is_active` - 实现: `wiki_category_update`(`hertz_studio_django_wiki/views.py:220`) - 请求示例: ```http PUT /api/wiki/categories/1/update/ Content-Type: application/json { "name": "更新后的分类名", "description": "更新后的描述", "sort_order": 20 } ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识分类更新成功", "data": {"id": 1, "name": "更新后的分类名"}} ``` ### (6)删除分类 - 方法: `DELETE` - 路径: `/api/wiki/categories/{category_id}/delete/` - 认证: 不需要 - 行为: 软删除(将 `is_active=false`);若存在子分类或文章将返回错误 - 实现: `wiki_category_delete`(`hertz_studio_django_wiki/views.py:270`) - 请求示例: ```bash curl -X DELETE "http://localhost:8000/api/wiki/categories/1/delete/" ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识分类删除成功"} ``` ## 二、知识文章管理 ### (1)获取文章列表 - 方法: `GET` - 路径: `/api/wiki/articles/` - 认证: 不需要 - 查询参数: - `page`, `page_size` - `title`: 标题关键字 - `category_id`: 分类ID - `author_id`: 作者ID - `status`: `draft|published|archived` - 实现: `wiki_article_list`(`hertz_studio_django_wiki/views.py:318`) - 请求示例: ```bash curl "http://localhost:8000/api/wiki/articles/?page=1&page_size=10&category_id=1&status=published" ``` - 返回示例: ```json { "success": true, "code": 200, "message": "操作成功", "data": { "list": [ { "id": 101, "title": "如何部署Django", "summary": "部署流程概览", "image": null, "category_name": "技术文档", "author_name": "alice", "status": "published", "status_display": "已发布", "view_count": 42, "created_at": "2025-11-01T09:00:00Z", "updated_at": "2025-11-10T09:00:00Z", "published_at": "2025-11-10T09:00:00Z" } ], "total": 1, "page": 1, "page_size": 10 } } ``` ### (2)创建文章(需要登录) - 方法: `POST` - 路径: `/api/wiki/articles/create/` - 认证: 需要登录(`Authorization: Bearer `) - 请求体: `application/json` - 字段: `title`, `content`, `summary`, `image`, `category`, `status`, `tags`, `sort_order` - 实现: `wiki_article_create`(`hertz_studio_django_wiki/views.py:384`) - 请求示例: ```http POST /api/wiki/articles/create/ Authorization: Bearer Content-Type: application/json { "title": "新文章", "content": "文章内容...", "summary": "文章摘要...", "image": null, "category": 1, "status": "draft", "tags": "django,部署", "sort_order": 10 } ``` - 返回示例: ```json { "success": true, "code": 200, "message": "知识文章创建成功", "data": { "id": 102, "title": "新文章", "content": "文章内容...", "summary": "文章摘要...", "image": null, "category": 1, "category_name": "技术文档", "author": 2, "author_name": "alice", "status": "draft", "status_display": "草稿", "tags": "django,部署", "tags_list": ["django", "部署"], "view_count": 0, "sort_order": 10, "created_at": "2025-11-17T11:00:00Z", "updated_at": "2025-11-17T11:00:00Z", "published_at": null } } ``` ### (3)文章详情 - 方法: `GET` - 路径: `/api/wiki/articles/{article_id}/` - 认证: 不需要 - 行为: 获取详情并增加浏览量 - 实现: `wiki_article_detail`(`hertz_studio_django_wiki/views.py:426`) - 请求示例: ```bash curl "http://localhost:8000/api/wiki/articles/102/" ``` - 返回示例: 同“创建文章”中的完整字段结构,`view_count` 将递增。 ### (4)更新文章 - 方法: `PUT`(支持部分更新) - 路径: `/api/wiki/articles/{article_id}/update/` - 认证: 不需要 - 请求体: `application/json` - 可更新字段: `title`, `content`, `summary`, `image`, `category`, `status`, `tags`, `sort_order` - 实现: `wiki_article_update`(`hertz_studio_django_wiki/views.py:472`) - 请求示例: ```http PUT /api/wiki/articles/102/update/ Content-Type: application/json { "status": "published", "summary": "更新后的摘要" } ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识文章更新成功", "data": {"id": 102, "status": "published"}} ``` ### (5)删除文章 - 方法: `DELETE` - 路径: `/api/wiki/articles/{article_id}/delete/` - 认证: 不需要 - 实现: `wiki_article_delete`(`hertz_studio_django_wiki/views.py:518`) - 请求示例: ```bash curl -X DELETE "http://localhost:8000/api/wiki/articles/102/delete/" ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识文章删除成功"} ``` ### (6)发布文章 - 方法: `POST` - 路径: `/api/wiki/articles/{article_id}/publish/` - 认证: 不需要 - 实现: `wiki_article_publish`(`hertz_studio_django_wiki/views.py:561`) - 请求示例: ```bash curl -X POST "http://localhost:8000/api/wiki/articles/102/publish/" ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识文章发布成功"} ``` - 失败示例(已发布再次发布): ```json {"success": false, "code": 500, "message": "系统错误", "error": "文章已经是发布状态"} ``` ### (7)归档文章 - 方法: `POST` - 路径: `/api/wiki/articles/{article_id}/archive/` - 认证: 不需要 - 实现: `wiki_article_archive`(`hertz_studio_django_wiki/views.py:609`) - 请求示例: ```bash curl -X POST "http://localhost:8000/api/wiki/articles/102/archive/" ``` - 返回示例: ```json {"success": true, "code": 200, "message": "知识文章归档成功"} ``` ## 三、备注 - 文章状态枚举: `draft|published|archived`(`hertz_studio_django_wiki/models.py:35`)。 - 分类软删除通过 `is_active=false` 实现;删除校验会阻止删除存在子分类或文章的分类(`views.py:270`)。 - 文章详情接口会递增 `view_count`(`hertz_studio_django_wiki/models.py:70` 和 `views.py:431`)。