Maison >développement back-end >Golang >Comment utiliser le langage Go pour écrire le module d'enregistrement des utilisateurs dans le système de cuisson porte-à-porte ?

Comment utiliser le langage Go pour écrire le module d'enregistrement des utilisateurs dans le système de cuisson porte-à-porte ?

WBOY
WBOYoriginal
2023-11-01 17:13:59506parcourir

Comment utiliser le langage Go pour écrire le module denregistrement des utilisateurs dans le système de cuisson porte-à-porte ?

Cet article expliquera comment utiliser le langage Go pour écrire un module d'enregistrement d'utilisateur pour un système de cuisine porte-à-porte. Nous couvrirons le processus métier de base de l'enregistrement des utilisateurs et fournirons des exemples de code.

1. Analyse des exigences

Tout d'abord, nous devons comprendre les étapes de base que les utilisateurs doivent effectuer dans notre système. Le module d'enregistrement des utilisateurs doit répondre aux exigences suivantes :

  1. Les utilisateurs peuvent saisir leur nom d'utilisateur, leur mot de passe et leur numéro de téléphone portable pour créer un compte
  2. La légitimité du nom d'utilisateur, du mot de passe et du numéro de téléphone portable doit être vérifiée lors de l'inscription
  3. Le le système exige qu'après l'enregistrement réussi de l'utilisateur, envoie automatiquement des notifications par SMS et accède à la page de connexion

2. Sélection de la technologie

Le langage Go est un langage de programmation avec d'excellentes performances et une syntaxe simple. Il est actuellement largement utilisé dans le développement côté serveur, programmation réseau et autres domaines. Par conséquent, nous choisissons d'utiliser le langage Go pour écrire ce module d'enregistrement des utilisateurs.

Dans le même temps, nous devons également utiliser l'API fournie par le fournisseur de services SMS pour implémenter la fonction de notification SMS. Dans cet article, nous utiliserons le service Alibaba Cloud SMS pour effectuer cette tâche.

3. Conception de la base de données

Avant de commencer à écrire du code, nous devons concevoir une table de données pour gérer les informations utilisateur. Nous pouvons utiliser la base de données MySQL pour stocker les données utilisateur.

Ici, nous concevons une table de données nommée users pour enregistrer les informations utilisateur. La structure de la table est la suivante : users的数据表来保存用户信息,表结构如下:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(20) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '密码',
  `phone` varchar(20) NOT NULL COMMENT '手机号码',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

通过上面的SQL语句,我们创建了一个名为users的数据表,并且定义了数据表中需要存储的字段。

四、编写代码

  1. 引入依赖

我们使用github.com/gin-gonic/gin框架,它是一个轻量级的Web框架,可以帮助我们快速构建HTTP应用程序。

同时,我们使用github.com/aliyun/alibaba-cloud-sdk-go/sdk来调用阿里云短信服务API。

在开始编写代码之前,我们需要在go.mod文件中添加依赖信息:

require (
    github.com/gin-gonic/gin v1.6.3
    github.com/aliyun/alibaba-cloud-sdk-go/sdk v1.0.0
)
  1. 编写路由函数

我们使用HTTP POST请求来提交用户注册信息。在router.go文件中,我们可以定义一个/register路由,并将其绑定到一个注册函数上。

package main

