最好的网站设计公司,怎么用阿里云建网站,wordpress怎么禁止更新,制作短视频的软件前端传入Grule#xff0c;后端保存到 .grl 文件中
通过简单的输入框#xff0c;将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言#xff0c;有 then 关键字…前端传入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 namegrule methodPOST action/grule/form/规则名称: input nameruleName/inputbr/规则描述: input nameruleDesc/inputbr/规则优先级: input nameruleSalience/inputbr/div规则条件: input nameruleCondition/inputbutton typebutton idaddRuleCondition增加/button/divdiv规则逻辑: input nameruleLogic/inputbutton typebutton idaddRuleLogic增加/button/divbutton typesubmit确认/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 接口使用 fmt.Sprintf() 格式化Grule字符串接口使用文件操作将字符串保存到 grule/规则名.grl使用 c.Redirect() 重定向会表单页面
// 接收表单的结构体
type RuleForm struct {RuleName string form:ruleNameRuleDesc string form:ruleDescRuleSalience string form:ruleSalienceRuleConditions []string form:ruleConditionRuleLogic []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/)})
}演示