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

关键词整站排名优化保健品网站模板

关键词整站排名优化,保健品网站模板,如何提高网站点击率,2018年企业网站优化如何做系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》《gin框架使用系列之三——获取表单数据》《gin框架使用系列之四——json和protobuf的渲染》 一 、表单验证的基本理论 在第三篇中#xff0c;我们介绍了如何…系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》《gin框架使用系列之三——获取表单数据》《gin框架使用系列之四——json和protobuf的渲染》 一 、表单验证的基本理论 在第三篇中我们介绍了如何将form表单和json等数据转成结构体对象中的方法当时在绑定的结构体中其tag中就有“binding”的信息这就是gin中表单验证的基础。为了详细了解表单验证我们进一步了解以下表单绑定的知识。 1.1、若要将请求体绑定到结构体中需要使用模型绑定支持JSON、XML、YAML和标准表单的绑定设置时需要在绑定的字段上设置tag其只要有两套绑定方法 Must bind 方法 Bind 、BindJSON、BindXML、BindQuery、BindYAML行为这些方法底层使用MustBindWith方法如果存在绑定错误请求将被终止响应代码会被设置成400 Should bind 方法 ShouldBind、ShouldBindJSON、ShouldBindXML、ShouldBindQuery、ShouldBindYAML行为底层使用ShouldBindWith方法如果存在绑定错误则返回go语言的错误形式开发人员可以处理错误请求不会被终止 1.2、Gin中使用 go-playground/validator来验证表单详细文档 二、表单验证示例 我们以一个注册的接口的表单验证为例示例表单验证的写法如下 type SignUpParam struct {// 1 age 130Age uint8 json:age binding:gte1,lte130// name,必须Name string json:name binding:required// email,必须且满足email格式Email string json:email binding:required,email// password必须Password string json:password binding:required// re_password,必须且要和password字段相同RePassword string json:re_password binding:required,eqfieldPassword }func main() {router : gin.Default()router.POST(/sign-up, func(c *gin.Context) {var param SignUpParamif err : c.ShouldBind(param); err ! nil {c.JSON(http.StatusBadRequest, gin.H{msg: err.Error(),})return}// TODO 业务逻辑c.JSON(http.StatusOK, success)})router.Run() // listen and serve on 0.0.0.0:8080 }在postman中调用接口报错信息如下 三、表单验证信息国际化 上面示例中我们可以看到表单验证信息的报错中显示的不是很详细而且暴露了go后台代码的数据我们可以为其添加国际化信息。 下面是增加翻译器的方法 func InitTrans(locale string) (err error) {//修改gin框架中的validator引擎属性, 实现定制if v, ok : binding.Validator.Engine().(*validator.Validate); ok {//注册一个获取json的tag的自定义方法v.RegisterTagNameFunc(func(fld reflect.StructField) string {name : strings.SplitN(fld.Tag.Get(json), ,, 2)[0]if name - {return }return name})zhT : zh.New() //中文翻译器enT : en.New() //英文翻译器//第一个参数是备用的语言环境后面的参数是应该支持的语言环境uni : ut.New(enT, zhT, enT)trans, ok uni.GetTranslator(locale)if !ok {return fmt.Errorf(uni.GetTranslator(%s), locale)}switch locale {case en:en_translations.RegisterDefaultTranslations(v, trans)case zh:zh_translations.RegisterDefaultTranslations(v, trans)default:en_translations.RegisterDefaultTranslations(v, trans)}return}return }整体代码如下 package mainimport (fmtnet/httpreflectstringsgithub.com/gin-gonic/gingithub.com/gin-gonic/gin/bindinggithub.com/go-playground/locales/engithub.com/go-playground/locales/zhut github.com/go-playground/universal-translatorgithub.com/go-playground/validator/v10en_translations github.com/go-playground/validator/v10/translations/enzh_translations github.com/go-playground/validator/v10/translations/zh )type SignUpParam struct {// 1 age 130Age uint8 json:age binding:gte1,lte130// name,必须Name string json:name binding:required// email,必须且满足email格式Email string json:email binding:required,email// password必须Password string json:password binding:required// re_password,必须且要和password字段相同RePassword string json:re_password binding:required,eqfieldPassword }// 定义一个全局的翻译器 var trans ut.Translatorfunc main() {//代码侵入性很强 中间件if err : InitTrans(zh); err ! nil {fmt.Println(初始化翻译器错误)return}router : gin.Default()router.POST(/sign-up, func(c *gin.Context) {var param SignUpParamif err : c.Bind(param); err ! nil {errs, ok : err.(validator.ValidationErrors)if !ok {c.JSON(http.StatusBadRequest, gin.H{msg: err.Error(),})return}// 检查使用自定义的转换器c.JSON(http.StatusBadRequest, gin.H{msg: errs.Translate(trans),})return}// TODO 业务逻辑c.JSON(http.StatusOK, success)})router.Run() // listen and serve on 0.0.0.0:8080 } func InitTrans(locale string) (err error) {//修改gin框架中的validator引擎属性, 实现定制if v, ok : binding.Validator.Engine().(*validator.Validate); ok {//注册一个获取json的tag的自定义方法v.RegisterTagNameFunc(func(fld reflect.StructField) string {name : strings.SplitN(fld.Tag.Get(json), ,, 2)[0]if name - {return }return name})zhT : zh.New() //中文翻译器enT : en.New() //英文翻译器//第一个参数是备用的语言环境后面的参数是应该支持的语言环境uni : ut.New(enT, zhT, enT)trans, ok uni.GetTranslator(locale)if !ok {return fmt.Errorf(uni.GetTranslator(%s), locale)}switch locale {case en:en_translations.RegisterDefaultTranslations(v, trans)case zh:zh_translations.RegisterDefaultTranslations(v, trans)default:en_translations.RegisterDefaultTranslations(v, trans)}return}return } 用postman输入错误信息如下 输入全部正确信息如下 后记   个人总结欢迎转载、评论、批评指正
http://www.dnsts.com.cn/news/226490.html

