当前位置: 首页 > news >正文

东莞网站关键词wordpress关闭分享

东莞网站关键词,wordpress关闭分享,自己做影视网站怎么找代理商,wordpress添加超链接go-zero 数据库操作 在本篇文章中#xff0c;我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API#xff0c;包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库#xff0c;并创建user 表 …go-zero 数据库操作 在本篇文章中我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库并创建user 表 CREATE TABLE users (id BIGINT NOT NULL AUTO_INCREMENT,username VARCHAR(50) NOT NULL COLLATE utf8_general_ci,password VARCHAR(255) NOT NULL COLLATE utf8_general_ci,created_at TIMESTAMP NULL DEFAULT (CURRENT_TIMESTAMP),PRIMARY KEY (id) USING BTREE,UNIQUE INDEX username (username) USING BTREE ) COLLATEutf8_general_ci ENGINEInnoDB ; 可以看到username 字段被我设置了唯一性即UNIQUE 这里先解释一下使用goctl 生成model代码的时候它会自动帮我们生成增删改查等方法。 如果字段设置了唯一性它会自动生成通过这个字段查找数据的方法后续我希望通过username去查询和修改用户数据所以这里设置了一下。 2. 创建API文件 接下来我们根据这个表创建user.api文件 syntax v1type (// 定义注册接口的 json 请求体RegisterRequest {//请求体定义了 Username 和Password 字段 并且都设置了不能为空Username string json:username validate:required Password string json:password validate:required}// 定义注册接口的 json 响应体RegisterResponse {//响应体 定义类一个Message 用来返回结果Message string json:message} )type (// 定义登录接口的 json 请求体LoginRequest {Username string json:username validate:requiredPassword string json:password validate:required}// 定义登录接口的 json 响应体LoginResponse {//正常的业务逻辑用户登录后会产生一个token用来记录登录信息Token string json:token} )server (group: user // 生成代码时都会被放到 user 目录下prefix: /v1 //定义路由前缀为 /v1 )// 定义 HTTP 服务 // 微服务名称为 user-api生成的代码目录和配置文件将和 user 值相关 service user-api {// 定义用户注册接口//定义 http.HandleFunc 转换的 go 文件名称及方法handler RegisterHandler// 请求方法为 post// 路由为 /register // 请求体为 RegisterRequest// 响应体为 RegisterResponse响应体必须有 returns 关键字修饰post /register (RegisterRequest) returns (RegisterResponse)//用户登录handler LoginHandlerpost /login (LoginRequest) returns (LoginResponse) } 这个 API 的结构可以通过注释清晰地理解。在下面这段代码中我们可以看到请求参数和响应参数之间通过 returns 进行修饰 post /register (RegisterRequest) returns (RegisterResponse)需要注意的是请求参数和响应参数并不总是必需的。 例如在更新数据时我们可以省略响应体只保留请求参数 post /update (UpdateUserInfoReq)同样当我们通过 token 获取数据时也可以省略请求体而只定义响应参数 get /getinfo returns (UserInfoResp)这样的灵活性使得 API 定义更加简洁明了。 3. 生成服务代码和model代码 我们创建一个新的项目目录设置为user 使用goctl通过user.api生成项目代码: goctl api go --api user.api --dir ./下面我们就演示怎么使用goclt 以及sql生成model 在刚刚生成的项目中在internal目录下创建一个modle的文件夹然后再这个文件夹下面创建user.sql把之前的sql语句粘贴进来然后使用命令 goctl model mysql ddl --src user.sql --dir ./当你看到 Done. 输出则代表生成成功了帮我们生成了下面3个文件。 $ tree . ├── usermodel.go ├── usermodel_gen.go └── vars.go usermodel.go: 定义数据库表的模型及其业务逻辑。usermodel_gen.go: 自动生成的代码包含数据库操作的实现。vars.go: 全局变量和配置的定义供各个模块使用。 4.查看model代码 现在我们来具体看下goctl帮我们生成的model代码我们先看下usersmodel.go文件 它帮我们定义了NewUsersModel 用来返回user表模型 // NewUsersModel returns a model for the database table. //NewUsersModel 返回数据库表的模型 func NewUsersModel(conn sqlx.SqlConn) UsersModel {return customUsersModel{defaultUsersModel: newUsersModel(conn),} }接着看下usersmodel_gen.go文件 帮我们根据数据库自动生成了数据模型 Users struct {Id int64 db:idUsername string db:usernamePassword string db:passwordCreatedAt time.Time db:created_at}给usersModel定义了基本的增删改查的接口 usersModel interface {Insert(ctx context.Context, data *Users) (sql.Result, error)FindOne(ctx context.Context, id int64) (*Users, error)FindOneByUsername(ctx context.Context, username string) (*Users, error)Update(ctx context.Context, data *Users) errorDelete(ctx context.Context, id int64) error }5.链接数据库 go-zero 提供了一个强大的 sqlx 工具用于操作数据库。 所有 SQL 相关操作的包在 github.com/zeromicro/go-zero/core/stores/sqlx 在使用 go-zero 框架与数据库交互时通常会遵循一系列的步骤和逻辑下面是调用数据库的典型顺序和逻辑 增加数据库连接配置 打开 etc\user-api.yaml文件增加 MySQL 连接字符串 #定义了一个名为MysqlDB的结构体并有一个名为DbSource的字符串。 MysqlDB:# 字符串请根据实际配置环境更改DbSource: root:roottcp(127.0.0.1:3306)/test_zero 设置结构体用来解析配置文件 现在我们需要把这个MysqlDB这个字段映射到 go-zero的结构体中打开internal/config/config.go 文件把代码修改为以下 type Config struct {rest.RestConfMysqlDb struct{DbSource string json:DbSource} }我们之前提到过Config 结构体中的字段与 YAML 文件中的字段可以不区分大小写但必须保持一致否则会导致解析错误。如果希望使用不同的名称可以通过 json: 标签指定 YAML 文件中对应的字段名。 把数据库连接注册到服务上下文 go-zero提供了一个快捷的方式可以创建 Mysql 链接接着我们就可以使用这个连接进行各种数据库操作: func NewMysql(datasource string, opts ...SqlOption) SqlConn 我们先使用sqlx.NewMysql(c.MysqlDb.DbSource) 创建数据库连接然后传给NewUsersModel,初始化UserModel,打开internal/svc/servicecontext.go文件把代码修改为 //ServiceContext 结构体用户封装服务的上下文信息相当环境初始化type ServiceContext struct {Config config.Config //UserModel: 类型为 model.UsersModel表示与用户相关的数据库模型//用于处理与用户相关的数据操作如用户的创建、读取、更新和删除等UserModel model.UsersModel } //NewServiceContext 是ServiceContext 的构造函数 //它接收配置参数并初始化 ServiceContext确保服务可以访问所需的配置和数据模型 func NewServiceContext(c config.Config) *ServiceContext {return ServiceContext{Config: c, //把配置信息注册到服务上下文//通过调用 model.NewUsersModel 函数对UserModel 进行初始化//sqlx.NewMysql 是数据库连接,链接字符串为config中的MysqlDb.DbSourceUserModel: model.NewUsersModel(sqlx.NewMysql(c.MysqlDb.DbSource)),} }sqlx.NewMysql 是 sqlx 包中的一个函数通常用于创建一个新的 MySQL 数据库连接,我们可以看下它在go-zero中的代码 就是传入datasource 字符串然后返回SqlConn 数据库连接 func NewMysql(datasource string, opts ...SqlOption) SqlConn {opts append([]SqlOption{withMysqlAcceptable()}, opts...)return NewSqlConn(mysqlDriverName, datasource, opts...) }二、CURD演示 1. 实现注册服务查、赠 现在我们开始实现注册逻辑 打开internal/logic/user/registerlogic.go文件修改代码如下 func (l *RegisterLogic) Register(req *types.RegisterRequest) (resp *types.RegisterResponse, err error) {// todo: add your logic here and delete this lineuserModel : l.svcCtx.UserModel //从服务上下文获取UserModel //调用FindOneByUsername查询用户数据判断用户是否已经注册//req.Username 从请求信息中获取 Usernameuser, _ : userModel.FindOneByUsername(l.ctx, req.Username)//如果username不为空说明已经注册if user ! nil {//已经存在用户return nil, err}//插入新的数据_, err userModel.Insert(l.ctx, model.Users{Username: req.Username,Password: req.Password,CreatedAt: time.Now(),})if err ! nil {// 注册失败return nil, err}//返回响应信息return types.RegisterResponse{Message: 注册成功,}, nil }我们先运行程序测试一下 2.实现登录服务 查 现在我们开始实现登录逻辑 打开internal/logic/user/loginlogic.go文件修改代码如下 func (l *LoginLogic) Login(req *types.LoginRequest) (resp *types.LoginResponse, err error) {// todo: add your logic here and delete this line//因为我们目前还没涉及到jwt鉴权所以先把token当面message使用userModel : l.svcCtx.UserModeluser, _ : userModel.FindOneByUsername(l.ctx, req.Username)//查询username判断是否有数据if user ! nil { //如果有数据密码是否和数据库匹配if req.Password user.Password {return types.LoginResponse{Token: 登录成功,}, nil} else {return types.LoginResponse{Token: 密码错误,}, nil}} else {return types.LoginResponse{Token: 用户未注册,}, nil}}运行项目
http://www.w-s-a.com/news/689331/

