Я пытаюсь получить GET и POST из учебника Happstack в одну функцию-обработчик, чтобы они всегда были вместе, чего я добился, но это выглядит ужасно.
login :: ServerPart Response
login = msum [
do methodM POST
user <- look "user"
pass <- look "pass"
success <- query $ CheckPassword user pass
ok $ toResponse (user ++ ", " ++ pass ++ ": " ++ (if success then "Valid" else "Invalid")),
ok $ toResponse $ html $ do
B.head $ do
title "Login Form"
B.body $ do
form ! enctype "multipart/form-data" ! B.method "POST" $ do
B.label "user: " >> input ! type_ "text" ! name "user" ! size "10"
B.label "pass: " >> input ! type_ "text" ! name "pass" ! size "10"
input ! type_ "submit" ! name "upload"]
ВещиЯ хотел бы изменить следующее:
Явно вызывать methodM GET
, а не просто падать.
Извлеките избыточный ok $ toResponse
и храните его только в одном месте.
Желательно также иметь HTML-код возврата POST.
Все остальное, что выглядит "неприлично" для всех, у кого больше опыта.Есть идеи?
ОБНОВЛЕНИЕ : выяснил # 1;добавление do methodM GET
над ok $ toResponse $ ...
работает нормально, но новичкам, таким как я, следует отметить, что должен располагаться вертикально , т. е. m в methodM
должно быть прямо над o inok
.Надеюсь, это сэкономит кому-то часы разочарования.
ОБНОВЛЕНИЕ 2 : # 3 было довольно просто - просто обновите последнюю строку POST до ok $ toResponse $ html $ do B.body $ toHtml $ user ++ ...