backend of the dict-website
Go to file
Miyamizu-MitsuhaSang 2faebef7f2 更新翻译接口传入参数方式:POST+JSON请求体 2025-09-15 17:39:45 +08:00
.idea jp.py: 2025-08-27 16:41:37 +08:00
app 更新翻译接口传入参数方式:POST+JSON请求体 2025-09-15 17:39:45 +08:00
debug security.py: 2025-08-28 21:27:29 +08:00
migrations/models settings.py: 2025-08-17 16:20:05 +08:00
scripts main.py: 2025-09-15 01:25:18 +08:00
.gitignore Initial Commit 2025-08-07 23:55:37 +08:00
.python-version uv 2025-09-04 13:43:51 +08:00
README.md api docum 2025-09-04 13:50:03 +08:00
README.txt Initial Commit 2025-08-07 23:55:37 +08:00
main.py main.py: 2025-09-15 01:25:18 +08:00
pyproject.toml uv 2025-09-04 13:43:51 +08:00
requirements.txt uv 2025-09-04 13:43:51 +08:00
settings.py main.py: 2025-09-15 01:25:18 +08:00
uv.lock uv 2025-09-04 13:43:51 +08:00

README.md

词典服务器 API 接口文档

项目概述

本项目是一个多语言词典API服务支持法语和日语词典的查询和管理功能。基于FastAPI框架开发提供用户认证、词典搜索、后台管理等功能。

服务器地址: http://127.0.0.1:8000
技术栈: FastAPI, Tortoise ORM, MySQL, Redis, JWT


认证说明

大部分API需要JWT令牌认证。在请求头中包含

Authorization: Bearer <your_jwt_token>

API 接口分类

1. 用户认证模块 (/users)

1.1 用户注册

  • 接口: POST /users/register
  • 描述: 新用户注册
  • 请求体:
{
  "username": "string",
  "password": "string", 
  "lang_pref": "jp" | "fr" | "private",
  "portrait": "string"
}
  • 响应:
{
  "id": "integer",
  "message": "register success"
}
  • 状态码:
    • 200: 注册成功
    • 400: 参数验证失败

1.2 用户登录

  • 接口: POST /users/login
  • 描述: 用户登录获取访问令牌
  • 请求体:
{
  "name": "string",
  "password": "string"
}
  • 响应:
{
  "access_token": "string",
  "token_type": "bearer",
  "user": {
    "id": "integer",
    "username": "string", 
    "is_admin": "boolean"
  }
}
  • 状态码:
    • 200: 登录成功
    • 400: 用户名或密码错误
    • 404: 用户不存在

1.3 用户登出

  • 接口: POST /users/logout
  • 描述: 用户登出,将令牌加入黑名单
  • 需要认证: 是
  • 响应:
{
  "message": "logout ok"
}
  • 状态码:
    • 200: 登出成功
    • 401: 未登录或令牌无效

1.4 更新用户信息

  • 接口: PUT /users/update
  • 描述: 修改用户信息(用户名、密码等)
  • 需要认证: 是
  • 请求体:
{
  "current_password": "string",
  "new_username": "string",
  "new_password": "string",
  "new_language": "jp" | "fr" | "private"
}
  • 状态码:
    • 200: 更新成功
    • 400: 原密码错误或用户名为保留词

2. 词典搜索模块

2.1 词典搜索

  • 接口: POST /search
  • 描述: 根据关键词搜索词典内容
  • 需要认证: 是
  • 请求体:
{
  "query": "string",
  "language": "fr" | "jp",
  "sort": "relevance" | "date",
  "order": "asc" | "des"
}
  • 法语响应示例:
{
  "query": "string",
  "pos": ["n.m.", "v.t."],
  "contents": [
    {
      "pos": "n.m.",
      "chi_exp": "中文解释",
      "eng_explanation": "English explanation", 
      "example": "例句"
    }
  ]
}
  • 日语响应示例:
{
  "query": "string", 
  "pos": ["名词", "动词"],
  "contents": [
    {
      "chi_exp": "中文解释",
      "example": "例句"
    }
  ]
}
  • 状态码:
    • 200: 搜索成功
    • 404: 未找到词条
    • 401: 未授权

2.2 搜索建议

  • 接口: POST /search/list
  • 描述: 获取搜索自动完成建议
  • 需要认证: 是
  • 请求体:
{
  "query": "string",
  "language": "fr" | "jp"
}

3. 管理员模块 (/admin)

注意: 所有管理员接口都需要管理员权限

3.1 获取词典列表

  • 接口: GET /admin/dict

  • 描述: 分页获取词典数据,用于后台管理

  • 需要认证: 管理员权限

  • 查询参数:

    • page: 页码 (默认: 1, 最小: 1)
    • page_size: 每页条数 (默认: 10, 最大: 10)
    • lang_code: 语言代码 ("fr" | "jp", 默认: "fr")
  • 响应:

{
  "total": "integer",
  "data": [
    {
      "word__text": "string",
      "pos": "string", 
      "meaning": "string",
      "example": "string",
      "eng_explanation": "string"
    }
  ]
}

3.2 搜索词条

  • 接口: POST /admin/dict/search_word
  • 描述: 在后台管理中搜索特定词条
  • 需要认证: 管理员权限
  • 请求体:
{
  "word": "string",
  "language": "fr" | "jp",
  "pos": "string"
}
  • 响应:
[
  {
    "id": "integer",
    "word": "string",
    "pos": "string",
    "meaning": "string", 
    "example": "string",
    "eng_explanation": "string"
  }
]

4. 数据模型

4.1 法语词性枚举

n. - 名词
n.f. - 阴性名词  
n.m. - 阳性名词
v. - 动词
v.t. - 及物动词
v.i. - 不及物动词
adj. - 形容词
adv. - 副词
prep. - 介词
pron. - 代词
conj. - 连词
interj. - 感叹词
art. - 冠词

4.2 日语词性枚举

名词, 形容词, 形容动词, 连用, 一段动词, 五段动词, 
助词, 自动词, 他动词, 接尾, 自他动词, 接续, 
惯用, 感叹词, カ変, サ変, 连体, 量词, 代词

5. 错误码说明

状态码 说明
200 请求成功
400 请求参数错误
401 未授权/令牌无效
403 权限不足
404 资源未找到
500 服务器内部错误

6. 使用示例

完整的API调用流程示例

# 1. 用户注册
curl -X POST "http://127.0.0.1:8000/users/register" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "password": "password123",
    "lang_pref": "fr"
  }'

# 2. 用户登录
curl -X POST "http://127.0.0.1:8000/users/login" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "testuser", 
    "password": "password123"
  }'

# 3. 使用返回的token进行词典搜索
curl -X POST "http://127.0.0.1:8000/search" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your_token_here>" \
  -d '{
    "query": "bonjour",
    "language": "fr"
  }'

7. 开发者说明

  • 数据库: 使用MySQL存储词典数据和用户信息
  • 缓存: 使用Redis进行token黑名单管理
  • 认证: JWT令牌有效期为2小时
  • CORS: 支持本地开发环境跨域访问
  • API文档: 启动服务后访问 http://127.0.0.1:8000/docs 查看Swagger文档

8. 部署说明

  1. 安装依赖: pip install -r requirements.txt
  2. 配置数据库连接 (settings.py)
  3. 启动Redis服务
  4. 运行数据库迁移
  5. 启动服务: python main.py

文档版本: 1.0
最后更新: 2025年9月4日