import (
    "net/http"

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

func main() {
    router := gin.Default()

    // 绑定注册函数
    router.POST("/register", registerHandler)

    router.Run()
}

func registerHandler(c *gin.Context) {
    // TODO
}
  1. 处理请求数据

registerHandler

func registerHandler(c *gin.Context) {
    // 获取请求参数
    username := c.PostForm("username")
    password := c.PostForm("password")
    phone := c.PostForm("phone")

    // 参数校验
    if username == "" || password == "" || phone == "" {
        c.JSON(http.StatusBadRequest, gin.H{
            "code":    http.StatusBadRequest,
            "message": "请求参数错误",
        })
        return
    }

    // TODO: 更多参数校验操作
}

Avec l'instruction SQL ci-dessus, nous créons une table de données nommée users. code > table de données et définit les champs qui doivent être stockés dans la table de données.
  1. 4. Écrire du code

Introduire des dépendances

  1. Nous utilisons le framework github.com/gin-gonic/gin, qui est un framework Web léger qui peut nous aider à créer rapidement une application HTTP.
En même temps, nous utilisons github.com/aliyun/alibaba-cloud-sdk-go/sdk pour appeler l'API du service Alibaba Cloud SMS.

Avant de commencer à écrire du code, nous devons ajouter des informations de dépendance dans le fichier go.mod :

func registerHandler(c *gin.Context) {
    // 获取请求参数
    username := c.PostForm("username")
    password := c.PostForm("password")
    phone := c.PostForm("phone")

    // 参数校验
    if username == "" || password == "" || phone == "" {
        c.JSON(http.StatusBadRequest, gin.H{
            "code":    http.StatusBadRequest,
            "message": "请求参数错误",
        })
        return
    }

    // 检查用户是否已存在
    var user User
    if err := db.Where("username = ?", username).Or("phone = ?", phone).First(&user).Error; err == nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "code":    http.StatusBadRequest,
            "message": "用户名或手机号已被注册",
        })
        return
    }

    // TODO: 插入用户数据并发送短信通知
}

    Écrivez la fonction de routage

    Nous utilisons HTTP POST demande de soumission des informations d’enregistrement de l’utilisateur. Dans le fichier router.go, nous pouvons définir une route /register et la lier à une fonction d'enregistrement.

    import "github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
    
    // 插入用户数据并发送短信通知
    user := User{
        Username: username,
        Password: utils.MD5(password),
        Phone:    phone,
    }
    if err := db.Create(&user).Error; err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{
            "code":    http.StatusInternalServerError,
            "message": "系统错误",
        })
        return
    }
    
    // 调用阿里云短信API发送短信通知
    client, _ := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "AKID", "AKSECRET")
    request := dysmsapi.CreateSendSmsRequest()
    request.Scheme = "https"
    request.PhoneNumbers = phone
    request.SignName = "签名"
    request.TemplateCode = "模板ID"
    request.TemplateParam = `{"code": "123456"}`
    response, err := client.SendSms(request)
    if err != nil || !response.IsSuccess() {
        c.JSON(http.StatusInternalServerError, gin.H{
            "code":    http.StatusInternalServerError,
            "message": "短信发送失败",
        })
        return
    }
    
    c.JSON(http.StatusOK, gin.H{
        "code":    http.StatusOK,
        "message": "注册成功",
    })
      🎜Traitement des données de la demande🎜🎜🎜Dans la fonction registerHandler, nous devons obtenir le nom d'utilisateur, le mot de passe et le numéro de téléphone portable à partir des paramètres de la demande et les vérifier. 🎜rrreee🎜🎜Vérifiez si l'utilisateur existe déjà🎜🎜🎜Avant d'insérer des données dans la base de données, nous devons vérifier si le nom d'utilisateur et le numéro de téléphone portable ont été enregistrés. S'il a été enregistré, un message d'erreur sera renvoyé. 🎜rrreee🎜🎜Insérer les données utilisateur et envoyer une notification SMS🎜🎜🎜Enfin, nous devons insérer les données utilisateur dans la base de données et envoyer une notification SMS via l'API SMS Alibaba Cloud. 🎜rrreee🎜À ce stade, nous avons terminé l'écriture du module d'enregistrement des utilisateurs et pouvons le tester via des outils tels que Postman. 🎜🎜5. Résumé🎜🎜Dans cet article, nous avons utilisé le langage Go pour écrire un module d'enregistrement des utilisateurs pour le système de cuisson porte-à-porte. En utilisant l'API SMS d'Alibaba Cloud pour implémenter la fonction de notification SMS et en utilisant la base de données MySQL pour gérer les données utilisateur, un système complet d'enregistrement des utilisateurs peut être mis en œuvre. Si vous êtes intéressé par le développement du langage Go, vous pouvez aussi bien essayer d'utiliser ce projet pour un apprentissage plus approfondi. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn