我们将构建一个简单的图书馆管理系统,图书管理员 可以登录并管理文章和会员资格。我们将构建以下模型:
- 物品:可以出租的书籍或类似物品。
- 图书馆会员:订阅会员资格的用户。
- 图书馆交易:文章的发行或归还。
- 图书馆会员资格:代表图书馆会员有效会员资格的文件。
- 图书馆设置:定义借阅期限和一次可发放的最大文章数量等值的设置。
图书管理员将登录到名为 Desk的界面,这是框架附带的丰富管理界面。Desk 提供许多标准视图,如列表视图、表单视图、报告视图等,以及许多功能,如基于角色的权限。
我们还将创建公共的 Web 视图,供图书馆成员访问并浏览可用的文章。
目录
- 创建一个bench
- 创建应用程序
- 创建站点
- 创建 DocType
- DocType 功能
- 控制器方法
- DocType 的类型
- 表单脚本
- 门户页面
创建一个Bench
在创建之前我们先查看是否安装有Bench
bench --version
创建frappe-bench目录(初始化)
执行初始化时,bench会根据脚本文件去下载github上的frappe项目,因为链接github不稳定,所以我们可以选择将脚本的下载源更换成gitee上的在维护镜像仓库(版本可能会低与github上的)
frappe仓库地址:https://gitee.com/jasonfu06/frappe.git
erpnext仓库地址:https://gitee.com/86928925/erpnext.git
查找frappe-bench所在文件路径
pip show frappe-bench
进入/benh/utils目录
cd /usr/local/lib/python3.10/dist-packages/bench/utils
修改system.py文件,将github的仓库改成gitee的仓库
sudo nano system.py
注意:修改时格式需要正确,四个空格或两个制表符
查看pip源
npm config get registry
更换pip清华源
sudo -H pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
sudo -H pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
查看npm源
npm config get registry
更换npm清华源
npm config set registry https://mirrors.tuna.tsinghua.edu.cn/npm/
查看yarn源
yarn config get registry
更换yarn清华源
yarn config set registry https://mirrors.tuna.tsinghua.edu.cn/npm/
进行初始化
bench init frappe-bench
进入frappe-bench目录,启动
cd frappe-bench
bench start
创建应用程序
使用 bench CLI 创建 Frappe 应用程序脚手架。
在我们开始之前,请确保我们位于 bench 目录中。
bench find .
创建一个图书馆管理应用程序
bench new-app {appname}
app目录结构
- library_management:此目录将包含应用程序的所有源代码
- public:存储在生产环境中由 Nginx 提供的静态文件
- 模板:用于呈现 Web 视图的 Jinja 模板
- www:根据目录路径提供的网页
- library_management:使用应用程序引导的默认模块
- modules.txt:应用程序中定义的模块列表
- patches.txt:数据库迁移的补丁条目
- hooks.py:用于扩展或拦截框架提供的标准功能的钩子
- pyproject.toml:指定您的应用程序如何构建,您可以选择在此处添加第三方 Python 依赖项,这些依赖项将在您的应用程序安装时安装。
创建站点
每个站点都带有一个数据库。它们可以通过站点特定的脚本进行定制,也可以在其上安装应用程序。
要创建新站点,请在目录frappe-bench执行创建新站点命令
bench new-site {sitename}
站点目录结构看起来将会像这样:
sites/library.localhost
├── indexes
│ └── web_routes
├── locks
├── logs
├── private
│ ├── backups
│ └── files
├── public
│ └── files
└── site_config.json
该indexes文件夹具有通过网站搜索生成的索引。
该locks文件夹维护站点内文档的基于文件的锁定以及站点本身状态的指示器。
如您所见,该private文件夹将包含所有数据库备份和私人文件。私人文件是用户上传的文件,需要经过身份验证才能访问。
该public文件夹将包含无需身份验证即可访问的文件。这可能包含无需登录即可访问的网站图像。
该site_config.json文件包含特定于此站点的配置,不应进行版本控制。这类似于环境变量文件。如果您查看文件的内容,它包含此站点的数据库配置值。
{
"db_name": "_ad03fa1a016ca1c4",
"db_password": "pz1d2gN5y35ydRO5",
"db_type": "mariadb"
}
bench允许您创建多个站点,并通过同一端口在浏览器中分别访问它们。这就是我们在 bench 中所说的多租户支持。
Frappe 将通过将请求的主机名与站点名称进行匹配来确定要服务的站点,可以通过http://library.localhost:8000访问站点。
如果这对您不起作用,那是因为我们必须告诉操作系统 library.localhost 应该指向 localhost。为此,您可以将以下条目添加到您的/etc/hosts文件中。
sudo nano /etc/hosts
127.0.0.1 library.localhost
这将映射library.localhost到localhost。或者执行下面命令
bench --site library.localhost add-to-hosts
这将要求您输入 root 密码并将一个条目添加到您的/etc/hosts文件。
在现场安装应用程序
要在我们的网站上安装我们的图书馆管理应用程序,请运行以下命令:
bench --site library.localhost install-app library_management
要确认应用程序是否已安装,请运行以下命令:
bench --site library.localhost list-apps
您应该会在您的网站上看到已安装的应用程序frappe。library_management
当您创建新站点时,该frappe应用程序会默认安装。
登录到服务台
根据提示设置完成后进入到app页面
修改默认站点
进入frappe-bench/sites目录
sudo nano common_site_config.json
修改默认站点设置
站点命令
我们用该选项运行了几个 bench 命令--site。这些命令称为 site 命令。
以下是一些有用的站点命令。
Python 控制台
bench --site library.localhost console
MariaDB 控制台
bench --site library.localhost mariadb
数据库备份
bench --site library.localhost backup
您可以通过运行以下命令查看所有站点命令的列表:
bench --help
创建 DocType
DocType 类似于其他框架中的 Model。除了定义属性之外,它还定义 Model 的行为。
启用开发者模式
在创建 DocType 之前,我们需要在工作台上启用开发者模式。这将在我们创建 doctype 时启用样板创建,并且我们可以使用我们的应用将它们跟踪到版本控制中。
转到您的终端并退出工作台服务器(如果它已在运行)frappe-bench,然后从目录中运行以下命令:
bench set-config -g developer_mode true
bench start
创建 DocType
在 Desk 中,使用Awesomebar导航到DocType 列表。此列表将包括与框架捆绑在一起的 DocType、已安装的 Frappe 应用程序的一部分以及您可以为每个站点创建的自定义 DocType。
我们将创建的第一个文档类型是Article。要创建它,请单击 New。
- 输入名称作为文章
- 在模块中选择图书馆管理
- 在Fields表中添加以下字段:
- 文章名称(数据,必填)
- 图片(附加图片)
- 作者(数据)
- 描述(文本编辑器)
- ISBN(数据)
- 状态(选择)- 输入两个选项:已发行和可用(输入已发行,按回车键,然后输入可用)
- 出版商(数据)
- 创建完成后可以在DocType列表中看到我们刚创建的新的DocType,还没有设置字段,我们想要给他设置一些字段
字段设置
选择类型设置
点击保存
点击按钮跳转到Article页面
点击按钮添加列表
创建完成,保存
就可以在Article列表看到刚才创建的文章
DocType 功能
命名
如果您使用表单创建了文档,您可能已经注意到name文档的值是随机生成的哈希值。让我们进行更改,以便我们提供的文章名称成为name文档的哈希值。
在主界面输入DocType List,点击进入,查看所有DocType列表
找到我们创建的DocType列,点击进入编辑界面
找到Naming页签,Auto Name字段,输入field:article_name后点击保存
新建文章
可以看到文章id和文章名称一致了
因为ID和名称一致,所以名称不能重复
表单布局
让我们自定义字段在表单中的布局,同时充分利用可用空间。转到 Article doctype,滚动到 Fields 部分,然后添加两个新字段,类型为Column Break和Section Break。我们还将隐藏 Image 字段,因为它不需要显示在表单中。
点击图片字段的编辑按钮
将隐藏属性勾选上
图片将会在侧边栏显示
权限
您还可以配置要允许的角色以及要限制 DocType 的操作。转到 Article doctype,向下滚动到Permission Rules部分,然后添加角色。
您还可以配置特定角色允许的操作类型。让我们添加一个具有所有操作权限的图书管理员角色和一个具有读取操作权限的图书馆成员角色。
您可以通过创建具有图书管理员角色的新用户和具有图书馆成员角色的另一个用户来测试这一点。使用每个用户登录,并查看允许哪些操作。
控制器方法
控制器方法允许您在文档的生命周期内编写业务逻辑。
让我们创建第二个文档类型:图书馆成员。它将具有以下字段:
- 名字(数据,必填)
- 姓氏(数据)
- 全名(数据,只读)
- 电子邮件地址(数据)
- 电话(数据)
创建文档类型DOcType
编辑Full Name字段信息,设置为只读
修改ID生成规则
创建一个新的成员
设置保存方法,保存时将姓名拼接
DocType 的类型
让我们通过创建更多文档类型来了解框架中不同类型的文档类型。
图书馆会员资格
让我们创建另一个文档类型:Library Membership。它将具有以下字段:
- 图书馆会员(链接,必填)
- 全名(数据,只读)
- 起始日期 (日期)
- 截至日期(日期)
- 已付款(支票)
它将启用“可提交”。它将命名设置为 “LMS.#####”并限制为图书管理员full_name角色。此外,在“查看设置”部分中,标题字段应设置为。
Full Name字段设置
图书馆交易
让我们创建一个 DocType 来记录具有有效会员资格的图书馆成员发布或归还的文章。
该文档类型将被称为图书馆交易,并将具有以下字段:
- 文章 - 文章链接
- 图书馆成员 - 图书馆成员链接
- 类型 - 选择 2 个选项:发行和退货
- 日期 - 交易日期
该文档类型也将是可提交的文档类型。
库设置
让我们为我们的应用创建最后一个文档类型:Library Settings。它将具有以下字段:
- 贷款期限 - 将定义贷款期限(天数)
- 最大发布文章数 - 限制单个会员可以发布的最大文章数
由于我们不需要为这些设置设置多个记录,因此我们将 为该文档类型启用“Is Single” 。
在LibraryMembership添加loan_period和self.to_date赋值
在LibraryTransaction添加validate_maximum_limit方法
表单脚本
表单脚本是客户端 JavaScript 代码,可增强表单的用户体验 (UX)。
假设您想为某个会员创建会员资格。为此,您必须转到图书馆会员列表,创建新表单,选择会员和其他字段,然后保存。
同样,当您想要针对某个会员创建交易时,您必须创建一个新的图书馆交易表格。
我们可以让这个过程更简单。在library_member.js中写入以下代码
网页浏览页面
Web 视图页面是服务器为您的网站访问者呈现的页面。
我们一直专门使用 Desk,这是系统用户可访问的管理界面。通常,您会希望向客户提供有限的访问权限。在我们的案例中,我们希望图书馆会员能够查看他们可以从我们的网站发布的可用文章。Web View Pages 可以帮助我们实现这一点。
转到 Article doctype,然后向下滚动到 Web View 部分。
- 启用“具有 Web 视图”并允许访客查看
- 在路线字段中输入文章
- 在字段表中添加名为Route和Posted 的字段
- 点击保存
创建一篇新的文章,保存,可以在该文章的详情页面看到'在门户网站查看',点击可跳转到该html页面
自定义 Web 视图模板
生成的默认 Web 视图非常简单,仅供我们自定义。当我们将 Article 设为 Web 视图时,会创建两个 HTML 文件,即article.html:article_row.html
首先让我们编辑article.html。Frappe默认使用 Bootstrap 4 作为其 Web 视图。因此,您可以使用任何有效的 Bootstrap 4 标记来设置页面样式。将以下 HTML 添加到article.html。
Frappe构建图书馆管理系统