相关文章:

  • 阳山县网站住房和建设局企业开源建站系统
  • 中跃建设集团网站吗h5网站开发的文献综述
  • wordpress 文章回收站四川高速公路建设开发总公司网站
  • php网站的数据库怎么做备份wordpress satellite7
  • 邢台建设规划网站前程无忧网深圳网站建设类岗位
  • 中国建设银行网站维护app广告联盟
  • 营销网站报备最新微网站建设价格
  • 网站后台管理系统界面北京seo排名
  • 蒙牛网站是谁做的怎么做网站支付
  • 网站开发在无形资产中科技图书馆
  • 典型网站开发的流程潍坊网页网站制作
  • 可以做试卷并批改的网站大港油田建设官方网站
  • 科技网站备案网站注销备案查询
  • 怎么建设ftp网站a站是啥
  • 网站制作怎么创业餐饮加盟手机网站建设
  • 常平网站开发网站建设汇报 安全保障
  • WordPress模板资源下载站网站建设平台官网要点有哪些
  • 做公司网站用哪个公司比较好什么软件做网站
  • 如何上传视频到公司网站做网站设计答辩问题
  • 网站开发技术支持与保障企业百度网站建设
  • 杭州网站外包公司合肥论坛
  • 卢松松博客主题 wordpress宁波seo排名优化
  • 做网站公司三年财务预算表南昌成都网站建设方案
  • 做的比较好的返利网站知乎汕头潮南区
  • DW怎么做电商网站广西南宁市住房和城乡建设局网站
  • .mom域名可以做网站吗购物网站 设计
  • 长沙哪里有网站制作触摸屏网站建设
  • 嘉兴网站的优化给网站做h5缓存机制
  • 服务器网站打不开广告门
  • 在dw里如何做网站建筑行业公司