Menyerahkan borang dan melompat kepadanya adalah tugas biasa di Golang. Penyerahan borang boleh digunakan untuk banyak kes penggunaan yang berbeza seperti pendaftaran pengguna, mencari, menambah atau mengemas kini data, dsb. Dalam artikel ini, kami akan meneroka cara menulis penyerah borang asas dan cara mengendalikan lompatan.
Melaksanakan penyerahan borang
Pertama, kami memerlukan borang HTML mudah untuk menyerahkan data. Berikut ialah borang ringkas dengan nama pengguna dan kata laluan:
<html> <head> <title>登录页面</title> </head> <body> <h1>欢迎来到我的网站</h1> <form action="/login" method="post"> 用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> <input type="submit" value="提交"> </form> </body> </html>
Borang menggunakan kaedah POST untuk menghantar data penyerahan ke laluan /login. Kami perlu menyediakan pengendali pada pelayan Go untuk menerima data ini.
Di bahagian pelayan, kita perlu menggunakan pakej net/http untuk memproses borang ini. Kita boleh menggunakan fungsi http.HandleFunc() untuk menetapkan pengendali bagi penyerahan borang. Berikut ialah kod untuk pengendali:
func loginHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() username := r.Form.Get("username") // 获取表单中的用户名 password := r.Form.Get("password") // 获取表单中的密码 // 在这里执行登录逻辑 // ... // 跳转到登录成功后的页面 http.Redirect(w, r, "/success", http.StatusSeeOther) }
Pengendali menghuraikan data borang terlebih dahulu menggunakan kaedah r.ParseForm(). Kemudian, kami mendapat nama pengguna dan kata laluan dengan memanggil kaedah r.Form.Get(). Seterusnya, kami boleh melakukan sebarang logik pengesahan log masuk dalam pengendali dan melompat ke halaman lain jika perlu.
Mengendalikan lompatan
Dalam pengendali di atas, kami menggunakan kaedah http.Redirect() untuk melompat ke halaman lain. Kaedah ini menerima 3 parameter: objek http.ResponseWriter, *http.Request objek dan URL sasaran. Parameter http.StatusSeeOther mengarahkan kami untuk menggunakan kod status 303 untuk lompatan.
Apabila borang diserahkan, pelayan akan menghantar respons HTTP kepada penyemak imbas. Dalam tindak balas, kami boleh menetapkan pengepala HTTP untuk memberitahu penyemak imbas untuk melompat ke halaman lain. Ini boleh dilakukan dengan menetapkan pengepala HTTP "Lokasi". Dalam Go, kita boleh menggunakan objek ResponseWriter untuk menetapkan pengepala HTTP.
Dalam pengendali di atas, kami menetapkan URL sasaran kepada "/success" dalam kaedah http.Redirect(). Selepas log masuk berjaya, kami akan melompat ke URL ini. Kami perlu menyediakan pengendali baharu dalam pengendali pelayan untuk mengendalikan URL ini.
Berikut ialah kod untuk pengendali:
func successHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "恭喜,登录成功!") }
Pengendali hanya mengeluarkan mesej log masuk yang berjaya ke halaman. Dalam aplikasi sebenar, kita mungkin perlu melakukan operasi lain, seperti menambah data pada pangkalan data atau mengemas kini data.
Menggunakan gorila/mux untuk penghalaan
Kami boleh menggunakan perpustakaan standard HTTP untuk melaksanakan penyerahan borang, tetapi fungsi penghalaannya sangat terhad. Oleh itu, kami biasanya menggunakan pakej perisian pihak ketiga untuk mengurus penghalaan. Dalam contoh ini kita akan menggunakan gorila/mux.
gorilla/mux ialah pakej perisian pihak ketiga yang sangat popular yang boleh digunakan untuk mencipta penghalaan HTTP yang fleksibel. Menggunakan gorila/mux kita boleh memetakan berbilang pengendali ke laluan yang berbeza. Ini menjadikan kod lebih mudah dibaca dan diselenggara.
Berikut ialah kod lengkap menggunakan gorila/mux:
package main import ( "fmt" "net/http" "github.com/gorilla/mux" ) func loginHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() username := r.Form.Get("username") password := r.Form.Get("password") // 执行登录逻辑 // ... // 跳转到成功页面 http.Redirect(w, r, "/success", http.StatusSeeOther) } func successHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "恭喜,登录成功!") } func main() { r := mux.NewRouter() r.HandleFunc("/login", loginHandler).Methods("POST") r.HandleFunc("/success", successHandler) http.ListenAndServe(":8000", r) }
Dalam contoh ini, kami menggunakan pakej gorila/mux untuk mencipta penghala baharu. Kami kemudian menambah dua pengendali pada penghala: satu untuk mengendalikan penyerahan borang dan satu lagi untuk mengendalikan halaman kejayaan. Kami menggunakan kaedah penghala.HandleFunc() untuk menyediakan pengendali dan menentukan kaedah HTTP. Kita juga boleh menggunakan kaedah penghala.PathPrefix() untuk menetapkan awalan URL pengendali.
Barisan terakhir kod memanggil fungsi http.ListenAndServe() untuk memulakan pelayan. Fungsi ini menerima dua parameter: alamat pelayan dan objek penghala.
Ringkasan
Dalam artikel ini, kami mempelajari cara melaksanakan penyerahan borang dalam Go dan mengendalikan lompatan selepas penyerahan berjaya. Kami juga mempelajari tentang faedah menggunakan pakej gorila/mux untuk mengurus penghalaan HTTP. Dengan menggunakan teknologi ini, kami boleh mencipta aplikasi web yang cantik dan kaya dengan ciri.
Atas ialah kandungan terperinci golang hantar borang lompat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!