Leaf
旨在实现一个对普通用户易用、对开发者友好的 轻型 开源 CMS 框架;Leaf
基于 Python3.5+
构建,后端使用 Flask
作为基础框架、mongoengine
进行数据库建模。
我们希望能减少普通用户搭建微信商城的成本,同时为有开发能力的朋友提供更多样化的功能。
Leaf
当前的开发仍在进行当中,最新的代码变动请参考 dev
分支
安装及使用
安装
您可以在此直接下载我们最新版本的源代码进行安装
请注意,在正式版本发布之前,在代码分支 dev
, beta
的代码都不可用于生产环境
将要支持:pip install wxleaf
- 此功能待稳定版本产出后增加
使用
import leaf import config init = leaf.Init() init.kernel() # 可选项 - 模块请根据自己需要加载 # 请注意:非稳定版本的模块可能会有变动 # 关于模块之间的相互依赖,请参阅文档 init.logging(config.logging) init.server() init.database(config.database) init.plugins(config.plugins) init.weixin(config.weixin) init.wxpay(config.wxpay) # 运行服务器 leaf.modules.server.run()
示例配置文件请参考 config.py
特性介绍
For Users
Leaf
希望能够给没有开发能力的普通用户提供一个基础的、易于使用和管理的微信商城系统。
如果您是没有开发经验的普通用户,Leaf
可以提供给您:
- 微信公众平台的接口使用能力 即使您没有开发经验,也可以在我们的可视化后台中轻松地编辑多媒体文章、设置群发消息、管理用户/组、设置自动回复等等。
- 主流支付接口的使用能力 如果您有微信支付及支付宝支付等主流支付接口的使用权限,您可以在我们的后台中轻松配置支付方式,即时应用在您的交易当中。
- 完善的用户/组/权限管理系统
Leaf
实现了基于角色的用户权限控制,通过在可视化后台中对用户的角色进行编辑,您可以轻松地配置多个用户组以分配工作 —— 管理员、编辑、库存管理员、甚至普通用户都可以进行分组。 - 产品/库存/订单管理
Leaf
中集成了产品、商品库存、订单管理的功能,您可以轻松地管理SKU/SPU
以及订单等信息。 - 插件扩展能力 您可以在我们的项目网站上寻找合适您需求的插件。 通过简单的单击按钮,您就可以启用或者禁用这些扩展,插件也可以使用上述的能力 —— 您可以使用插件设置定时任务,来进行微信推送、也可以使用插件来扩展商城功能,设置促销等等...
For Developers
如果您有开发能力,Leaf
则能带给您更多可能,通过简单的二次开发,您可以使用到她的更多高级功能,下面是您可能感兴趣的部分:
功能特性
- 任务计划支持
不需要第三方的组件,您可以在开发过程中调用
leaf.core.schedule
模块,她可以帮助您实现 轻量级 的任务计划调度。 - 事件机制
您可以在代码的任何地方创建一个事件实例,通过
events.hook
方法可以将您的动作挂载到事件上,当事件发生时您的动作将会自动运行。 - 日志与错误系统
Leaf
基于logging
包实现了较为完善的日志系统,同时定义的异常基类规范了系统中的异常使用。您只需要在您的代码中继承leaf.core.Error
类,就可以在日志、API网关中得到详细的错误栈信息。 - 权限控制
正如上面在介绍所说,
Leaf
实现了基于用户角色的权限控制,您也可以像系统应用一样定义自己的接入点,并通过简单的装饰器控制。 - 插件系统
插件系统是
Leaf
扩展性的重要保证。在Leaf
中您可以:
- 热插拔 地管理插件,代码的更改变动可以仅通过一次插件重入得到部署;
- 插件可以像在
Flask
的应用中设置路由一样,通过简单的装饰器控制视图路径、权限、访问IP等等 - 插件可以调用系统中其余的资源(包括事件调度、日志、微信能力、数据库,甚至是其他插件的资源)
开发特性
- 关于注释
我们深知没有注释的代码等于天书这个道理,为了方便您的二次开发,
Leaf
从核心模块到视图函数都有详细的注释。 - 关于文档
对于一些重要的系统功能,
Leaf
会编写专门的文档进行说明 —— 例如如何开始您的插件开发,必要的地方还会配有插图,用于方便您的理解。 - 类型提示
Python
从 3.5 版本之后支持了类型提示type hinting
,而我们则尽可能的在代码的各个部分使用这项全新功能,配合Visual Studio
等 IDE,帮助您更轻松的开发。 - 代码风格
Leaf
在开发过程我们尽可能的维持一致的代码风格,并且设置commit-Hook
使用PyLint
进行代码评分 —— 带目前为止,Leaf
获得的评分在 9分 以上,我们知道评分不能代表一切,但是仍希望能够做的更好。 - 代码示例
古人说: 纸上得来终觉浅,绝知此事要躬行。
我们会编写一些示例代码助于开发者的理解。
例如您可以在 Leaf
的任意版本中找到示例插件的代码,相信会更有助您的二次开发。
Other
Wanted
Leaf
仍在开发当中,仍有很多不完美的地方,希望大家能够在 Issue
中提出,帮助她变得更好。
Leaf
到现在还没有一个合适的 Logo, 希望各位能够帮助
Leaf
的后端工作已经接近完成,现在需要前端/美工小伙伴们的支持,将它变成一个好看的全栈项目。
Todo
完善(已完成)JWT Token
的鉴权流程,实现api.wraps.require
装饰器 - 一周内- 完成用户/组/权限/访问点相关的
CRUD
以及视图函数 - 近期 - 完成
SKU/SPU
的CRUD
以及视图函数 - 近期 - 完成订单模块的
CRUD
以及视图函数 - 近期 - 完善微信公众平台的
API
支持 - 两个月内 - 完成微信支付相关错误码收集 - 两个月内
- 编写给前端同学的
API
文档 - 三个月内 - 编写单元测试 - 三个月内
- 编写给后端同学二次开发的文档 - 三个月内
- 架设属于
Leaf
自己的官网、插件市场 - 有生之年
To be continued...
Contributors
祝您使用愉快 ;)