Go to file
NOKIAO 35b6bfbd72 fix: 给类添加缓存后,调用静态方法需要添加__func__属性;团队管理的bug 2025-05-23 13:23:18 +08:00
docs 更新README 2025-04-21 13:39:43 +02:00
screenshots 更新README 2025-04-21 13:39:43 +02:00
src fix: 给类添加缓存后,调用静态方法需要添加__func__属性;团队管理的bug 2025-05-23 13:23:18 +08:00
user_data/avatars 修改项目结构,新增项目解释 2024-12-09 23:51:45 +08:00
.gitignore featurn: 添加任务中心模块 2025-04-13 08:02:14 +08:00
LICENSE Initial commit 2024-10-16 16:42:40 +08:00
README.md 更新readme信息 2025-05-19 21:11:00 +08:00
logo.png 更新logo 2024-12-09 23:54:41 +08:00
requirements_linux.txt 更新README 2025-04-15 17:16:33 +08:00
requirements_win.txt featurn: 添加任务中心模块 2025-04-13 08:02:14 +08:00
ruff.toml 添加 添加用户弹窗 2024-11-05 10:42:27 +08:00

README.md

logo

DashGo

简体中文 | English

一、简介

DashGo谐音大西瓜这是一个开箱即用的低代码WEB框架基于Plotly Dash框架和Fac开源组件库开发只需要Python语言实现全栈的后台管理系统开发

功能:

  1. 多页面管理,支持多级菜单嵌套
  2. 组件和函数级别的细粒度权限管理
  3. 自带用户、角色和团队的权限的管理
  4. i18n国际化组件
  5. 密码和OTP登录
  6. 支持OAuth2 provider
  7. 支持任务模块,支持周期任务/定时任务和监听任务监听任务暂时只支持邮件POP3协议触发 请查看使用文档
  8. 任务模块支持数据抽取与个性化信息推送,支持Server酱企业微信群机器人SMTP邮件Gewechat,可以实现数据大屏、实时监控和通知推送

特点:

  1. 极易使用
  2. 只需要一个Python文件就可以将应用嵌入系统无需额外操作
  3. 自动根据代码视图结构生成菜单项,无需单独维护菜单
  4. 符合主流数据平台风格
  5. 支持周期和定时任务
  6. 支持轮询监听外部消息,实现任务触发
  7. 丰富的消息通知渠道:Server酱企业微信群机器人SMTP邮件Gewechat
  8. 通过OAuth2接口+Iframe实现子系统接入待开发

二、项目结构

├─assets                # 静态资源目录
│  ├─imgs                  # 图片资源
│  └─js                    # js文件资源dash框架预加载js文件、浏览器回调js等
├─common                # Python共享功能库
│  └─utilities          # Python工具类
├─config                # 项目配置目录
├─dash_callback         # Dash回调库
│  ├─application
│  │  ├─access_
│  │  ├─dashboard_
│  │  └─person_
│  └─pages
├─dash_components       # Dash自定义组件
├─dash_view             # Dash视图
│  ├─application           # 应用视图以“_”结尾的为内置应用
│  │  ├─access_
│  │  ├─dashboard_
│  │  ├─example_app        # 应用例子
│  │  ├─notification_
│  │  ├─task_
│  │  └─person_
│  ├─framework
│  └─pages
├─database              # 数据库
│  └─sql_db               # 关系型数据库配置
│      ├─dao                # 数据库orm抽象
│      └─entity             # 数据库表实体
└─translations          # 国际化
    └─topic_locales

三、用法

  • 添加新应用

以example_app为例存在2个应用页面 —— subapp1 subapp2

在config/access_factory.py中注册以上2个页面系统会自动识别页面中的配置信息

案例仅演示2级菜单可按格式自定义嵌套多级菜单

以应用subapp1为例

from common.utilities.util_menu_access import MenuAccess
import feffery_antd_components as fac
import feffery_utils_components as fuc
from common.utilities.util_logger import Log
from dash_components import Card


