使用Yesod Haskell列出sqlite表中的所有用户

时间:2013-10-30 12:25:41

标签: html database sqlite haskell yesod

我是Yesod的新手,想知道如何列出表用户的所有用户。使用的数据库是sqlite。这是函数

getAllUsersR :: Handler Html
getAllUsersR = do "getAllUsersR not implemented yet!"

这是表用户

CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"ident" VARCHAR NOT NULL,
"password" VARCHAR NULL,CONSTRAINT "unique_user" UNIQUE ("ident"))

1 个答案:

答案 0 :(得分:1)

要阅读经过身份验证的用户,您可以写:

getUserProfileR :: Handler RepHtml
getUserProfileR = do

  userId <- requireAuthId
  Entity _ userData <- runDB $ selectFirst [UserProfileUser ==. userId] [] >>= return.fromJust

  defaultLayout $ do
    setTitle "User profile"
    $(widgetFile "userprofile")

列出所有内容,删除过滤器,使用select代替selectFirst并在(小部件上)写一些像

<h1>User list</h1>

<table>
  <tr>
    <th>Name
    <th>Mail
    <th>...
  $forall (Entity _ userData) <- userList
    <tr>
      <td>#{userProfileName userData}
      <td>#{userProfileMail userData}
      <td>...

(请原谅我没有写完整且经过测试的解决方案,但我这里没有开发沙箱)

修改

完整且经过测试的示例。 (你需要yesod-platform和yesod-bin)

$ ghc-pkg list | grep yesod-[0-9]
    yesod-1.2.2.1
$ yesod init
$ cd userList

为简单起见,编辑“Handler / Home.hs”文件并添加

getUserListR :: Handler Html
getUserListR = do
  users <- runDB $ selectList [] []
  defaultLayout $ do
    setTitle "Public user list!"
    [whamlet|
        <h1>User list</h1>
        <table>
          <tr>
            <th>Mail
          $forall (Entity _ userData) <- users
            <tr>
              <td>#{userIdent userData}
    |]

将下一行添加到“config / routes”

/userlist UserListR GET

测试

$ cabal install
$ yesod devel

输入一些用户登录并登出

http://site:port/auth/login
(do login)
http://site:port/auth/logout

列出

用户
http://site:port/userlist