从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 ...
随机推荐
- mono修改代码模板
新建android application是在这里修改模板D:\prostu\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplatesCach ...
- 如何写出优雅的JavaScript代码 ? && 注释
如何写出优雅的JavaScript代码 ? 之前总结过一篇<如何写出优雅的css代码?>, 但是前一段时间发现自己的js代码写的真的很任性,没有任何的优雅可言,于是这里总结以下写js时应当 ...
- C# 数组基础
一.数组的基础知识 1.数组有什么用? 如果需要同一个类型的多个对象,就可以使用数组.数组是一种数组结构,它可以包含同一个类型的多个元素. 2.数组的初始化方式 第一种:先声明后赋值 ]; array ...
- java处理数据库的CRUD
package com.lhy.jdbc.util; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...
- Scope of a Declaration
6.3. Scope of a Declaration The scope of a declaration of a member m declared in or inherited by an ...
- android Application类的详细介绍(转)
在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base cl ...
- python-tornado-hello,world
#!/usr/bin/python import tornado.httpserver import tornado.ioloop import tornado.options import torn ...
- js处理小数方法
1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4, ...
- ASP.NET MVC Web API 学习笔记---联系人增删改查
本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查. 目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的. 下面我们通过创建一个简单的Web API来管理 ...
- [译]用R语言做挖掘数据《七》
时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用 ...