Heim  >  Artikel  >  Backend-Entwicklung  >  golang Formular abschicken springen

golang Formular abschicken springen

WBOY
WBOYOriginal
2023-05-14 17:29:08632Durchsuche

Ein Formular abzuschicken und dann dorthin zu springen, ist eine häufige Aufgabe in Golang. Das Absenden eines Formulars kann für viele verschiedene Anwendungsfälle verwendet werden, z. B. für die Benutzerregistrierung, das Suchen, das Hinzufügen oder Aktualisieren von Daten usw. In diesem Artikel erfahren Sie, wie Sie einen einfachen Formularübermittler schreiben und wie Sie mit Sprüngen umgehen.

Formularübermittlung implementieren

Zuerst benötigen wir ein einfaches HTML-Formular, um Daten zu übermitteln. Unten finden Sie ein einfaches Formular mit einem Benutzernamen und einem Passwort:

<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>

Das Formular verwendet die POST-Methode, um Übermittlungsdaten an den /login-Pfad zu senden. Wir müssen einen Handler auf dem Go-Server einrichten, um diese Daten zu empfangen.

Auf der Serverseite müssen wir das Paket net/http verwenden, um dieses Formular zu verarbeiten. Wir können die Funktion http.HandleFunc() verwenden, um einen Handler für die Formularübermittlung festzulegen. Hier ist der Code für den Handler:

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)
}

Der Handler analysiert zunächst die Formulardaten mit der Methode r.ParseForm(). Anschließend erhalten wir den Benutzernamen und das Passwort, indem wir die Methode r.Form.Get() aufrufen. Als Nächstes können wir eine beliebige Login-Validierungslogik im Handler ausführen und bei Bedarf zu einer anderen Seite springen.

Verwaltung von Sprüngen

Im obigen Handler verwenden wir die Methode http.Redirect(), um zu einer anderen Seite zu springen. Diese Methode empfängt 3 Parameter: http.ResponseWriter-Objekt, *http.Request-Objekt und Ziel-URL. Der Parameter http.StatusSeeOther weist uns an, für den Sprung den Statuscode 303 zu verwenden.

Wenn das Formular gesendet wird, sendet der Server eine HTTP-Antwort an den Browser. In der Antwort können wir HTTP-Header setzen, um den Browser anzuweisen, zu einer anderen Seite zu springen. Dies kann durch Setzen des HTTP-Headers „Location“ erfolgen. In Go können wir das ResponseWriter-Objekt verwenden, um HTTP-Header festzulegen.

Im obigen Handler setzen wir die Ziel-URL in der http.Redirect()-Methode auf „/success“. Nach erfolgreichem Login werden wir zu dieser URL springen. Wir müssen im Handler des Servers einen neuen Handler einrichten, um diese URL zu verarbeiten.

Das Folgende ist der Code des Handlers:

func successHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "恭喜,登录成功!")
}

Der Handler gibt lediglich eine erfolgreiche Anmeldemeldung auf der Seite aus. In realen Anwendungen müssen wir möglicherweise andere Vorgänge ausführen, z. B. das Hinzufügen von Daten zur Datenbank oder das Aktualisieren von Daten.

Gorilla/Mux für das Routing verwenden

Wir können die HTTP-Standardbibliothek verwenden, um die Formularübermittlung zu implementieren, aber ihre Routing-Funktionalität ist sehr begrenzt. Daher verwenden wir normalerweise Softwarepakete von Drittanbietern, um das Routing zu verwalten. In diesem Beispiel verwenden wir Gorilla/Mux.

gorilla/mux ist ein sehr beliebtes Softwarepaket eines Drittanbieters, mit dem sich flexibles HTTP-Routing erstellen lässt. Mit Gorilla/Mux können wir mehrere Handler verschiedenen Routen zuordnen. Dies erleichtert das Lesen und Warten des Codes.

Hier ist der vollständige Code mit Gorilla/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)
}

In diesem Beispiel verwenden wir das Gorilla/Mux-Paket, um einen neuen Router zu erstellen. Anschließend fügen wir dem Router zwei Handler hinzu: einen für die Formularübermittlung und einen für die Erfolgsseite. Wir verwenden die Methode router.HandleFunc(), um den Handler einzurichten und die HTTP-Methode anzugeben. Wir können auch die Methode router.PathPrefix() verwenden, um das URL-Präfix des Handlers festzulegen.

Die letzte Codezeile ruft die Funktion http.ListenAndServe() auf, um den Server zu starten. Diese Funktion empfängt zwei Parameter: Serveradresse und Routerobjekt.

Zusammenfassung

In diesem Artikel haben wir gelernt, wie man die Formularübermittlung in Go implementiert und den Sprung nach einer erfolgreichen Übermittlung bewältigt. Wir haben auch die Vorteile der Verwendung des Gorilla/Mux-Pakets zur Verwaltung des HTTP-Routings kennengelernt. Durch den Einsatz dieser Technologien können wir schöne und funktionsreiche Webanwendungen erstellen.

Das obige ist der detaillierte Inhalt vongolang Formular abschicken springen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Hat Golang Unterricht?Nächster Artikel:Hat Golang Unterricht?