Gin入门_SignUp用户注册那一块的代码编写【main函数仅用于测试signup!!‍♂️】

相对文件路径:git.com/gin_basic/gin_web/internal/api/handlers/user_handler.go
代码格式如下:

package handlers

import (
	regexp "github.com/dlclark/regexp2"
	"github.com/gin-gonic/gin"
	"net/http"
)

const (
	emailRegexPattern    = `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$`
	passwordRegexPattern = `^(?=.*[0-9])(?=.*[a-zA-Z])[0-9a-zA-Z!@#$%^&*(),.?\":{}|<> ]{8,}$`
)

// UserHandlers 处理用户相关请求的结构体
type UserHandlers struct {
	emailRegexPattern    *regexp.Regexp
	passwordRegexPattern *regexp.Regexp
}

// RegisterRoutes 注册用户相关路由
// 该方法用于将用户操作的路由绑定到对应的处理函数
func NewUserHandlers() *UserHandlers {
	return &UserHandlers{
		emailRegexPattern:    regexp.MustCompile(emailRegexPattern, regexp.None),
		passwordRegexPattern: regexp.MustCompile(passwordRegexPattern, regexp.None),
	}

}
func (h *UserHandlers) RegisterRoutes(routers *gin.Engine) {
	// 用户路由组
	rg := routers.Group("/users")
	// 注册路由
	rg.POST("/signup", h.SignUp)
	// 登录路由
	rg.POST("/sign", h.Login)
	// 用户资料路由
	rg.GET("/profile", h.Profile)
	// 编辑资料路由
	rg.POST("/edit", h.Edit)
}

// Signup 处理用户注册请求
// 该方法用于处理用户注册流程,包括验证数据,创建用户等
// 它接收一个 gin.Context 类型的参数,用于获取请求数据和发送响应
// 定义几个方法,包含注册、登录、编辑、查看
func (h *UserHandlers) SignUp(ctx *gin.Context) {
	// 注册
	// 字段标签,固定接收json格式,内部类
	type SignUpReq struct {
		Email           string `json:"email"`
		Password        string `json:"password"`
		ConfirmPassword string `json:"confirmPassword"`
	}
	//Bind 方法,类似是格式校验的一个方法,如果格式不是上面SignUp设置的格式就会报错。
	var req SignUpReq
	if err := ctx.Bind(&req); err != nil {
		ctx.String(200, "输入的格式不合法")
		return
	}
	// 邮箱格式校验
	isEmail, err := h.emailRegexPattern.MatchString(req.Email)
	if err != nil {
		ctx.String(http.StatusOK, "系统错误")
		return
	}
	if !isEmail {
		ctx.String(http.StatusOK, "邮箱格式不对")
		return
	}
	// 密码格式校验
	isPassword, err := h.passwordRegexPattern.MatchString(req.Password)
	if err != nil {
		ctx.String(http.StatusOK, "系统错误")
		return
	}
	if !isPassword {
		ctx.String(http.StatusOK, "邮箱格式不对")
		return
	}
	// 确认密码校验
	if req.Password != req.ConfirmPassword {
		ctx.String(200, "两次输入密码不一致")
		return
	}
	ctx.String(http.StatusOK, "你正在注册")
}

相对文件路径:git.com/gin_basic/gin_web/cmd/main.go

package main

import (
	"git.com/gin_basic/gin_web/internal/api/handlers"
	"github.com/gin-gonic/gin"
)

// main函数是程序的入口点
func main() {
	// 初始化Gin框架的默认路由器
	router := gin.Default()

	// 创建UserHandlers实例,用于处理用户相关的请求
	//hdl := &handlers.UserHandlers{}
	newhdl := handlers.NewUserHandlers()

	// 注册用户相关的路由
	//hdl.RegisterRoutes(router)
	newhdl.RegisterRoutes(router)

	// 启动服务器
	router.Run(":8080")
}

apipost测试结果如下
signup测试
代码输出“你正在注册”是在如下代码中展示经过了代码的邮箱、以及密码长度校验和密码一致性验证之后输出的。

ctx.String(http.StatusOK, "你正在注册")

关于密码和邮箱代码的准确性验证

首先在apipost上面修改完邮箱的格式,然后进行post测试,输出结果如下:
邮箱格式不多
关于邮箱格式验证的代码输出如下:

isEmail, err := h.emailRegExp.MatchString(req.Email)
	if err != nil {
		ctx.String(http.StatusOK, "系统错误")
		return
	}
	if !isEmail {
		ctx.String(http.StatusOK, "邮箱格式不对")
		return
	}

** 进行密码格式验证,然后进行post测试,输出结果如下:**

  1. 第一种是密码长度不对出现的错误输出
    关于密码校验的代码输出如下:
// 密码格式校验
	isPassword, err := h.passwordRegExp.MatchString(req.Password)
	if err != nil {
		ctx.String(http.StatusOK, "系统错误")
		return
	}
	if !isPassword {
		ctx.String(http.StatusOK, "密码格式不对,密码长度应该不小于8位,且包含特殊符号")
		return
	}
	// 确认密码校验
	if req.Password != req.ConfirmPassword {
		ctx.String(200, "两次输入密码不一致")
		return
	}

密码格式不对

  1. 第二种是两次输入的密码不一致出现的报错

两次密码不一致
关于输入字符串验证的输出结果如下
json格式验证不通过
关于字符串校验的代码输出如下:

func (h *UserHandlers) SignUp(ctx *gin.Context) {
	// 注册
	// 字段标签,固定接收json格式,内部类
	type SignUpReq struct {
		Email           string `json:"email"`
		Password        string `json:"password"`
		ConfirmPassword string `json:"confirmPassword"`
	}
	//Bind 方法,类似是格式校验的一个方法,如果格式不是上面SignUp设置的格式就会报错。
	var req SignUpReq
	if err := ctx.Bind(&req); err != nil {
		ctx.String(200, "输入的格式不合法")
		return
	}

一些关于代码的说明:
1.密码正则表达式和密码引用包的说明
golang原本的包是regexp,但是不支持正则表达是的"(?="这种格式,所以在代码里面做了修改,如下是代码展示

// regexp 是给这个包起的别名
regexp "github.com/dlclark/regexp2"
// 密码和邮箱的正则表达式都在常量里面,如下,这里是拆开的单独看的,不能作为完整代码使用。好像单独使用也没问题。
const (
	emailRegexPattern = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
	// 和上面比起来,用 ` 看起来就比较清爽
	passwordRegexPattern = `^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&.])[A-Za-z\d$@$!%*#?&.]{8,}$`
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值