Golang сохраняет пустую запись в БД, при переходе по стрелке назад
Есть фрагмент кода, для создания записи в БД. Но если человек в браузере нажимает кнопку назад(вернуться), на предыдущую страницу, то функция воспринимает это как POST и сохраняет пустую запись в БД. Как этого можно избежать?
func CreateContract(writer http.ResponseWriter, request *http.Request) {
db := config.DbConn()
if request.Method == "POST" {
numb := request.FormValue("Numb")
comment := request.FormValue("Comment")
conclusionDate := request.FormValue("ConclusionDate")
experationDate := request.FormValue("ExperationDate")
details := request.FormValue("Details")
link := request.FormValue("Link")
partnerID := request.FormValue("PartnerID")
yieldID := request.FormValue("YieldID")
subjectID := request.FormValue("SubjectID")
responsible := request.FormValue("Responsible")
insForm, err := db.Prepare("INSERT INTO contracts(numb, comment, conclusion_date, experation_date, details, link, partner_id, yield_id, subject_id,responsible) VALUES (?,?,?,?,?,?,?,?,?,?)")
if err != nil {
panic(err.Error())
}
insForm.Exec(numb, comment, conclusionDate, experationDate, details, link, partnerID, yieldID, subjectID, responsible)
log.Println("Inserted")
}
defer db.Close()
http.Redirect(writer, request, "/contracts", 301)
}
Ответы (1 шт):
Автор решения: Алексей
→ Ссылка
Рабочий вариант:
Форма на странице /contracts:
<form action="/create-contract" method="POST">...</form>
Обработчик формы (/create-contract):
func CreateContract(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
// здесь создаём запись в БД
http.Redirect(w, r, "/contracts", http.StatusMovedPermanently) // возвращает на страницу с формой
}
Протестировал в Chrome и Edge. При нажатии кнопки 'назад', возвращается на страницу /contracts.