# 二级菜单的标题、图标和显示顺序
title = '应用1'
icon = None
order = 2
logger = Log.get_logger(__name__)

############# 注册权限固定全局变量名access_metas ################
access_metas = (
    '应用1-基础权限',
    '应用1-权限1',
    '应用1-权限2',
)

############# 返回视图页面的方法方法名固定为render_contentmenu_access为用户权限对象kwargs为url内的query参数信息 #########
def render_content(menu_access: MenuAccess, **kwargs):
    return fac.AntdFlex(
        [
            *(
                [
                    Card(
                        fac.AntdStatistic(
                            title='展示',
                            value=fuc.FefferyCountUp(end=100, duration=3),
                        ),
                        title='应用1-权限1',
                    )
                ]
                if menu_access.has_access('应用1-权限1')  ############# 判断是否拥有“应用1-权限1”的权限
                else []
            ),
            *(
                [
                    Card(
                        fac.AntdStatistic(
                            title='展示',
                            value=fuc.FefferyCountUp(end=200, duration=3),
                        ),
                        title='应用1-权限2',
                    )
                ]
                if menu_access.has_access('应用1-权限2') ############# 判断是否拥有“应用1-权限2”的权限
                else []
            ),
        ],
        wrap='wrap',
    )
  • 相关功能对象

    1. 在render_content中有参数menu_access可以进行权限的校验回调中如何实现

      通过get_menu_access根据cookie中的jwt的用户名字段查询数据库获取权限对象

      from common.utilities.util_menu_access import get_menu_access
      menu_access = get_menu_access()
      menu_access.has_access('xxx')
      

      如果只需要获取cookie中的jwt的用户名字段减少数据库IO

      from common.utilities.util_menu_access import get_menu_access
      op_name = get_menu_access(only_get_user_name=True)
      
  • 国际化

    1. 在translations\topic_locales中新建json文件内容格式参考已存在的文件推荐一级目录的名字来新建文件下级的应用共用一个国际化json文件json中的topic字段为主题字段也推荐和一级目录的名字保持一致

    2. 在i18n.py中添加xxxx替换为一级目录的名字

      t__xxxx = partial(translator.t, locale_topic='xxxx')
      
    3. 在需要翻译的视图或者回调函数中,按以下格式替换字符串,即可完成国际化

      from i18n import t__xxxx
      t__xxxx('Chrome内核版本号太低请升级浏览器')
      

四、启动平台

  1. windows用户根据requirements_win.txtlinux用户根据requirements_linux.txt 安装Python依赖

    安装依赖命令: python -m pip install -r requirements_xxx.txt

    推荐安装虚拟环境https://blog.csdn.net/m0_37789876/article/details/146011318

  2. 切换工作区到src目录

    windows: cd /d e:\xxxx

    linux: cd /app/xxxx

  3. 初始化数据库表结构和admin管理员数据

    数据库初始化操作:

    • 数据库表初始化表结构: python -c "from database.sql_db.conn import create_rds_table; create_rds_table()"

    • 数据库初始化admin用户python -c "from database.sql_db.conn import init_rds_data; init_rds_data()"

  4. 执行python app.py即可启动Dash debugger调试模式根据日志提示中的URL进行访问

    生产环境非debugger启动命令

    • Windows waitress-serve --host=0.0.0.0 --port=8090 --url-scheme=http --trusted-proxy=* --trusted-proxy-headers=x-forwarded-for --threads=8 app:server
    • Linux: gunicorn --capture-output -w 4 -b 0.0.0.0:8090 app:server

    默认账号admin、密码admin123

  5. 如要使用任务中心模块执行python app_apscheduler.py启动任务进程

  6. 请在Dash的世界畅游吧

    默认启动为sqlite数据库如需用于生产请根据config/dashgo.ini调整相关Mysql数据库配置


五、截图