Как получить доступ к отдельным полям формы в Clojure? - PullRequest
0 голосов
/ 08 мая 2018

Я создаю свое самое первое веб-приложение, и мне трудно получить доступ к отдельным полям формы, когда пользователь submit заполняет форму. Вот что у меня есть:

(defroutes app
  (GET "/" [] homepage)
  (POST "/city" request display-city)
  (route/resources "/")
  (route/not-found "Not Found"))


(defn display-city [request]
  (html5
     [:div {:class "the-city"}
      [:h2 "ALL ABOUT YOUR CITY"]
      [:ul
       [:li "Your city is " (str request) "! That's all"]]]))

;; and here's the hiccup form:
   [:form {:action "/city" :method "post"}
    (anti-forgery-field)
    [:p "Enter your home address"]
    [:div
     [:label {:for "street-field"} "Street:"]
     [:input {:id "street-field"
              :type "text"
              :name "street"}]]
    [:div
     [:label {:for "city-field"} "City:"]
     [:input {:id "city-field"
              :type "text"
              :name "city"}]
    [:div
     [:label {:for "state-field"} "State:"]
     [:input {:id "state-field"
              :type "text"
              :name "state"}]
     [:label {:for "zip-field"} "ZIP:"]
     [:input {:id "zip-field"
              :type "text"
              :name "zip"
              :size "10"}]]
    [:div.button
     [:button {:type "submit"} "Submit"]]]])

;; Когда я запускаю приведенный выше код, я вижу всю форму, отправленную через (str request), в виде карты Clojure. Но я не могу понять, как извлечь отдельные «ключи / значения» (из этой адресной формы я хотел бы извлечь город) или как сохранить эти результаты таким образом, чтобы я мог их использовать. Есть идеи?

Это супер базовая /city страница, которую я пытаюсь запустить, чтобы понять, как все работает, прежде чем создавать большие. Спасибо!

1 Ответ

0 голосов
/ 08 мая 2018

На вашей карте request должен быть ключ :form-params с картой пар ключ / значение, которые были POSTed. Вот как вы можете получить индивидуальное значение:

(get-in request [:form-params :city])

Или вы можете разложить карту :form-params, чтобы связать сразу несколько значений:

(let [{:keys [city state zip]} (:form-params request)]
  (format "%s, %s %s" city state zip))
...