2

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"]

変更したいのは次のとおりです。

  1. methodM GETただの失敗ではなく、明示的に呼びかけます。

  2. 冗長なok $ toResponseものを引き出して、1か所だけにします。

  3. できれば、POSTでHTMLも返すようにしてください。

  4. より多くの経験を持つ人には「オフ」に見える他のもの。何か案は?

更新:#1を理解しました。do methodM GET上に追加しても問題ありok $ toResponse $ ...ませんが、私のような初心者が注意するのは、垂直に並べる必要があることです。つまり、 minはoinmethodMの真上にある必要がありますok。うまくいけば、これは誰かの欲求不満の時間を節約します。

更新2:#3はかなり簡単でした-POSTの最後の行を更新するだけですok $ toResponse $ html $ do B.body $ toHtml $ user ++ ...

4

1 に答える 1

2

フォームレット (Happstack で動作) および/または消化機能 (Snap や Happstack で動作) を検索します。

http://hackage.haskell.org/package/formlets

http://hackage.haskell.org/package/digestive-functors

消化機能がフォームレットより優れているかどうかは調べていませんが、新しいパッケージであり、古いパッケージよりも単純である可能性があります。

いくつかの例があります

JavaScript にコンパイルされ、クライアント側で同様のことを行う F# のライブラリさえあります。これにより、JS からのログインの可用性などを確認しながら、優れたフォームレット/機能スタイルで記述できます。それは WebSharper と呼ばれます: WebSharper

于 2011-08-22T21:11:51.367 に答える