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.

→ Ссылка