Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menggunakan bahasa Go untuk menulis modul pendaftaran pengguna dalam sistem memasak dari pintu ke pintu?

Bagaimana untuk menggunakan bahasa Go untuk menulis modul pendaftaran pengguna dalam sistem memasak dari pintu ke pintu?

WBOY
WBOYasal
2023-11-01 17:13:59506semak imbas

Bagaimana untuk menggunakan bahasa Go untuk menulis modul pendaftaran pengguna dalam sistem memasak dari pintu ke pintu?

Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk menulis modul pendaftaran pengguna untuk sistem memasak dari pintu ke pintu Kami akan merangkumi proses perniagaan asas pengguna pendaftaran dan berikan contoh kod.

1. Analisis keperluan

Pertama sekali, kita perlu memahami langkah asas yang perlu diselesaikan oleh pengguna dalam sistem kami. Modul pendaftaran pengguna perlu memenuhi keperluan berikut:

  1. Pengguna boleh memasukkan nama pengguna, kata laluan dan nombor telefon bimbit untuk mendaftar akaun
  2. Nama pengguna perlu disahkan semasa mendaftar. Kesahihan kata laluan dan nombor telefon bimbit
  3. Selepas pengguna berjaya mendaftar, sistem perlu menghantar pemberitahuan mesej teks secara automatik dan melompat ke halaman log masuk
  4. #🎜🎜 #
2. Pemilihan Teknologi#🎜 🎜#

Bahasa Go ialah bahasa pengaturcaraan dengan prestasi cemerlang dan sintaks yang mudah ia digunakan secara meluas dalam pembangunan bahagian pelayan, pengaturcaraan rangkaian dan bidang lain. Oleh itu, kami memilih untuk menggunakan bahasa Go untuk menulis modul pendaftaran pengguna ini.

Pada masa yang sama, kita juga perlu menggunakan API yang disediakan oleh penyedia perkhidmatan SMS untuk melaksanakan fungsi pemberitahuan SMS. Dalam artikel ini, kami akan menggunakan Perkhidmatan SMS Awan Alibaba untuk menyelesaikan tugas ini.

3. Reka bentuk pangkalan data

Sebelum kita mula menulis kod, kita perlu mereka bentuk jadual data untuk mengurus maklumat pengguna. Kita boleh menggunakan pangkalan data MySQL untuk menyimpan data pengguna.

Di sini kami mereka bentuk jadual data bernama pengguna untuk menyimpan maklumat pengguna Struktur jadual adalah seperti berikut:

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='用户表';

Melalui pernyataan SQL di atas. kami Mencipta jadual data bernama pengguna dan menentukan medan yang perlu disimpan dalam jadual data. users的数据表来保存用户信息,表结构如下:

require (
    github.com/gin-gonic/gin v1.6.3
    github.com/aliyun/alibaba-cloud-sdk-go/sdk v1.0.0
)

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

四、编写代码

  1. 引入依赖

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

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

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

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. 编写路由函数

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

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: 更多参数校验操作
}
  1. 处理请求数据

registerHandler

4. Tulis kod
  1. Introduce dependencies

Kami menggunakan github.com/gin /gin framework, iaitu rangka kerja web ringan yang boleh membantu kami membina aplikasi HTTP dengan cepat.
  1. Pada masa yang sama, kami menggunakan github.com/aliyun/alibaba-cloud-sdk-go/sdk untuk menghubungi API perkhidmatan SMS Awan Alibaba.
Sebelum kita mula menulis kod, kita perlu menambah maklumat pergantungan dalam fail 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: 插入用户数据并发送短信通知
}

    #🎜🎜 # Menulis fungsi penghalaan

    Kami menggunakan permintaan HTTP POST untuk menyerahkan maklumat pendaftaran pengguna. Dalam fail router.go, kami boleh mentakrifkan laluan /register dan mengikatnya pada fungsi pendaftaran.

    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": "注册成功",
    })

      Memproses data permintaan

      #🎜🎜#Dalam fungsi registerHandler, kita perlu mendapatkan semula permintaan parameter daripada Dapatkan nama pengguna, kata laluan dan nombor telefon mudah alih dan sahkannya. #🎜🎜#rrreee#🎜🎜##🎜🎜#Semak sama ada pengguna sudah wujud#🎜🎜##🎜🎜##🎜🎜#Sebelum memasukkan data ke dalam pangkalan data, kita perlu menyemak sama ada nama pengguna dan nombor telefon bimbit telah didaftarkan. Jika ia telah didaftarkan, mesej ralat akan dikembalikan. #🎜🎜#rrreee#🎜🎜##🎜🎜#Masukkan data pengguna dan hantar pemberitahuan SMS #🎜🎜##🎜🎜##🎜🎜#Akhirnya, kami perlu memasukkan data pengguna ke dalam pangkalan data dan menghantarnya melalui Alibaba Cloud SMS Pemberitahuan API Hantar SMS. #🎜🎜#rrreee#🎜🎜#Pada ketika ini, kami telah selesai menulis modul pendaftaran pengguna dan boleh mengujinya melalui alatan seperti Posmen. #🎜🎜##🎜🎜# 5. Ringkasan #🎜🎜##🎜🎜# Dalam artikel ini, kami menggunakan bahasa Go untuk menulis modul pendaftaran pengguna untuk sistem memasak dari pintu ke pintu. Dengan menggunakan API SMS Awan Alibaba untuk melaksanakan fungsi pemberitahuan SMS dan menggunakan pangkalan data MySQL untuk mengurus data pengguna, sistem pendaftaran pengguna yang lengkap boleh dilaksanakan. Jika anda berminat dengan pembangunan bahasa Go, anda juga boleh cuba menggunakan projek ini untuk pembelajaran yang lebih mendalam. #🎜🎜#

Atas ialah kandungan terperinci Bagaimana untuk menggunakan bahasa Go untuk menulis modul pendaftaran pengguna dalam sistem memasak dari pintu ke pintu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn