Become a sponsor

本章汇总模块开发过程中的常见问题和解决方案。
Table 'xxx.fastapi_position' doesn't exist 原因:模型定义后未执行建表。
解决:
# 方式一:脚本自动建表
python scripts/init_db.py
# 方式二:Alembic 迁移
alembic revision --autogenerate -m "add position table"
alembic upgrade head
# 方式三:手动建表(参考 model.md 中的 DDL){"code": 1, "msg": "权限不足"} 原因:权限节点未配置或未分配给当前用户角色。
排查步骤:
@permission_required 完全一致原因:unique_fields 配置错误。
排查步骤:
name),不是中文名unique_fieldsservice.add() 或 service.update(),而非直接操作 repo原因:分页参数名不匹配或字段配置错误。
排查步骤:
pageNo 和 pageSize(驼峰)page_like_fields 和 page_eq_fields 中的字段名与模型一致is_delete=0 的记录)原因:_before_delete 钩子检测到关联数据。
解决:先调整引用该记录的其他数据,再执行删除。如岗位被用户引用时,需先修改用户的岗位字段。
batch_delete 端点报 500 错误 原因:batch_delete 端点未声明为 async def。
解决:批量删除端点必须是 async def,因为需要异步读取请求体:
@router.delete('/batchDelete')
async def batch_delete(request: Request):
return await position_service.batch_delete(request)Failed to fetch dynamically imported module 原因:路由组件路径配置错误。
排查步骤:
component 路径与实际文件路径一致component 字段值正确(如 system/position/index)原因:搜索表单的 submit 事件未正确绑定。
排查步骤:
BasicForm 绑定了 @submit="handleSearch" 事件handleSearch 中调用了 reload({ searchInfo: values })page_like_fields 和 page_eq_fields 配置了对应字段原因:openModal 未传入记录数据。
解决:
// 正确:第一个参数 true 表示编辑模式,第二个参数是记录数据
openModal(true, record);原因:v-perm 权限标识与后端不一致。
排查步骤:
v-perm 中的权限字符串与后端 @permission_required 完全一致TableAction 中的 auth 字段是否正确原因:JWT Token 过期或未携带。
解决:
Authorization: Bearer <token>defHttp 自动处理 Token 注入,检查是否正确引入原因:演示模式下写操作被拦截。
解决:将 .env 中的 FASTAPI_DEMO 设为 False,或移除端点上的 @check_demo 装饰器(仅开发阶段)。
原因:数据库或表的字符集不是 UTF-8。
解决:
utf8mb4 字符集ENCODING 'UTF8'在 .env 中开启 SQL 调试:
DB_DEBUG=True重启后所有 SQL 查询都会输出到控制台。
访问 http://127.0.0.1:8031/docs,可以直接在浏览器中测试接口:
如果不确定权限是否配置正确,可以用 admin 账号测试。admin(ID=1)自动跳过所有权限校验。
模块开发常见问题主要集中在:字段类型不匹配、唯一性校验遗漏、软删除过滤缺失、分页参数命名不一致、权限节点未配置等。遇到问题时优先检查后端日志和 Swagger 文档,确认接口入参和返回值是否符合预期。