Веб-интерфейс для скрученного приложения

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

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

Итак, каковы мои варианты?

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

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

  • Twisted and Websockets: Beyond Echo
  • Как я могу выполнить загрузку файлов в twisted.web, которые не сосут?
  • Как написать тесты для кода с помощью twisted.web.client.Agent и его подклассов?
  • Написание отличных веб-ресурсов Twisted
  • 3 Solutions collect form web for “Веб-интерфейс для скрученного приложения”

    Поскольку Nevow все еще работает, и я не хотел писать маршрутизацию и поддержку шаблона lib, я в конечном итоге использовал 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 # ... 

    До сих пор он работает безупречно.

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

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

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

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

     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() 

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

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

    Python - лучший язык программирования в мире.