LINUX.ORG.RU

Racket, взаимодействие с базой данных в web-server

 , , ,


0

2

Сабж, а если точнее то как получать объекты что хранятся в базе данных и затем отобразить их на HTML странице?

Если использовал питон до достаточно было использовать Jinja:

{% for somedbobject in val %}
   {% somedbobject %}

★★
Ответ на: комментарий от playX

И это все надо ведь использовать в html файле? Или в коде Racket'a?

В шаблоне html. Получается что-то вроде.

В коде Racket

(define clients (read-clients-from-db))
(include-template "template.html")

В template.html

<table>
   @in[c clients]{
    <tr><td>@(car c), @(cdr c)</td></tr>
   }
</table>

В результате в выводимом коде HTML из переменной clients заполнится таблица.

monk ★★★★★
()
Ответ на: комментарий от monk

Что бы не создавать новую тему, то сразу задам сдесь вопрос, а как собсна с html шаблона передавать данные в БД, например с поля ввод в JS(prompt) или HTML(input) в код Racket что бы получалась работоспособной данная функция:

(define user_login
    ((lambda (user_input input_password)
    (postgresql-connect #:user user_input
                        #:database "postgres"
                        #:password input_password))))

HTML:
<script>
var user_input = prompt("Enter your username")
var input_password = prompt("Enter your password")
</script>

playX ★★
() автор топика
Ответ на: комментарий от playX

((lambda (user_input input_password)

У тебя опять лишняя открывающая скобка.

а как собсна с html шаблона передавать данные в БД,

Если правильно, то не через JS. Должно быть что-то вроде:

(define login-formlet
  (formlet
   (div "Enter your username:" ,{input-string . => . user})
   (div "Enter your password:" ,{input-string . => . password})
   (list user password)))

(define (start request)
  (define (response-generator embed/url)
    (response/output
      (lambda (op)
        (write-bytes (string->bytes/utf-8 (include-template "templates/login.html")) op)))))

(define (main request)
  (define connection
     (apply user-login (formlet-process login-formlet request)))
  (define (response-generator embed/url)
    (response/output
      (lambda (op)
        (write-bytes (string->bytes/utf-8 (include-template "templates/main.html")) op)))))

В templates/login.html:

<HTML>
  ...
  <BODY>
  ...
    <FORM action="@(embed/url main)">
      @(apply string-append 
         (map xexpr->string (formlet-display login-formlet)))
    </FORM>
  ...
  </BODY>
</HTML>

А если очень хочется именно через JS, то надо из JS вызвать страницу на сервере и в параметрах передать имя и пароль. А в Racket указать, что на этой странице вытащить пароль из параметров (через request-bindings, В общем, если нет крайней необходимости, лучше так не делать.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.