Веб-интерфейс для витого приложения - PullRequest
10 голосов
/ 09 марта 2011

У меня есть приложение, написанное на Twisted, и я хочу добавить веб-интерфейс для управления и мониторинга.Мне понадобится много динамических страниц, которые отображают текущее состояние и конфигурацию, поэтому я надеялся на среду, которая предлагает, по крайней мере, язык шаблонов с наследованием и некоторой базовой маршрутизацией.

Поскольку я использую Twisted в любом случае, я хотелиспользовать twisted.web - но язык шаблонов слишком прост, и кажется, что единственный фреймворк, Nevow, довольно мертв (он на панели запуска , но домашняя страница и вики не работают, и я не могу найти документацию).

Итак, какие у меня варианты?

  • Существуют ли какие-либо другие системы на основе twisted.web?
  • Существуют ли другие структуры, которые работают с витым реактором?
  • Должен ли я просто получить веб-фреймворк (я думаю, web.py или flask) и запустить его в потоке?

Спасибо за ваши ответы.

Ответы [ 3 ]

14 голосов
/ 15 марта 2011

Поскольку Nevow все еще не работает, и я не хотел самостоятельно писать маршрутизацию и поддержку шаблонной библиотеки, я использовал Flask. Это оказалось довольно просто:

# make a Flask app
from flask import Flask, render_template, g
app = Flask(__name__)
@app.route("/")
def index():
    return render_template("index.html")

# run in under twisted through wsgi
from twisted.web.wsgi import WSGIResource
from twisted.web.server import Site

resource = WSGIResource(reactor, reactor.getThreadPool(), app)
site = Site(resource)

# bind it etc
# ...

Пока работает без нареканий.

6 голосов
/ 23 июня 2011

Вы можете привязать его непосредственно к реактору, как показано в примере ниже:

reactor.listenTCP(5050, site)
reactor.run()

Если вам нужно добавить детей к корневому посещению WSGI по этой ссылке для получения дополнительной информации.

Вот пример, показывающий, как объединить WSGI Resource со статическим дочерним элементом.

from twisted.internet import reactor
from twisted.web import static as Static, server, twcgi, script, vhost
from twisted.web.resource import Resource
from twisted.web.wsgi import WSGIResource
from flask import Flask, g, request

class Root( Resource ):
    """Root resource that combines the two sites/entry points"""
    WSGI = WSGIResource(reactor, reactor.getThreadPool(), app)
    def getChild( self, child, request ):
        # request.isLeaf = True
        request.prepath.pop()
        request.postpath.insert(0,child)
        return self.WSGI
    def render( self, request ):
        """Delegate to the WSGI resource"""
        return self.WSGI.render( request )

def main():
static = Static.File("/path/folder")
static.processors = {'.py': script.PythonScript,
                 '.rpy': script.ResourceScript}
static.indexNames = ['index.rpy', 'index.html', 'index.htm']

root = Root()
root.putChild('static', static)

reactor.listenTCP(5050, server.Site(root))
reactor.run()
3 голосов
/ 09 марта 2011

Невов - очевидный выбор. К сожалению, аппаратное обеспечение веб-сервера divmod и аппаратного обеспечения сервера резервного копирования вышло из строя одновременно. Они пытаются восстановить данные и опубликовать их на панели запуска, но это может занять некоторое время.

Вы также можете использовать любой существующий шаблонный модуль с twisted.web; Джинджа2 приходит на ум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...