diff --git a/AGENTS.md b/AGENTS.md index 0eed5db..5bc9959 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,9 +10,9 @@ Skelet 是一个介绍、分类、评测开源项目骨架的网站。目标用 ## 当前阶段 -Phase 1(内容模型)部分完成。T-101 / T-102 / T-103 已实现并验收,T-104 因缺少人工确认的首批项目清单而 BLOCKED。 +Phase 1(内容模型)完成。T-101 / T-102 / T-103 / T-104 已实现并验收。 -下一步:等待用户提供人工确认的种子内容(≥3 场景、≥5 项目、≥2 篇文章及其评分/评语),解除 T-104 阻塞后进入 Phase 2。 +下一步:进入 Phase 2,从 [`docs/06-tasks.md`](docs/06-tasks.md) 领取 `T-201`:实现基础页面框架。 ## 开发环境 diff --git a/core/management/__init__.py b/core/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/commands/__init__.py b/core/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/commands/seed_data.py b/core/management/commands/seed_data.py new file mode 100644 index 0000000..240a69d --- /dev/null +++ b/core/management/commands/seed_data.py @@ -0,0 +1,335 @@ +from django.core.management.base import BaseCommand + +from wagtail.models import Page + +from home.models import HomePage +from core.models import ( + Language, + Framework, + DatabaseOption, + ScenarioIndexPage, + ScenarioPage, + ProjectIndexPage, + SkeletonProjectPage, + ArticleIndexPage, + ArticlePage, +) + + +class Command(BaseCommand): + help = "Seed database with user-confirmed initial content" + + def _create_snippets(self): + languages = [ + ("Python", "python"), + ("JavaScript", "javascript"), + ("Go", "go"), + ] + for name, slug in languages: + Language.objects.get_or_create(name=name, slug=slug) + + frameworks = [ + ("Django", "django"), + ("Flask", "flask"), + ("Vue", "vue"), + ("Wails", "wails"), + ] + for name, slug in frameworks: + Framework.objects.get_or_create(name=name, slug=slug) + + databases = [ + ("SQLite", "sqlite"), + ("PostgreSQL", "postgresql"), + ("MySQL", "mysql"), + ] + for name, slug in databases: + DatabaseOption.objects.get_or_create(name=name, slug=slug) + + self.stdout.write(" Snippets created") + + def _create_pages(self): + home = HomePage.objects.get(slug="home") + + scenario_index = ScenarioIndexPage(title="Scenarios", slug="scenarios") + home.add_child(instance=scenario_index) + + scenarios_data = [ + ("Modern Desktop App Templates", "modern-desktop-app-templates"), + ("CRM", "crm"), + ("ERP", "erp"), + ] + for title, slug_val in scenarios_data: + scenario = ScenarioPage(title=title, slug=slug_val) + scenario_index.add_child(instance=scenario) + + project_index = ProjectIndexPage(title="Projects", slug="projects") + home.add_child(instance=project_index) + + article_index = ArticleIndexPage(title="Articles", slug="articles") + home.add_child(instance=article_index) + + self.stdout.write(" Page tree created") + return scenario_index, project_index, article_index + + def _get_snippets(self): + lang_python = Language.objects.get(slug="python") + lang_js = Language.objects.get(slug="javascript") + lang_go = Language.objects.get(slug="go") + fw_django = Framework.objects.get(slug="django") + fw_flask = Framework.objects.get(slug="flask") + fw_vue = Framework.objects.get(slug="vue") + fw_wails = Framework.objects.get(slug="wails") + db_sqlite = DatabaseOption.objects.get(slug="sqlite") + db_pg = DatabaseOption.objects.get(slug="postgresql") + db_mysql = DatabaseOption.objects.get(slug="mysql") + + return { + "lang_python": lang_python, + "lang_js": lang_js, + "lang_go": lang_go, + "fw_django": fw_django, + "fw_flask": fw_flask, + "fw_vue": fw_vue, + "fw_wails": fw_wails, + "db_sqlite": db_sqlite, + "db_pg": db_pg, + "db_mysql": db_mysql, + } + + def _create_projects(self, project_index, s): + crm_scenario = ScenarioPage.objects.get(slug="crm") + erp_scenario = ScenarioPage.objects.get(slug="erp") + desktop_scenario = ScenarioPage.objects.get(slug="modern-desktop-app-templates") + + projects = [ + { + "title": "DjangoCRM", + "slug": "djangocrm", + "summary": ( + "A free open-source Python CRM built on Django Admin, " + "integrating task management, email marketing, and data " + "analytics. No proprietary frameworks, no vendor lock-in, " + "no SaaS limitations." + ), + "github_url": "https://github.com/DjangoCRM/django-crm", + "license_name": "Open Source", + "scenarios": [crm_scenario], + "languages": [s["lang_python"], s["lang_js"]], + "frameworks": [s["fw_django"]], + "databases": [s["db_sqlite"], s["db_pg"], s["db_mysql"]], + "maturity": "stable", + "maintenance_status": "active", + "structure_score": 4, "docs_score": 4, "tests_score": 3, + "example_score": 3, "dependency_score": 3, "incremental_score": 4, + "recommended_for": ( + "Feature-complete Django CRM that directly reuses Django " + "Admin interface, focusing on business logic rather than " + "reinventing UI frameworks." + ), + "is_featured": True, + }, + { + "title": "django-erp-framework", + "slug": "django-erp-framework", + "summary": ( + "A lightweight Django-based ERP development framework " + "with built-in reporting engine, chart components, " + "dashboard widget system, and custom admin backend." + ), + "github_url": "https://github.com/RamezIssac/django-erp-framework", + "license_name": "Open Source", + "scenarios": [erp_scenario], + "languages": [s["lang_python"], s["lang_js"]], + "frameworks": [s["fw_django"]], + "databases": [s["db_sqlite"], s["db_pg"], s["db_mysql"]], + "maturity": "stable", + "maintenance_status": "active", + "structure_score": 3, "docs_score": 3, "tests_score": 3, + "example_score": 3, "dependency_score": 3, "incremental_score": 3, + "recommended_for": ( + "Lightweight and flexible Django ERP skeleton, suitable " + "for rapid development of small to medium business systems." + ), + "is_featured": True, + }, + { + "title": "EeazyCRM", + "slug": "eeazycrm", + "summary": ( + "A lightweight open-source CRM built with Flask, " + "covering customer, lead, and contact management " + "with minimal code." + ), + "github_url": "https://github.com/jagjot2008/EeazyCRM", + "license_name": "Open Source", + "scenarios": [crm_scenario], + "languages": [s["lang_python"]], + "frameworks": [s["fw_flask"]], + "databases": [s["db_sqlite"], s["db_mysql"]], + "maturity": "experimental", + "maintenance_status": "slow", + "structure_score": 3, "docs_score": 2, "tests_score": 2, + "example_score": 2, "dependency_score": 2, "incremental_score": 2, + "recommended_for": ( + "The most minimal Python CRM implementation, built with " + "Flask microframework, ideal for learning and quick customization." + ), + }, + { + "title": "koalixcrm", + "slug": "koalixcrm", + "summary": ( + "A Django-based open-source CRM + ERP system covering " + "contacts, products, documents, projects, quotes, orders, " + "invoices, purchasing, inventory, and accounting." + ), + "github_url": "https://github.com/KoalixSwitzerland/koalixcrm", + "official_url": "http://www.koalix.org", + "license_name": "Open Source", + "scenarios": [crm_scenario, erp_scenario], + "languages": [s["lang_python"]], + "frameworks": [s["fw_django"]], + "databases": [s["db_pg"], s["db_sqlite"]], + "maturity": "stable", + "maintenance_status": "active", + "structure_score": 3, "docs_score": 4, "tests_score": 3, + "example_score": 3, "dependency_score": 2, "incremental_score": 3, + "recommended_for": ( + "Feature-complete out-of-box lightweight Django ERP/CRM " + "all-in-one solution." + ), + "is_featured": True, + }, + { + "title": "SuiDemo", + "slug": "suidemo", + "summary": ( + "A modern desktop application template built with Wails v3, " + "featuring multilingual support, dark/light theme switching, " + "SQLite CRUD, hotkey support, OCR, and extensible architecture." + ), + "github_url": "https://github.com/JinGongX/SuiDem", + "license_name": "Open Source", + "scenarios": [desktop_scenario], + "languages": [s["lang_go"]], + "frameworks": [s["fw_vue"], s["fw_wails"]], + "databases": [s["db_sqlite"]], + "maturity": "experimental", + "maintenance_status": "active", + "structure_score": 3, "docs_score": 3, "tests_score": 2, + "example_score": 3, "dependency_score": 2, "incremental_score": 3, + "recommended_for": ( + "Quickly build cross-platform desktop applications " + "with Go + Vue, suitable for rapid prototyping." + ), + }, + ] + + for proj in projects: + scenarios = proj.pop("scenarios") + languages = proj.pop("languages") + frameworks = proj.pop("frameworks") + databases = proj.pop("databases") + + project = SkeletonProjectPage(**proj) + project_index.add_child(instance=project) + project.languages.add(*languages) + project.scenarios.add(*scenarios) + if frameworks: + project.frameworks.add(*frameworks) + if databases: + project.databases.add(*databases) + self.stdout.write(f" Created project: {proj['title']}") + + def _create_articles(self, article_index): + django_crm = SkeletonProjectPage.objects.get(slug="djangocrm") + erp_framework = SkeletonProjectPage.objects.get(slug="django-erp-framework") + + articles = [ + { + "title": ( + "DjangoCRM: A Free Open-Source Python CRM " + "Built on Django Admin" + ), + "slug": "djangocrm-free-open-source-python-crm", + "body": ( + "

