Usando o contexto de solicitação em modelos Go
Em modelos Go, você pode encontrar uma situação em que precisa acessar informações da solicitação de acionamento, como determinar se o usuário atual é um administrador. No entanto, os modelos não têm conhecimento inerente do contexto da solicitação.
Solução: Pipelines
Uma abordagem comum é usar pipelines para passar os dados necessários do manipulador para o modelo . Isso envolve a criação de uma variável de pipeline que contém as informações de contexto relevantes e, em seguida, acessá-las dentro do modelo. Por exemplo:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
Dentro do modelo:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
Contexto de incorporação
Outra opção é incorporar o contexto da solicitação em uma estrutura de dados de modelo personalizado. Isso permite que você acesse os dados do modelo e o contexto simultaneamente:
type TemplateData struct {
Data interface{}
Context *http.Request
}
Dentro do modelo:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
Método de funil
Embora o método Funcs possa ser usado para definir funções personalizadas, ele não é recomendado para lidar com lógica complexa, como determinar permissões de usuário. É melhor manter essas tarefas dentro dos manipuladores ou controladores.
Prática recomendada
Geralmente, é considerada prática recomendada limitar os modelos ao tratamento da lógica de exibição e evitar a introdução de lógica de negócios ou solicitar dependências de contexto. Porém, em determinadas situações, pode ser necessário acessar informações específicas da solicitação, daí os métodos descritos acima.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3