HappstackチュートリアルのGETとPOSTを1つのハンドラー関数にまとめようとしているので、常に一緒になっています。これは、私が達成したことですが、見苦しいようです。
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
ものを引き出して、1か所だけにします。できれば、POSTでHTMLも返すようにしてください。より多くの経験を持つ人には「オフ」に見える他のもの。何か案は?
更新:#1を理解しました。do methodM GET
上に追加しても問題ありok $ toResponse $ ...
ませんが、私のような初心者が注意するのは、垂直に並べる必要があることです。つまり、 minはoinmethodM
の真上にある必要がありますok
。うまくいけば、これは誰かの欲求不満の時間を節約します。
更新2:#3はかなり簡単でした-POSTの最後の行を更新するだけですok $ toResponse $ html $ do B.body $ toHtml $ user ++ ...