从golang-gin-realworld-example-app项目学写httpapi (六)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/validators.go
验证器
package users
import (
"github.com/gin-gonic/gin"
"github.com/wangzitian0/golang-gin-starter-kit/common"
)
// 模型验证器包括2个方面: 1. 使用规则验证输入的json 2. 验证调用common.Bind(c, self)后填充的数据
// 用户验证json结构体
type UserModelValidator struct {
User struct {
Username string `form:"username" json:"username" binding:"exists,alphanum,min=4,max=255"`
Email string `form:"email" json:"email" binding:"exists,email"`
Password string `form:"password" json:"password" binding:"exists,min=8,max=255"`
Bio string `form:"bio" json:"bio" binding:"max=1024"`
Image string `form:"image" json:"image" binding:"omitempty,url"`
} `json:"user"`
userModel UserModel `json:"-"`
}
// 用户验证内置方法
func (self *UserModelValidator) Bind(c *gin.Context) error {
err := common.Bind(c, self)
if err != nil {
return err
}
// username, email, bio, password, image 必须项
self.userModel.Username = self.User.Username
self.userModel.Email = self.User.Email
self.userModel.Bio = self.User.Bio
if self.User.Password != common.NBRandomPassword {
self.userModel.setPassword(self.User.Password)
}
if self.User.Image != "" {
self.userModel.Image = &self.User.Image
}
return nil
}
// 构造函数 NewUserModelValidator, 可以配置默认值
func NewUserModelValidator() UserModelValidator {
userModelValidator := UserModelValidator{}
//userModelValidator.User.Email ="w@g.cn"
return userModelValidator
}
// 用户填充数据验证
func NewUserModelValidatorFillWith(userModel UserModel) UserModelValidator {
userModelValidator := NewUserModelValidator()
userModelValidator.User.Username = userModel.Username
userModelValidator.User.Email = userModel.Email
userModelValidator.User.Bio = userModel.Bio
userModelValidator.User.Password = common.NBRandomPassword
if userModel.Image != nil {
userModelValidator.User.Image = *userModel.Image
}
return userModelValidator
}
// 登录验证json结构体
type LoginValidator struct {
User struct {
Email string `form:"email" json:"email" binding:"exists,email"`
Password string `form:"password"json:"password" binding:"exists,min=8,max=255"`
} `json:"user"`
userModel UserModel `json:"-"`
}
// 登录验证内置方法
func (self *LoginValidator) Bind(c *gin.Context) error {
err := common.Bind(c, self)
if err != nil {
return err
}
self.userModel.Email = self.User.Email
return nil
}
// 构造函数 NewLoginValidator
func NewLoginValidator() LoginValidator {
loginValidator := LoginValidator{}
return loginValidator
}
从golang-gin-realworld-example-app项目学写httpapi (六)的更多相关文章
- 从golang-gin-realworld-example-app项目学写httpapi (八)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/common/unit_test.go 单元测试 ...
- 从golang-gin-realworld-example-app项目学写httpapi (七)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/hello.go main调用 package ...
- 从golang-gin-realworld-example-app项目学写httpapi (五)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/middlewares.go 中间件 ...
- 从golang-gin-realworld-example-app项目学写httpapi (四)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/routers.go 路由定义 pa ...
- 从golang-gin-realworld-example-app项目学写httpapi (三)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/serializers.go 序列化 ...
- 从golang-gin-realworld-example-app项目学写httpapi (二)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/models.go 模型定义 use ...
- 从golang-gin-realworld-example-app项目学写httpapi (一)
https://wangzitian0.github.io/2013/06/29/zero-to-one-1/ https://github.com/gothinkster/golang-gin-re ...
- Golang Gin 项目包依赖管理 godep 使用
Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...
- Golang Gin 项目使用 Swagger
Golang Gin 项目使用 Swagger 标签(空格分隔): Go 首先需要github.com/swaggo/gin-swagger和github.com/swaggo/gin-swagger ...
随机推荐
- PSR2规范
为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的.各个成员项目间的共性组成了这组代码规范.当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用 ...
- 用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
HTML: <div id="navbar"> <div id='navbar_content' style="left:0px;"> ...
- ServiceLoader解读
SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里有比较详细的介绍. 简 ...
- JavaScript设计模式-11.桥梁模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python笔记03-----文件操作
文件操作 创建一个文件名字为filename 内容是 BJSHGDTW 打印文件编码 f = open("filename",'r',encoding="utf-8&qu ...
- 用gdb理解C宏(#和##)
在Unix/Linux内核代码以及GNU libc源代码中,有两个C的宏被广泛使用. 例如: /* glibc-2.25/sysdeps/powerpc/powerpc64/sysdep.h */ # ...
- 动态生成自定义控件ascx如何给ascx传值
有机会看到有网友在论坛上发出问题: 在网页上的铵钮执行之后,动态加载的用户控件,如果没有处理好,会在子用户控件的铵钮被执行时抛弃.因此我们需要着重需要处理的关键点.同相子用户控件在动态加载之后,它的状 ...
- jquery里正则的使用方法及常用的正则验证
本文是一篇关于jquery使用正则来验证输入,及一些常用验证规则的基础文章,适合新手. 假设我们的网页里有这样的一个表单: <input id="aijquery" type ...
- HTML基础-常用标签及图片
标记/标签{元素} 双标签: <标签>内容</标签> <html></html> 网页 页面的根元素 <head></head& ...
- 从CentOS官网下载系统镜像详细教程
很多新手小白鼠想学习CentOS系统,但是不知道镜像去哪里搞,随便去个第三方发现要么要注册,要么各种广告病毒,或者好不容易找到官网,点进去一看却一脸懵逼,不仅全英文,有些专业术语也不懂啊,不要担心 ...