SenWeaver SenWeaver
首页
  • 介绍
  • 快速开始
  • 目录结构
  • 模块开发

    • 概述
    • 配置
    • 编码
  • 数据库

    • 概述
    • 查询数据
    • 添加数据
    • 更新数据
    • 删除数据
  • 其他

    • 常见问题
在线演示 (opens new window)
赞助
关于
Gitee (opens new window)
Github (opens new window)
首页
  • 介绍
  • 快速开始
  • 目录结构
  • 模块开发

    • 概述
    • 配置
    • 编码
  • 数据库

    • 概述
    • 查询数据
    • 添加数据
    • 更新数据
    • 删除数据
  • 其他

    • 常见问题
在线演示 (opens new window)
赞助
关于
Gitee (opens new window)
Github (opens new window)
  • 指南

    • 介绍
      • 在线预览
      • 系统功能
      • 许可证
    • 快速开始
    • 目录结构
  • 模块开发

    • 概述
    • 配置
    • 编码
  • 数据库

    • 概述
    • 查询数据
    • 添加数据
    • 更新数据
    • 删除数据
  • 其他

    • 常见问题
目录

介绍

SenWeaver (opens new window) 是一款基于FastAPI、SQLModel、Alembic、SQLAlchemy的开源智能开发框架。

提供强大的异步CRUD操作和灵活的端点创建工具,通过诸如自动检测连接条件、动态排序以及偏移量和游标分页等高级功能进行优化。 提供强大的细粒度权限管理,允许对不同级别的资源进行精确访问控制。这包括行级和字段级的数据权限管理,确保每个用户只能访问授权的数据部分。

# 在线预览

http://demo.senweaver.com/ (opens new window) 用户名:admin 密码:senweaver123

# 系统功能

  • 用户管理:支持创建、编辑和删除用户,同时可以为每个用户分配不同的角色
  • 部门管理:支持多层级的组织结构配置(如公司、部门、小组等),方便管理和维护复杂的组织架构
  • 菜单管理:灵活定义系统的导航菜单,包括一级菜单、二级菜单及其子项。
  • 角色管理:为不同角色配置可访问的菜单和页面,实现基于角色的访问控制。
  • 权限管理:数据权限(行权限和字段权限)
  • 代码生成:后端代码自动生成:支持从模型自动生成 API 接口代码
  • 模块系统:支持应用、插件、组件等动态加载
  • 操作日志:详细记录所有正常和异常的操作行为,便于审计和问题排查
  • 登录日志:记录用户每次登录的时间、IP 地址等信息,区分正常和异常登录尝试
  • 接口文档:自动生成在线交互式 API 文档
  • 通知公告:所有用户或特定用户组发布重要通知和公告
  • 文件管理: 支持文件的上传、下载和管理,确保文件的安全性和完整性

# 快速CRUD实现

本平台通过在 API 层编写少量代码,即可实现全面的前端功能自动生成,包括一对一、一对多、多对多关系的数据展示,搜索列配置,列表页生成,功能权限与数据权限管理,API 接口文档自动生成,以及完整的 CRUD 操作支持。该平台不仅显著提高了开发效率,还确保了系统的灵活性、安全性和可维护性。

from senweaver.core.helper import FieldConfig
from typing import List, Union
from senweaver.core.helper import SenweaverFilter, RelationConfig
from senweaver import senweaver_router
from fastapi import APIRouter, Request
from senweaver.utils.response import ResponseBase, success_response
from ..example import module
from ..model.example import Example, ExampleRead
from ..logic.notice_logic import ExampleLogic
router = APIRouter(tags=["example"])

filter_config = SenweaverFilter(
    # 查询过滤条件
    filters={"id": None, "title__contains": None, "message__contains": None,
             "notice_type": None, "level": None, "publish": None},
    # 显示的字段
    fields=['id', 'title', 'level', "publish", 'notice_type', "notice_user", 'notice_dept', 'notice_role',
                  'message', "created_time", "user_count", "read_user_count", 'extra_json', "files"],
    # 列表展示字段
    table_fields=['id', 'title', 'notice_type',
                  "read_user_count", "publish", "created_time"],
    # 字段扩展配置
    extra_kwargs={
        'extra_json': {'read_only': True},
    },
    # 可排序字段
    ordering_fields=['updated_time', 'created_time'],
    # 关系字段
    relationships=[
        RelationConfig(rel=Example.notice_user, attrs=[
                       'id', 'username'], format="{username}", many=True, label="被通知用户", read_only=False, required=True, write_only=False, input_type="api-search-user", callbacks={"select": ExampleLogic.get_notice_user}),
        RelationConfig(
            rel=Example.notice_dept, attrs=[
                'id', 'name'], format="{name}", label="被通知部门", many=True, input_type='api-search-dept'),
        RelationConfig(
            rel=Example.notice_role, attrs=[
                'id', 'name'], format="{name}", label="被通知角色", many=True, read_only=False, input_type='api-search-role')
    ],
    # 扩展字段信息
    extra_fields=[
        FieldConfig(key="files", default=[], annotation=list, write_only=True,
                    label="上传的附件", input_type="json"),
        FieldConfig(key="user_count", default=0, label="用户数量", read_only=True,
                    annotation=int, input_type="field", callbacks={"select": ExampleLogic.get_user_count}),
        FieldConfig(key="read_user_count", default=0, annotation=int, read_only=True,
                    label="已读用户数量", input_type="field", callbacks={"select": ExampleLogic.get_read_user_count})
    ],
)
# 动态创建crud、导入导出等相关路由
_router = senweaver_router(
    module=module,
    model=Example,
    path=f"/example",
    filter_config=filter_config,
    callbacks={"save": ExampleLogic.save},
    custom_router=ExampleLogic.add_custom_router
)
router.include_router(_router)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 许可证

MIT

上次更新: 2025/02/28, 10:58:46
快速开始

快速开始→

最近更新
更多文章>
Theme by Vdoing | Copyright © 2025-2025 SenWeaver | MIT License | 桂ICP备16009365号-9 | 桂公网安备45031202000442号