相关文章:

  • 专业做房地产网站建设wordpress侧面小工具
  • 旅游网站开发的重要性wordpress添加广告插件
  • 关于网站建设管理工作的报告婚纱网站php
  • 东莞市建设培训中心网站那个网站可以看高速的建设情况
  • 网站开发工具安卓版专业小程序商城开发
  • 网站不备案影响收录吗深圳住房网站app
  • 交网站建设域名计入什么科目开发平台教程
  • 个人网站定制北京快速建站模板
  • 河南海华工程建设监理公司网站高端论坛网站建设
  • 网站建设网络推广方案图片编辑器免费
  • 如何用dw做网站设计设计头条
  • 网站建设基础及流程北京商场购物中心排名
  • 青州市城乡建设局网站自建网站步骤
  • wordpress文章延迟加载优化设计答案四年级上册语文
  • 做网站源码要给客户嘛怎么在运行打开wordpress
  • 北海住房和城乡建设局网站wordpress标题去掉私密
  • 织梦网站安装视频做网站都有那些步骤
  • 网站空间大小选择沈阳微信网站制作
  • 网站分享对联广告网站结构的类型
  • 三维家是在网站上做还是在app上北京网站建设 专业10年
  • 模拟网站建设网站建设认准猪八戒网
  • godaddy网站建设教程微信手机网站搭建
  • 网站建设 商城淄博网站制作哪家好
  • 廊坊手机网站团队国际贸易进口代理公司
  • 运用django做网站网站建设问题及解决办法
  • 商丘企业网站服务c mvc 网站开发
  • 太仓建设工程网站广州seo排名外包
  • 成都的教育品牌网站建设做网站不给提供ftp
  • 建站行业市场人力管理系统
  • qq钓鱼网站在线生成器google关键词搜索工具