前端传入Grule,后端保存到 .grl 文件中
前端传入Grule,后端保存到 .grl 文件中
- 通过简单的输入框,将Grule的部分拆解成
规则名称
规则描述
规则优先级
规则条件
规则逻辑
- Grule关键字
when
Then
模拟了if
判断的条件和逻辑部分- 类似于
shell
和ruby
之类的脚本语言,有then
关键字 when
的&&
相当于多个条件的与
操作Then
之后为脚本逻辑语句, 所以后面要加;
分号结束
- 类似于
前端编写
- 前端模板:
templates/grule.tmpl
, 可以让用户输入Grule- 表单用
POST
往源服务器的/grule/form/
发送表单 - 其中
规则条件
和规则逻辑
有增加按钮- 使用dom树获取点击事件
- 点击时增加表单输入框
- 表单用
<html>
<p>请编写你的Grule规则</p>
<form name="grule" method="POST" action="/grule/form/">规则名称: <input name="ruleName"></input><br/>规则描述: <input name="ruleDesc"></input><br/>规则优先级: <input name="ruleSalience"></input><br/><div>规则条件: <input name="ruleCondition"></input><button type="button" id="addRuleCondition">增加</button></div><div>规则逻辑: <input name="ruleLogic"></input><button type="button" id="addRuleLogic">增加</button></div><button type="submit">确认</button>
</form>
<script>
// 增加按钮的逻辑
var addRuleConditionButton = document.getElementById('addRuleCondition');
var addRuleLogicButton = document.getElementById('addRuleLogic');
var ruleConditionContainer = addRuleConditionButton.parentNode;
var ruleLogicContainer = addRuleLogicButton.parentNode;addRuleConditionButton.addEventListener('click', function() {var newInput = document.createElement('input');newInput.name = 'ruleCondition';newInput.type = 'text';ruleConditionContainer.insertBefore(newInput, addRuleConditionButton);
});addRuleLogicButton.addEventListener('click', function() {var newInput = document.createElement('input');newInput.name = 'ruleLogic';newInput.type = 'text';ruleLogicContainer.insertBefore(newInput, addRuleLogicButton);
});
</script>
</html>
- 表单分别将
Grule
拆解成了下面几个输入框- 提交表单后
c.Redirect(http.StatusFound, "/grule/form/")
会重定向回该页面
- 提交表单后
后端部分
- 设置跳转到
grule.tmpl
的接口
r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.tmpl", gin.H{})
})
- 设置接受Grule表单的接口
- 使用
c.ShouldBind(&form)
绑定表单到RuleForm
结构体上- 结构体tag
form:"ruleName"
对应表单input
的name
属性 RuleConditions
切片类型字段, 对应表单都为ruleCondition
的多个input
- 结构体tag
- 接口使用
fmt.Sprintf()
格式化Grule字符串 - 接口使用文件操作将字符串保存到
grule/规则名.grl
- 使用
c.Redirect()
重定向会表单页面
- 使用
// 接收表单的结构体
type RuleForm struct {RuleName string `form:"ruleName"`RuleDesc string `form:"ruleDesc"`RuleSalience string `form:"ruleSalience"`RuleConditions []string `form:"ruleCondition"`RuleLogic []string `form:"ruleLogic"`
}func main() {r.POST("/grule/form/", func(c *gin.Context) {var form RuleFormc.ShouldBind(&form) // 绑定表单// 格式化字符串grule := fmt.Sprintf(`
rule %s "%s" salience %s {when%sThen%s;
}`, form.RuleName, form.RuleDesc, form.RuleSalience, strings.Join(form.RuleConditions, " && "), strings.Join(form.RuleLogic, ";\n\t\t"))Ω// 将grule字符串写入文件err := ioutil.WriteFile(fmt.Sprintf("grule/%s.grl", form.RuleName), []byte(grule), 0644)if err != nil {log.Println(err)}// 重定向c.Redirect(http.StatusFound, "/grule/form/")})
}
演示
相关文章:

前端传入Grule,后端保存到 .grl 文件中
前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…...

探索《Crypto Rumble》 游戏:经济模型篇
《Crypto Rumble》是一款基于 Zypher Network 游戏引擎打造的卡牌 RPG三消品类的 Web3 游戏,通过引人入胜的游戏设计以及轻量化的游戏玩法,《Crypto Rumble》不仅能够为玩家带来引人入胜的沉浸式游戏体验,同时基于 AI Bot 的游戏编辑器&#…...

【CSS in Depth 2 精译_072】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(上):究竟该用 em 还是 px
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 ✔️ 12.1.1 使用 em 还是 px ✔️12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 文章目录 第 12 章 排版与间距…...
Elasticsearch对象映射
Spring Data Elasticsearch对象映射是将Java对象(域实体)映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。 元模型对象映射 基于元模型的方法使用域类型信息对Elasticsearch进行读写操作…...
Oracle 19c rac 补丁升级,从19.7 to19.22-集群
1. 补丁包概述 数据库环境 角色 数据库 IP地址 数据库版本 主机名 数据库名称 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 将以下补丁包上传到/soft下 上传到两个节点的soft目录下:p6880880_190000_Linux-x86-64.zip (更新o…...

机器学习--Kaggle的使用
机器学习–Kaggle的使用 打开Kaggle: Your Machine Learning and Data Science Community并点击Sign In登录账号 kaggle中自带了很多的数据集 在点击Datasets之后,单点Notebook,如果有适用的数据集可以单击Copy and Edit复制其Notebook,之后…...

客户服务新突破,天润融通助力电动车企业实现数智化转型
近年来,两轮电动车成为年轻人喜爱的出行新方式,借着这种潮流,许多新兴品牌迅速发展,并跻身行业头部。 但问题也随之而来,由于业务快速发展,各类服务问题也开始增多。 比如天润融通服务的一家头部两轮电动…...
力扣题目 - 2931.购买物品的最大开销
题目 还需要你前往力扣官网查看详细的题目要求 地址 思路 这边需要你去力扣官网详细查看题目看了题目提供的示例 已经有了解法, 先把values转成1维数组,排序之后进行累加即可 代码 var maxSpending function (values) {let list values.flat();list.sort((a, b) > a - …...

智慧化工园区自动化在线监测,建立产业链路数字安全网
智慧化工升级国家政策推动安全风险频发 化工园区作为化工产业的核心集聚地,在全球经济中占据重要地位。为推动行业的高质量发展,国家相继发布了《“十四五”危险化学品安全生产规划方案》、《石化化工行业数字化转型实施指南》和《化工园区安全风险智能化…...

在Docker中运行MySQL的思考:挑战与解决方案
引言 在云计算和容器化技术日益普及的今天,Docker作为一种轻量级的容器化平台,已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而,并非所有应用都适合在Docker容器中…...
Linux中所有和$有关的操作
prog < file 命令在 Shell 编程中用于 输入重定向,它将文件的内容作为程序的输入。即,程序 prog 会从文件 file 中读取数据,而不是从标准输入(通常是键盘)读取数据。 基本语法: prog < file 解释&…...

github操作学习笔记(杂乱版)
git开源的分布式版本控制系统: 每次修改文件提交后,都会自动创建一个项目版本 查看git版本看有没有安装成功:git --version 把默认编辑器设置成vim:git config --global core.editor "vim" 1、设置昵称和邮箱ÿ…...

学习思考:一日三问(思考篇)之路由表
学习思考:一日三问(思考篇)之路由表 学了什么(是什么)Destination/Mask(最终目标,寻路必须)Proto(择优可选)Pre(择优可选)Cost&#x…...

多个NVR同时管理EasyNVR:设置了“按需拉流超时”配置但没反应的解决方法
视频监控这一技术在当今社会的应用已然愈发广泛,其影响力渗透至我们生活的方方面面。它不仅为我们带来了更为坚固的安全防线,还在诸多行业领域中发挥着不可替代的作用。 在广泛的应用领域中,NVR录像机汇聚管理EasyNVR凭借其卓越的技术实力与前…...

基于Springboot的实验室管理系统【附源码】
基于Springboot的实验室管理系统 效果如下: 系统登录页面 实验室信息页面 维修记录页面 轮播图管理页面 公告信息管理页面 知识库页面 实验课程页面 实验室预约页面 研究背景 在科研、教育等领域,实验室是进行实验教学和科学研究的重要场所。随着实验…...
【Oracle11g SQL详解】常用字符串函数:`CONCAT`、`SUBSTR`、`LENGTH`、`INSTR` 等
常用字符串函数:CONCAT、SUBSTR、LENGTH、INSTR 等 字符串函数在 SQL 中被广泛用于处理文本数据,例如拼接字符串、提取子串、查找字符位置等。Oracle 11g 提供了强大的字符串函数,可以简化对字符串的操作。 一、CONCAT:拼接字符串…...

某养老产业公司管理诊断项目成功案例纪实
某养老产业公司管理诊断项目成功案例纪实 ——从短期和长期出发,提供转型改革建议 【客户行业】养老行业 【问题类型】问题诊断 【客户背景】 某养老产业公司是一家主要从事养老服务为主的企业,主营业务包括社区养老服务、居家养老、康复训练服务等…...
自然语言处理基础及应用场景
自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…...

网页爬虫技术全解析:从基础到实战
引言 在当今信息爆炸的时代,互联网上的数据量每天都在以惊人的速度增长。网页爬虫(Web Scraping),作为数据采集的重要手段之一,已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...
数据仓库-查看表和数据库的信息
查询表信息 使用系统表pg_tables查询数据库所有表的信息。 SELECT * FROM pg_tables;使用gsql的\d命令查询表结构。 示例:先创建表customer_t1并插入数据。 CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5)…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...