当前位置: 首页 > news >正文

前端传入Grule,后端保存到 .grl 文件中

前端传入Grule,后端保存到 .grl 文件中

  • 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑
  • Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分
    • 类似于 shellruby 之类的脚本语言,有 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" 对应表单 inputname 属性
      • RuleConditions 切片类型字段, 对应表单都为 ruleCondition 的多个input
    • 接口使用 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&#xff0c;后端保存到 .grl 文件中 通过简单的输入框&#xff0c;将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言&#xff0c;有 then 关键字…...

探索《Crypto Rumble》 游戏:经济模型篇

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

【CSS in Depth 2 精译_072】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(上):究竟该用 em 还是 px

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 ✔️ 12.1.1 使用 em 还是 px ✔️12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 文章目录 第 12 章 排版与间距…...

Elasticsearch对象映射

Spring Data Elasticsearch对象映射是将Java对象&#xff08;域实体&#xff09;映射到存储在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目录下&#xff1a;p6880880_190000_Linux-x86-64.zip &#xff08;更新o…...

机器学习--Kaggle的使用

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

客户服务新突破,天润融通助力电动车企业实现数智化转型

近年来&#xff0c;两轮电动车成为年轻人喜爱的出行新方式&#xff0c;借着这种潮流&#xff0c;许多新兴品牌迅速发展&#xff0c;并跻身行业头部。 但问题也随之而来&#xff0c;由于业务快速发展&#xff0c;各类服务问题也开始增多。 比如天润融通服务的一家头部两轮电动…...

力扣题目 - 2931.购买物品的最大开销

题目 还需要你前往力扣官网查看详细的题目要求 地址 思路 这边需要你去力扣官网详细查看题目看了题目提供的示例 已经有了解法, 先把values转成1维数组,排序之后进行累加即可 代码 var maxSpending function (values) {let list values.flat();list.sort((a, b) > a - …...

智慧化工园区自动化在线监测,建立产业链路数字安全网

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

在Docker中运行MySQL的思考:挑战与解决方案

引言 在云计算和容器化技术日益普及的今天&#xff0c;Docker作为一种轻量级的容器化平台&#xff0c;已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而&#xff0c;并非所有应用都适合在Docker容器中…...

Linux中所有和$有关的操作

prog < file 命令在 Shell 编程中用于 输入重定向&#xff0c;它将文件的内容作为程序的输入。即&#xff0c;程序 prog 会从文件 file 中读取数据&#xff0c;而不是从标准输入&#xff08;通常是键盘&#xff09;读取数据。 基本语法&#xff1a; prog < file 解释&…...

github操作学习笔记(杂乱版)

git开源的分布式版本控制系统&#xff1a; 每次修改文件提交后&#xff0c;都会自动创建一个项目版本 查看git版本看有没有安装成功&#xff1a;git --version 把默认编辑器设置成vim&#xff1a;git config --global core.editor "vim" 1、设置昵称和邮箱&#xff…...

学习思考:一日三问(思考篇)之路由表

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

多个NVR同时管理EasyNVR:设置了“按需拉流超时”配置但没反应的解决方法

视频监控这一技术在当今社会的应用已然愈发广泛&#xff0c;其影响力渗透至我们生活的方方面面。它不仅为我们带来了更为坚固的安全防线&#xff0c;还在诸多行业领域中发挥着不可替代的作用。 在广泛的应用领域中&#xff0c;NVR录像机汇聚管理EasyNVR凭借其卓越的技术实力与前…...

基于Springboot的实验室管理系统【附源码】

基于Springboot的实验室管理系统 效果如下&#xff1a; 系统登录页面 实验室信息页面 维修记录页面 轮播图管理页面 公告信息管理页面 知识库页面 实验课程页面 实验室预约页面 研究背景 在科研、教育等领域&#xff0c;实验室是进行实验教学和科学研究的重要场所。随着实验…...

【Oracle11g SQL详解】常用字符串函数:`CONCAT`、`SUBSTR`、`LENGTH`、`INSTR` 等

常用字符串函数&#xff1a;CONCAT、SUBSTR、LENGTH、INSTR 等 字符串函数在 SQL 中被广泛用于处理文本数据&#xff0c;例如拼接字符串、提取子串、查找字符位置等。Oracle 11g 提供了强大的字符串函数&#xff0c;可以简化对字符串的操作。 一、CONCAT&#xff1a;拼接字符串…...

某养老产业公司管理诊断项目成功案例纪实

某养老产业公司管理诊断项目成功案例纪实 ——从短期和长期出发&#xff0c;提供转型改革建议 【客户行业】养老行业 【问题类型】问题诊断 【客户背景】 某养老产业公司是一家主要从事养老服务为主的企业&#xff0c;主营业务包括社区养老服务、居家养老、康复训练服务等…...

自然语言处理基础及应用场景

自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注&#xff1a;区分每个词名词、动词、形容词等词性命名实体的识别&#xff1a;名词的具体指代是哪一类事物共指消解&#xff1a;代词指代的是前面…...

网页爬虫技术全解析:从基础到实战

引言 在当今信息爆炸的时代&#xff0c;互联网上的数据量每天都在以惊人的速度增长。网页爬虫&#xff08;Web Scraping&#xff09;&#xff0c;作为数据采集的重要手段之一&#xff0c;已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...

数据仓库-查看表和数据库的信息

查询表信息 使用系统表pg_tables查询数据库所有表的信息。 SELECT * FROM pg_tables;使用gsql的\d命令查询表结构。 示例&#xff1a;先创建表customer_t1并插入数据。 CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5)…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...