首页 > 其他分享 >gin表单验证

gin表单验证

时间:2022-10-31 14:11:06浏览次数:50  
标签:zh err 验证 global 表单 validator go gin

一. 表单验证的初始化

1. 定义forms验证

在forms目录下创建user.go文件

增加验证的struct内容

package forms

type PassWordLoginForm struct {
	Mobile   string `form:"mobile"  json:"mobile" binding:"required"` //手机号码规则验证,自定义validator
	PassWord string `form:"password"  json:"password" binding:"required,min=3.max=20"`
}

  

 

2. 创建validator.go文件,并且定义初始化翻译功能

package initialize

import (
	"fmt"
	"mxshop-api/user-web/global"
	"reflect"
	"strings"

	"github.com/gin-gonic/gin/binding"
	"github.com/go-playground/locales/en"
	"github.com/go-playground/locales/zh"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	en_translations "github.com/go-playground/validator/v10/translations/en"
	zh_translations "github.com/go-playground/validator/v10/translations/zh"
)

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)
		global.Trans, ok = uni.GetTranslator(locale)
		if !ok {
			return fmt.Errorf("uni.GetTranslator(%s)", locale)
		}

		switch locale {
		case "en":
			en_translations.RegisterDefaultTranslations(v, global.Trans)
		case "zh":
			zh_translations.RegisterDefaultTranslations(v, global.Trans)
		default:
			en_translations.RegisterDefaultTranslations(v, global.Trans)
		}
		return
	}

	return
}

  3. 初始化翻译

在main.go入口文件进行初始化,增加如下内容

	//初始化翻译
	if err := initialize.InitTrans("zh"); err != nil {
		panic(err)
	}

  

全部内容

package main

import (
	"fmt"
	"go.uber.org/zap"
	"mxshop-api/user-web/global"

	"mxshop-api/user-web/initialize"
)

func main() {

	//初始化logger
	initialize.InitLogger()

	//初始化配置文件
	initialize.InitConfig()
	//初始化routes
	Router := initialize.Routers()

	//初始化翻译
	if err := initialize.InitTrans("zh"); err != nil {
		panic(err)
	}

	/*
		1. S()可以获取一个全局的sugar,可以让我们自己设置一个全局的logger
		2. 日志是分级别的,debug, info , warn, error, fetal
		3. S函数和L函数很有用, 提供了一个全局的安全访问logger的途径
	*/

	zap.S().Infof("启动服务")
	//port := 8881
	if err := Router.Run(fmt.Sprintf(":%d", global.ServerConfig.Port)); err != nil {
		zap.S().Panic("启动失败:", err.Error())
	}

}

  4. 在api接口 user.go文件中使用验证器

增加密码验证的接口

func HandleValidatorError(ctx *gin.Context, err error) {
	//定义统一返回的报错处理
	errs, ok := err.(validator.ValidationErrors)
	if !ok {
		ctx.JSON(http.StatusOK, gin.H{
			"msg": err.Error(),
		})
	}
	ctx.JSON(http.StatusBadRequest, gin.H{
		"error": removeTopStruct(errs.Translate(global.Trans)),
	})
	return
}


func PassWordLogin(ctx *gin.Context) {
	//密码登录的接口
	//1.表单验证, 在forms中定义
	//ctx.JSON(http.StatusOK, "密码登录")
	passWordLoginForm := forms.PassWordLoginForm{}

	//固定格式
	if err := ctx.ShouldBind(&passWordLoginForm); err != nil {
		HandleValidatorError(ctx, err)
		return
	}

}

  

 

标签:zh,err,验证,global,表单,validator,go,gin
From: https://www.cnblogs.com/wlike/p/16844046.html

相关文章

  • Nginx学习六:静态代理
    文章目录​​一、原因​​​​二、原理图​​​​三、Nginx静态代理实现方式​​​​方式一:在nginx.conf的location中配置静态资源的后缀​​​​方式二在nginx.conf的lo......
  • 【❤️Java入门超简单❤️】JavaSE初级教程整合篇,全部手敲,每一节代码都验证可行(建议新人收
    大家好,我是spring小杨,是一位java司机,喜欢撸代码,可技术交流!我对自己编写的Java初级教程做了一个整理,每一节都是我用心编写而成。该教程和我的学习网站:java18.cn是同步的。终......
  • 存储型XSS测试验证
    1.准备接受cookie的服务器服务器启动apache root@kali:~#systemctlstartapache2/var/www/html/下创建一个文件cookie_rec.phproot@kali:~#vim/var/www/html/cook......
  • c# 模拟表单提交,post form 上传文件、大数据内容
    表单提交协议规定:要先将HTTP要求的Content-Type设为multipart/form-data,而且要设定一个boundary参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界......
  • Gin 框架初始
    Gin内容介绍参考参考博客和文档:Gin框架介绍及使用Gin中文文档主要内容本教程主要从下面几个方面来进行讲解Gin框架基本使用GORM基本使用Web开发项目实战关于......
  • 验证码漏洞
    验证码漏洞分类图片验证码通过在图片上随机产生数字、英文字母、汉字或者问题进行验证。伴随OCR技术的发展,能够轻易被破解手机短信验证码可以比较准确和安全地保......
  • Dreamweaver网页作业——紫罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有
    HTML实例网页代码,本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人......
  • 646 案例全选表格 and647 表单校验
    全选表格、<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>表格全选</title><style>table{border:1pxs......
  • Ruoyi表单构建
    Ruoyi表单构建通过拖动组件就能自动生成前端代码,很方便,所以本文简单通过上层函数源码来梳理一下大致流程,如有需要再自行仔细一行行分析底层代码。组件拖动实现组件拖动功......
  • nginx容器与php-fpm容器连接方式
    文档说明:只记录关键地方;获得nginx和php基础镜像的内默认配置文件从容器镜像中拷贝文件到容器外#!/bin/bashset-eux__DIR__=$(cd"$(dirname"$0")"pwd)c......