среда, 16 октября 2013 г.

Python на Frontend-е

Мне как питонисту немного тяжко писать сложные Javascript-ы для улучшения функционала пользовательских страниц веб-проектов.
Поэтому я искал какой-то способ упростить написания фронтенда на Javascript.
Сначала мне попался Nodejs  и его coffeescript который по синтаксису похож на питон, но все же Nodejs это серверная платформа (бекенд) и не хочется распыляться поддержку еще одной платформы для одного веб-проекта (обновление модулей и т.д.).
Потом я встретил проект PyJamas, который является транслятором кода Python в код  Javascript. Здорово! почти то, что нужно! но нужно встраивать автоматизацию генерации кода на javascript и следить за ссылками на готовые файлы. Но похоже скорость ответа страницы будет зависеть от того как быстро переведется весь код питона для фронтенда в код Javascript.

Но самое простое решение это использовать проект Brython . Фактически это транслятор кода питон в javascript написанный на самом javascript-е и выполняется на стороне клиента. Отрицательной стороной является на мой взгляд  - нагрузка клиента (браузера), т.к. появляется дополнительные процессы для трансляции кода.
Вот пример как можно просто встроить питон в веб страничку:

на сайта проекта предлагают встраивать так:

<head> 
<script src="/brython.js"></script>
</head>
<body onload="brython()">
<script type="text/python">
def echo():
    alert(doc["zone"].value)
</script>
В своем Django проекте я использовал локальное подключение:

<script type="text/javascript" src="{{ STATIC_URL }}brython/brython.js"></script>
    <script type="text/python" src="{{ STATIC_URL }}brython/src/test.py"></script>
    <script type="text/javascript">
        function start_py(){
                brython();
                process();
        }
    </script>

Здесь  brython/src/test.py - файл с исходниками на питоне для фронтенда,
start_py() - функция привязанные к какому либо событию на страничке.
Во всех функциях, где будет использоваться питон обязательно сначала нужно использовать функцию brython();
Далее можно вызывать функции питона или прямо писать на питоне, только код нужно обернуть  в  <script type="text/python">.

Вот так!
Мне кажется это весьма удобно.


Комментариев нет:

Отправить комментарий