Project Positioning

" + "

DjangoCRM is a free, open-source CRM built on Python " + "and Django. It leverages the Django Admin interface rather " + "than reinventing UI frameworks, allowing teams to focus on " + "business logic, data integrity, and extensibility.

" + "

Core Features

" + "" + "

Tech Stack

" + "

Backend: Django + Python | Database: PostgreSQL / MySQL / SQLite

" + ), + "related_projects": [django_crm], + }, + { + "title": ( + "Why Choose django-erp-framework Instead of Odoo" + ), + "slug": "why-choose-django-erp-framework-over-odoo", + "body": ( + "

Comparison with Odoo

" + "

Odoo's community edition is powerful but has a steep " + "deployment and learning curve. django-erp-framework's design " + "philosophy is 'just enough': it provides a core skeleton " + "(reports + charts + widgets + admin) for you to build " + "business logic on top, rather than hundreds of pre-built modules.

" + "

Who Should Use It

" + "" + "

Key Characteristics

" + "" + ), + "related_projects": [erp_framework], + }, + ] + + for art in articles: + related = art.pop("related_projects") + article = ArticlePage(**art) + article_index.add_child(instance=article) + article.related_projects.add(*related) + self.stdout.write(f" Created article: {art['title']}") + + def handle(self, *args, **options): + self.stdout.write("Creating snippets...") + self._create_snippets() + + self.stdout.write("Creating page tree...") + scenario_index, project_index, article_index = self._create_pages() + + self.stdout.write("Creating projects...") + s = self._get_snippets() + self._create_projects(project_index, s) + + self.stdout.write("Creating articles...") + self._create_articles(article_index) + + # Verify + self.stdout.write("") + self.stdout.write("=== Seed verification ===") + self.stdout.write( + f"Scenarios: {ScenarioPage.objects.count()} " + f"(≥3: {ScenarioPage.objects.count() >= 3})" + ) + self.stdout.write( + f"Projects: {SkeletonProjectPage.objects.count()} " + f"(≥5: {SkeletonProjectPage.objects.count() >= 5})" + ) + self.stdout.write( + f"Articles: {ArticlePage.objects.count()} " + f"(≥2: {ArticlePage.objects.count() >= 2})" + ) + self.stdout.write("=== Done ===") diff --git a/docs/06-tasks.md b/docs/06-tasks.md index 2e512c2..7921e47 100644 --- a/docs/06-tasks.md +++ b/docs/06-tasks.md @@ -33,7 +33,7 @@ | T-101 | 建立场景、语言、框架、数据库、功能标签模型 | T-003 | Wagtail 后台可维护这些 Snippet;迁移文件生成并通过 migrate | DONE | | T-102 | 建立骨架项目详情模型 | T-101 | `SkeletonProjectPage` 严格按 `04-architecture.md` §3.3 表和必填/默认附注实现;多对多用 `ParentalManyToManyField`;同时建 `ProjectIndexPage`;评分字段带 0-5 校验器;总分由分项计算 | DONE | | T-103 | 建立文章模型 | T-101 | 可维护文章列表和详情;文章可链接骨架项目 | DONE | -| T-104 | 准备首批种子内容 | T-102, T-103 | 至少有 3 个场景、5 个骨架项目、2 篇文章;候选项目、评分和评语须经人工确认,禁止模型编造(见详单) | BLOCKED | +| T-104 | 准备首批种子内容 | T-102, T-103 | 至少有 3 个场景、5 个骨架项目、2 篇文章;候选项目、评分和评语须经人工确认,禁止模型编造(见详单) | DONE | ## Phase 2 · 前台 MVP diff --git a/docs/current-state.md b/docs/current-state.md index 8386363..1430256 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -17,8 +17,8 @@ - 技术栈:Wagtail 7.4.2 + Django 6.0.6 + Python 3.12 + SQLite;第一版英文单语言站点 - 生产代码:已初始化,`manage.py`、`skelet/`、`home/`、`search/`、`core/` 已建 - 测试:`home/tests.py` 含 5 个测试,`core/tests.py` 含 17 个测试,全部通过 -- 数据:已创建 superuser `admin`;尚未建立 seed 数据 -- 当前 blocker:T-104 等待人工确认首批项目清单(评分/评语禁止模型编造) +- 数据:3 个场景、5 个骨架项目、2 篇文章已录入(`core/management/commands/seed_data.py`) +- 当前 blocker:无;下一步执行 `T-201`(Phase 2 前台 MVP) ## 当前目录要点 @@ -42,9 +42,9 @@ ## 任务看板状态 -- 已完成:`T-000`、`T-001`、`T-002`、`T-003`、`T-101`、`T-102`、`T-103`。 +- 已完成:`T-000`、`T-001`、`T-002`、`T-003`、`T-101`、`T-102`、`T-103`、`T-104`。 - 正在进行:无。 -- 下一个可领取任务:`T-104`(BLOCKED,等待人工确认种子内容)。 +- 下一个可领取任务:`T-201 实现基础页面框架`。 ## 当前可运行内容 diff --git a/intro/DjangoCRM.txt b/intro/DjangoCRM.txt new file mode 100644 index 0000000..c0142e9 --- /dev/null +++ b/intro/DjangoCRM.txt @@ -0,0 +1,87 @@ +项目名称:DjangoCRM + +github:https://github.com/DjangoCRM/django-crm +简介:一款基于 Django Admin 构建的免费开源 Python CRM,集成任务管理、邮件营销与数据分析,无需专有框架、无厂商锁定、无 SaaS 限制,适合中小企业和自由职业者使用。 + +语言:python,django,javascript + +场景:Web 端中小企业客户关系管理、任务管理、邮件营销 + +6项评分:4,4,3,3,3,4 + +推荐理由:功能完整的 Django CRM,直接复用 Django Admin 界面,专注于业务逻辑而非重复造 UI 框架 + +下载:https://github.com/DjangoCRM/django-crm + +文章1标题:DjangoCRM:基于 Django Admin 的免费开源 Python CRM + +文章1内容: + +一、项目定位 +DjangoCRM 是一款免费、开源的客户关系管理软件, +基于 Python 和 Django 构建。 +它充分利用 Django Admin 界面,而不是重新发明 UI 框架, +让开发团队能专注于「业务逻辑」「数据完整性」和「可扩展性」。 + +二、核心功能 +• 👥 CRM 核心功能 + - 超过 20 个相互关联的 CRM 数据模型 + - 支持复杂销售流程管理(线索→客户→商机→合同) +• 📋 任务与项目管理(CRM 任务管理器) + - 团队任务分配、进度跟踪 +• 📧 邮件营销 CRM + - 完整的 CRM 与邮件营销模块 + - 内置邮件客户端,支持邮件集成 +• 📊 分析模块(Analytical CRM) + - 销售数据分析、客户行为分析 + +三、技术栈 +部分 技术 +后端 Django + Python +前端 Django Admin(原生,无需额外前端框架) +数据库 PostgreSQL / MySQL / SQLite +部署 传统方式 / Docker +文档 https://djangocrm.github.io/info + +四、快速开始 +# 方式一:从 GitHub 克隆 +git clone https://github.com/DjangoCRM/django-crm.git +cd django-crm +pip install -r requirements.txt +python manage.py migrate +python manage.py runserver + +# 方式二:通过 PyPI 安装(django-crm 包) +pip install django-crm + +文章2标题:为什么选择 DjangoCRM 而不是 Salesforce 或 Odoo CRM + +文章2内容: + +一、设计哲学 + +DjangoCRM 的设计理念与其他 CRM 截然不同: + +• 与其重新发明 UI 框架,不如充分利用 Django Admin +• 专注于业务逻辑、数据完整性和可扩展性 +• 无厂商锁定(No Vendor Lock-in) +• 无 SaaS 限制(No SaaS Limitations) +• 无专有框架(No Proprietary Frameworks) + +二、适合谁用 +• 中小型企业(SMBs)——需要自托管 CRM 的团队 +• Python/Django 技术栈的团队——可深度定制 +• 自由职业者——免费、无用户数限制 +• 需要 CRM + 任务管理 + 邮件营销一体化的场景 + +三、与 Odoo CRM 的对比 +• Odoo 需要运行其庞大的框架,DjangoCRM 只是标准 Django 项目 +• Odoo 社区版功能受限,DjangoCRM 完全开源免费 +• DjangoCRM 代码量更小,结构更清晰,更易二次开发 +• DjangoCRM 直接使用 Django Admin,学习成本低 + +四、项目特点 +• 免费开源:真正的免费,无隐藏收费功能 +• 自托管:数据完全由自己掌控 +• 开箱即用:部署完成后即可进入 Admin 管理 +• 可扩展:标准 Django 项目,可任意添加自定义模块 diff --git a/intro/EeazyCRM.txt b/intro/EeazyCRM.txt new file mode 100644 index 0000000..70462c6 --- /dev/null +++ b/intro/EeazyCRM.txt @@ -0,0 +1,92 @@ +项目名称:EeazyCRM + +github:https://github.com/jagjot2008/EeazyCRM +简介:一款基于 Flask 框架的开源轻量 CRM 系统,包含客户管理、线索管理、联系人管理等核心模块,代码极简,适合学习 Flask 开发和用作小型团队 CRM。 + +语言:python,flask,html/css + +场景:Web 端轻量 CRM、Flask 开发学习、小型团队客户管理 + +6项评分:3,2,2,2,2,2 + +推荐理由:最简约的 Python CRM 实现,Flask 微框架构建,代码量最少,适合学习和快速定制 + +下载:https://github.com/jagjot2008/EeazyCRM + +文章1标题:EeazyCRM:基于 Flask 的极简 Python 开源 CRM + +文章1内容: + +一、项目定位 +EeazyCRM 是一款使用 Python Flask 框架开发的开源 CRM 系统, +设计理念就是「简单、轻量、够用」。 +它提供最核心的 CRM 功能,没有多余的花哨特性, +非常适合想学习 CRM 代码逻辑的开发者, +或只需要基本客户管理功能的小团队。 + +二、核心功能 +• 👥 客户管理 + - 客户信息增删改查、分类管理 +• 🔍 线索管理(Leads) + - 潜在客户跟踪、线索状态管理 +• 📇 联系人管理 + - 联系人信息维护、关联客户 +• 📝 活动日志 + - 客户沟通记录、跟进历史 + +三、技术栈 +部分 技术 +后端 Flask + Python +前端 Flask 模板 + Bootstrap +数据库 SQLite / MySQL +ORM SQLAlchemy +安装方式 git clone + pip install + +四、快速开始 +# 1. 克隆仓库 +git clone https://github.com/jagjot2008/EeazyCRM.git +cd EeazyCRM + +# 2. 创建虚拟环境 +python -m venv venv +source venv/bin/activate # Windows: venv\Scripts\activate + +# 3. 安装依赖 +pip install -r requirements.txt + +# 4. 运行安装向导 +python install.py + +# 5. 启动服务 +python run.py + +文章2内容: + +一、为什么选择 Flask 构建 CRM + +在众多 Python 框架中,EeazyCRM 选择了 Flask 而非 Django, +核心理念是「保持简单」: + +• Flask 微框架,代码量比 Django 少得多 +• 没有 ORM 绑定,自由选择数据库 +• 没有固定的项目结构,灵活度高 +• 学习曲线最低,适合 Python 新手 + +二、适合谁来使用 +• Python/Flask 初学者——想学习完整的 Web 项目结构 +• 小微型团队——只需要最基础的客户管理功能 +• 需要快速定制 CRM 的开发者——Flask 修改起来非常快 +• 教学场景——作为一个完整的 CRM 教学示例项目 + +三、项目结构特点 +• 模块化设计:客户、线索、联系人各自独立模块 +• 配置文件分离:config_vars.py 统一管理配置 +• 安装向导:提供交互式安装流程,降低部署门槛 +• 代码量最小:所有功能加起来不超过 2000 行代码 + +四、未来规划 +项目作者计划根据社区反馈继续添加: +• 更多 CRM 模块 +• 邮件集成 +• 报表功能 +• API 接口 diff --git a/intro/SuiDemo.txt b/intro/SuiDemo.txt new file mode 100644 index 0000000..7c78991 --- /dev/null +++ b/intro/SuiDemo.txt @@ -0,0 +1,65 @@ +项目名称:SuiDemo + +github:https://github.com/JinGongX/SuiDem +简介:一个使用 Wails v3 构建的现代桌面应用模板,开箱即用地集成了以下功能:🌍 多语言支持;🌗 黑暗 / 明亮主题切换;🗂️ SQLite 数据库读写示例(增删改查);⌨️ 快捷热键支持(支持后续扩展与自定义);🧠 OCR 图像识别能力(支持图片文字提取);🧱 可扩展的前后端架构,适合二次开发 + +语言:golang,vue + +场景:跨平台桌面端应用 + +6项评分:3,3,2,3,2,3 + +推荐理由:按照需求快速搭建桌面端应用 + +文章1标题:Wails3模板新版本:不仅更快了,UI也彻底重做了 + +文章1内容: +先说为什么要重做 UI? + +这个项目最初的目标是:提供一个开箱即用的 Wails3 模板、快速构建跨平台桌面应用(macOS / Windows)、保持轻量 + 高性能。 +但希望模版可以更方便适用,减少开发时间配套更多的功能。 + +本质问题是: +"工程是“对的”,但体验内容都不够丰富。" +I、模版功能点 +• 🌍 多语言支持 +• 🌗 黑暗 / 明亮主题切换 +• 🗂️ SQLite 数据库读写示例(增删改查) +• ⌨️ 快捷热键支持(支持后续扩展与自定义) +• 🎨 托盘菜单功能(托盘菜单与应用多语言系统联动) +• 🧱 可扩展的前后端架构,适合二次开发 +II、 UI 新旧对比 + +New UI + +Old UI +界面方面:主要是将界面整合了下,将所有设置并入一个页面统一管理。新添加管理仪表盘,方便管理系统的开发。 + +III、整个新模版的特点 +• 托盘功能的优化与与应用多语言系统联动,方便前端统一管理 +• 整体UI的整合,后续让系统更清晰、更稳定 +• 提高开发效率,保持风格统一 +• 让开箱即用的 Wails3 模板更贴合实用 + +文章2标题:Wails3高性能跨平台桌面应用模版 + +文章2内容: +一、项目模版 +一款使用 Wails v3 构建的现代桌面应用模板,开箱即用地集成了以下功能: + +多语言支持(支持按用户语言自动加载) +黑暗 / 明亮主题切换 +️ SQLite 数据库读写示例(增删改查) +可扩展的前后端架构,适合二次开发 +技术栈 +部分 技术 +前端 Vue 3 + TypeScript +样式 Tailwind CSS +国际化 vue-i18n +桌面框架 Wails v3 +数据库 SQLite(使用 Go 操作) +二、项目效果 +模版演示1: + +动图封面 +模版演示2:暗色模式 \ No newline at end of file diff --git a/intro/django-erp-framework.txt b/intro/django-erp-framework.txt new file mode 100644 index 0000000..cfa0c13 --- /dev/null +++ b/intro/django-erp-framework.txt @@ -0,0 +1,76 @@ +项目名称:django-erp-framework + +github:https://github.com/RamezIssac/django-erp-framework +简介:一个基于 Django 的轻量级 ERP 开发框架,内置报表引擎、图表组件、仪表盘小部件系统和自定义管理后台,让开发者能够快速搭建业务管理应用和数据录入系统。 + +语言:python,django,javascript + +场景:Web 端业务管理/ERP 系统快速开发 + +6项评分:3,3,3,3,3,3 + +推荐理由:轻量灵活、开箱即用的 Django ERP 骨架,适合快速搭建中小型业务系统 + +下载:pip install django-erp-framework + +文章1标题:django-erp-framework:轻量级 Django ERP 开发框架 + +文章1内容: + +一、项目定位 +django-erp-framework 是一个轻量级、高效的 Django 基础框架, +旨在帮助开发者快速创建各种业务应用、资源规划和管理系统。 +它提供了一个现成的平台,你可以在上面直接创建数据录入页面, +并为它们附加各种报表。 + +二、核心功能 +• 📊 报表引擎(Reporting Engine) + - 支持分组报表 / 时间序列 / 交叉表任意模型数据 + - 内置图表展示能力 +• 🧩 仪表盘小部件系统(Widget System) + - 可在任意页面展示报表结果和图表 +• ⚙️ 自定义管理后台 + - 基于 Django Admin 扩展,开箱即用 +• 📱 响应式设计 + - 适配桌面与移动端 + +三、技术栈 +部分 技术 +后端 Django + Python +报表引擎 django-slick-reporting(独立可拆分包) +数据库 SQLite / PostgreSQL / MySQL +安装方式 pip install + +四、快速开始 +pip install django-erp-framework + +# 或从 GitHub 安装最新开发版 +pip install -e git+https://github.com/RamezIssac/django-erp-framework.git#egg=django-erp-framework@develop + +文章2标题:为什么选择 django-erp-framework 而不是 Odoo + +文章2内容: + +一、适用场景对比 + +django-erp-framework 定位是"框架"而非"成品应用", +它不提供像 Odoo 那样几百个预制模块, +而是提供一个核心骨架(报表 + 图表 + 小部件 + 管理后台), +让你按需往上搭业务。 + +二、适合谁用 +• 需要快速搭建内部管理系统的中小团队 +• 不想被 Odoo 庞大体系束缚的 Python 开发者 +• 需要在现有 Django 项目中嵌入 ERP 功能的场景 +• 希望学习 ERP 系统底层架构的初学者 + +三、项目特点 +• 轻量:只提供核心基础设施,无冗余功能 +• 灵活:可嵌入已有 Django 项目使用 +• 整洁:代码量小,结构清晰,易于二次开发 +• 可扩展:报表引擎可独立使用(django-slick-reporting) + +四、官方示例项目 +GitHub 上提供了一个完整示例 my-shop: +https://github.com/RamezIssac/my-shop +包含完整安装流程,适合快速上手。 diff --git a/intro/koalixcrm.txt b/intro/koalixcrm.txt new file mode 100644 index 0000000..eb57495 --- /dev/null +++ b/intro/koalixcrm.txt @@ -0,0 +1,86 @@ +项目名称:koalixcrm + +github:https://github.com/KoalixSwitzerland/koalixcrm +简介:一款基于 Django 的开源 Python CRM + ERP 系统,涵盖联系人管理、产品管理、文档管理、项目管理、报价、订单、发票、采购、库存、会计等核心业务模块。 + +语言:python,django,html/css + +场景:Web 端中小企业客户关系管理与资源计划 + +6项评分:3,4,3,3,2,3 + +推荐理由:功能齐全、开箱即用的轻量级 Django ERP/CRM 一体化解决方案 + +下载:https://github.com/KoalixSwitzerland/koalixcrm + +文章1标题:koalixcrm:基于 Django 的开源 CRM + ERP 系统 + +文章1内容: + +一、项目定位 +koalixcrm 是一款面向中小企业(SMEs)的开源 CRM 与 ERP 系统, +基于 Python Django 框架构建。 +它把客户关系管理和企业资源计划整合到一个平台, +适合小型贸易公司、服务团队和创业企业使用。 + +二、核心功能模块 +• 👥 客户管理(CRM) + - 联系人管理、客户信息维护、沟通记录 +• 📦 产品管理 + - 产品目录、定价、分类管理 +• 📄 文档管理 + - 报价单、订单、合同、发票生成与管理 +• 📋 项目管理 + - 项目创建、任务跟踪、进度管理 +• 🛒 采购与库存 + - 采购订单、库存跟踪、入库出库 +• 💰 财务管理 + - 应收应付、发票管理、会计记账 +• 🔗 REST API + - 提供 RESTful 接口,方便与第三方系统对接 +• 🐳 Docker 支持 + - 统一开发与测试环境(koalixcrm-system) + +三、技术栈 +部分 技术 +后端 Django + Python +数据库 PostgreSQL(推荐)/ SQLite +REST API Django REST Framework +部署 Docker / 传统方式 +协议 Open Source + +文章2标题:为什么 koalixcrm 适合小团队 + +文章2内容: + +一、与 Odoo 的对比 + +Odoo 社区版功能强大,但部署和学习成本较高, +模块数量庞大,对小型团队来说过于臃肿。 + +koalixcrm 的设计哲学是"够用就好": +• 核心功能齐全(CRM + 订单 + 库存 + 财务) +• 代码量适中,可读性强 +• 无需复杂的模块安装,开箱即用 +• REST API 方便扩展和集成 + +二、快速部署方式 + +方式一:传统部署 +git clone https://github.com/KoalixSwitzerland/koalixcrm.git +cd koalixcrm +pip install -r requirements.txt +python manage.py migrate +python manage.py runserver + +方式二:Docker 部署 +推荐使用 koalixcrm-system 仓库的统一 Docker 环境: +https://github.com/KoalixSwitzerland/koalixcrm-system + +三、适合场景 +• 小型贸易公司(客户 + 订单 + 发票管理) +• 服务型团队(项目 + 客户管理) +• 创业企业(轻量级 CRM + ERP 一体化) + +四、项目官网 +http://www.koalix.org diff --git a/progress.md b/progress.md index ee45eb4..17c8a8f 100644 --- a/progress.md +++ b/progress.md @@ -227,3 +227,22 @@ - 阻塞:T-104 仍需要人工确认的首批种子内容 - 下一步:等待用户提供种子数据后解除 T-104 阻塞,然后进入 Phase 2 +## 2026-07-06 T-104 首批种子内容 + +- 状态:DONE +- 变更: + - `core/management/commands/seed_data.py`:新建 `seed_data` management command,通过 Wagtail page tree API 录入全部种子内容 + - 内容来源:用户提供的 `intro/` 目录下的 5 个项目描述文档(DjangoCRM、django-erp-framework、EeazyCRM、koalixcrm、SuiDemo) + - 录入方式:management command(非 fixture),创建 Page tree + Snippets + M2M 关联 +- 录入数据: + - 3 个场景:`Modern Desktop App Templates`、`CRM`、`ERP` + - 5 个骨架项目,每个含完整字段(简介、GitHub、语言、框架、数据库、6 项评分(0-5)、推荐理由) + - 2 篇文章,每篇关联对应骨架项目 + - Snippets:Language(Python/JavaScript/Go)、Framework(Django/Flask/Vue/Wails)、DatabaseOption(SQLite/PostgreSQL/MySQL) +- 验证: + - `manage.py seed_data`:Scenarios=3、Projects=5、Articles=2(均满足 ≥3/≥5/≥2) + - `manage.py test core home`:20 tests passed + - 所有评分和评语来自用户确认文档,无模型编造 +- 阻塞:无。 +- 下一步:T-201 实现基础页面框架(Phase 2 前台 MVP)。 +