Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pengesahan borang dalam rangka kerja WEB bahasa Go?

Bagaimana untuk melaksanakan pengesahan borang dalam rangka kerja WEB bahasa Go?

WBOY
WBOYasal
2023-06-05 08:01:32896semak imbas

Dengan populariti aplikasi web, pengesahan borang diterima pakai secara meluas sebagai teknologi asas untuk memastikan integriti, kebolehpercayaan dan keselamatan data. Pengesahan borang juga memainkan peranan penting dalam rangka kerja web bahasa Go.

Dalam rangka kerja web bahasa Go, terdapat banyak cara untuk melaksanakan pengesahan borang. Artikel ini akan memperkenalkan empat kaedah yang paling biasa digunakan, iaitu:

  1. Gunakan ungkapan biasa
  2. Gunakan pustaka pengesahan borang
  3. Pengesah borang tersuai
  4. Menggunakan pengikatan model
  5. Menggunakan ungkapan biasa

Ungkapan biasa ialah alat yang paling biasa digunakan untuk pengesahan borang. Dalam bahasa Go, pengesahan borang adalah sangat mudah menggunakan ungkapan biasa. Berikut ialah contoh mudah yang menggunakan ungkapan biasa untuk mengesahkan alamat e-mel yang dimasukkan oleh pengguna:

func validateEmail(email string) bool {
    emailRegex := regexp.MustCompile(`^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$`)
    return emailRegex.MatchString(email)
}

Dalam kod di atas, pakej regexp dalam bahasa Go dipanggil dan ungkapan biasa ditakrifkan menggunakan literal rentetan ungkapan. Seterusnya gunakan fungsi MatchString() untuk mengesahkan sama ada alamat e-mel yang dimasukkan oleh pengguna memenuhi keperluan ungkapan biasa. Fungsi mengembalikan benar jika alamat e-mel yang dimasukkan oleh pengguna sepadan dengan ungkapan biasa, jika tidak ia mengembalikan palsu.

Menggunakan ungkapan biasa untuk pengesahan borang adalah sangat mudah, tetapi ia juga mempunyai beberapa kelemahan. Ungkapan biasa boleh menjadi sangat kompleks dan sukar untuk dikekalkan, terutamanya bagi mereka yang tidak biasa dengan ungkapan biasa.

  1. Menggunakan perpustakaan pengesahan borang

Terdapat juga banyak perpustakaan pengesahan borang dalam bahasa Go, antaranya yang lebih popular ialah govalidator dan validator. Perpustakaan ini menjadikannya pantas dan mudah untuk mengesahkan data borang tanpa perlu menulis ungkapan biasa yang kompleks. Berikut ialah contoh menggunakan pustaka pengesah untuk mengesahkan borang:

type User struct {
    Name  string `validate:"required"`
    Email string `validate:"required,email"`
}

func validateForm(user User) []string {
    var errors []string
    validate := validator.New()
    err := validate.Struct(user)
    if err != nil {
        for _, err := range err.(validator.ValidationErrors) {
            errors = append(errors, err.Field()+" is "+err.Tag())
        }
    }
    return errors
}

Dalam kod di atas, kami mentakrifkan struktur Pengguna, yang mengandungi dua medan: Nama dan E-mel, dan gunakan teg pengesahan untuk pengesahan. Seterusnya, gunakan fungsi validator.New() untuk mencipta objek validator dan memanggil fungsi Struct() untuk pengesahan borang. Jika pengesahan borang gagal, ralat tidak kosong dan maklumat ralat disimpan dalam tatasusunan ralat dan dikembalikan.

  1. Pengesah borang tersuai

Selain menggunakan ungkapan biasa dan pustaka pengesahan borang, kami juga boleh menyesuaikan pengesah borang. Dalam bahasa Go, jika kami mempunyai beberapa keperluan pengesahan khusus kami sendiri, kami boleh menggunakan pengesah tersuai untuk melaksanakannya. Berikut ialah contoh menggunakan pengesah tersuai untuk mengesahkan sama ada umur pelajar memenuhi keperluan:

type Student struct {
    Name string
    Age  int
}

func (s *Student) Validate() error {
    if s.Age < 0 || s.Age > 120 {
        return errors.New("age must be between 0 and 120")
    }
    return nil
}

func main() {
    s := &Student{"Tom", 130}
    err := s.Validate()
    if err != nil {
        fmt.Println(err)
    }
}

Dalam kod di atas, kami mentakrifkan struktur Pelajar dan melaksanakan fungsi Validate(). Dengan melaksanakan fungsi Validate(), kami boleh menyesuaikan setiap medan struktur Pelajar, yang sangat berguna untuk pengesah borang tersuai.

  1. Menggunakan pengikatan model

Menggunakan pengikatan model ialah satu lagi kaedah pengesahan bentuk yang sangat mudah dalam bahasa Go. Menggunakan pengikatan model, kami boleh mengikat data borang terus ke dalam struktur data dan mengautomasikan pengesahan borang. Berikut ialah contoh menggunakan pengikatan model:

type Address struct {
    City  string `form:"city"`
    State string `form:"state"`
}

func main() {
    r := gin.Default()
    r.GET("/address", func(c *gin.Context) {
        var address Address
        err := c.Bind(&address)
        if err != nil {
            c.String(http.StatusBadRequest, err.Error())
            return
        }
        c.String(http.StatusOK, fmt.Sprintf("city=%s,state=%s", address.City, address.State))
    })
    r.Run()
}

Dalam kod di atas, kami menggunakan rangka kerja Gin dan mentakrifkan struktur Alamat dan menandakannya dengan teg borang. Seterusnya, kami menggunakan fungsi c.Bind() untuk mengikat data borang kepada struktur Alamat dan melaksanakan pengesahan borang. Jika pengesahan borang gagal, mesej ralat 400 Bad Request dikembalikan, jika tidak, 200 OK dikembalikan dan maklumat alamat dikembalikan kepada klien.

Ringkasnya, pengesahan borang adalah sangat penting dalam reka bentuk aplikasi web, dan terdapat banyak kaedah untuk melaksanakan pengesahan borang dalam rangka kerja web bahasa Go. Bergantung pada situasi, anda boleh memilih untuk mengesahkan data borang menggunakan ungkapan biasa, pustaka pengesahan borang, pengesah borang tersuai atau pengikatan model. Dalam pembangunan sebenar, kaedah yang sesuai harus dipilih mengikut keperluan projek, dan dikembangkan dan dioptimumkan dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengesahan borang dalam rangka kerja WEB bahasa Go?. 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