Anfragekontext in Go-Vorlagen verwenden
In Go-Vorlagen kann es vorkommen, dass Sie auf Informationen aus der auslösenden Anfrage zugreifen müssen, B. feststellen, ob der aktuelle Benutzer ein Administrator ist. Vorlagen verfügen jedoch nicht über ein inhärentes Bewusstsein für den Anforderungskontext.
Lösung: Pipelines
Ein gängiger Ansatz besteht darin, Pipelines zu verwenden, um die erforderlichen Daten vom Handler an die Vorlage zu übergeben . Dazu gehört das Erstellen einer Pipeline-Variablen, die die relevanten Kontextinformationen enthält, und der anschließende Zugriff darauf innerhalb der Vorlage. Zum Beispiel:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
Innerhalb der Vorlage:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
Kontext einbetten
Eine weitere Option besteht darin, den Anforderungskontext in eine benutzerdefinierte Vorlagendatenstruktur einzubetten. Dadurch können Sie gleichzeitig auf die Vorlagendaten und den Kontext zugreifen:
type TemplateData struct {
Data interface{}
Context *http.Request
}
Innerhalb der Vorlage:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
Funnel-Methode
Während die Funcs-Methode zum Definieren benutzerdefinierter Funktionen verwendet werden kann, wird sie nicht für die Handhabung komplexer Logik wie der Bestimmung von Benutzerberechtigungen empfohlen. Es ist besser, solche Aufgaben bei den Handlern oder Controllern zu belassen.
Best Practice
Im Allgemeinen gilt es als Best Practice, Vorlagen auf die Handhabung der Anzeigelogik zu beschränken und die Einführung von Geschäftslogik zu vermeiden oder Kontextabhängigkeiten anfordern. In bestimmten Situationen kann es jedoch erforderlich sein, auf bestimmte Anfrageinformationen zuzugreifen, daher die oben beschriebenen Methoden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3