请求的参数的获取与校验(基本流程)

请求的参数的获取与校验(基本流程)#

models/params.go

package models

//定义请求的参数

type ParamSignUp struct {
	Username   string `json:"username"`
	Password   string `json:"password"`
	RePassword string `json:"re_password"`
}

routes/routes.go

package routes

import (
	"net/http"
	"web/controller"
	"web/logger"

	"github.com/gin-gonic/gin"
)

func Setup() *gin.Engine {
	r := gin.New()
	r.Use(logger.GinLogger(), logger.GinRecovery(true))
	r.POST("./signup", controller.SignUpHandler)//添加
	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "ok")
	})
	return r

}

controller/user.go

package controller

import (
	"net/http"
	"web/logic"
	"web/models"

	"go.uber.org/zap"

	"github.com/gin-gonic/gin"
)

func SignUpHandler(c *gin.Context) {
	//1.获取参数和参数校验
	p := new(models.ParamSignUp)
	if err := c.ShouldBindJSON(p); err != nil {
		zap.L().Error("signup with invalid param", zap.Error(err))
		c.JSON(http.StatusOK, gin.H{
			"msg": "请求参数有误",
		})
		return
	}
	//手动对请求参数进行详细的业务规则校验
	if len(p.Username) == 0 || len(p.Password) == 0 || len(p.RePassword) == 0 || p.RePassword != p.Password {
		zap.L().Error("signup with invalid param")
		c.JSON(http.StatusOK, gin.H{
			"msg": "请求参数有误",
		})
		return
	}

	// 2.业务处理
	logic.SignUp(p)
	//3.返回响应
	c.JSON(http.StatusOK, gin.H{
		"msg": "success",
	})

}


logic/user.go

package logic

import (
	"web/dao/mysql"
	"web/models"
	snowflake "web/pkg"
)

func SignUp(p *models.ParamSignUp) {
	//1.判断用户是否存在
	mysql.QuerUserByUsername()
	//2.生成UID
	snowflake.GetID()

	//3.保存进数据库
	mysql.InsertUser()

}

dao/user.go

package mysql

//把每一步数据库操作封装成函数
//等待logic层调用
func QuerUserByUsername() {

}

func InsertUser() {

}

作者:suehoo

出处:https://www.cnblogs.com/suehoo/p/17019902.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   suehoo  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu