2016-07-03 18 views
2

Ich möchte einen Anfrage-Handler registrieren, möchte aber nicht die Scan-Methode verwenden.Wie konfiguriere ich Routen am Pyramid Framework?

Warum muss ich beide Methoden (add_route und add_view) anstelle von einem aufrufen?

from wsgiref.simple_server import make_server 
from pyramid.config import Configurator 
from pyramid.response import Response 
from pyramid.view import view_config 


@view_config(name='home') 
def home(request): 
    return Response('Welcome!') 


def add_view(config, handler, name, path): 
    config.add_route(name, path) 
    config.add_view(handler, name=name) 


if __name__ == '__main__': 
    config = Configurator() 
    add_view(config, home, 'home', '/') 
    app = config.make_wsgi_app() 
    server = make_server('0.0.0.0', 8080, app) 
    server.serve_forever() 
+0

Für "einfaches Routing" siehe http://websauna.org/docs/api/websauna.system.core.route.html?highlight=simple_route#websauna.system.core.route.simple_route - dies ist nicht für Pyramidkern (noch), aber Sie können Inspiration schauen, wenn Sie mehrere Wege haben. –

Antwort

5

(1) Wenn Sie den @view_config Dekorateur in Pyramid verwenden, müssen Sie config.scan() verwenden. (Dies ist eine deklarative Konfiguration.) Siehe Adding View Configuration Using the @view_config Decorator.

Alternativ können Sie die imperative Konfiguration mit config.add_view() verwenden. Siehe Adding View Configuration Using add_view().

(2) Vielleicht sollten Sie fragen: "Warum möchte ich meine Route und Ansicht mit einer einzigen Deklaration konfigurieren?" Dies verhindert, dass Sie einer einzelnen Route mehrere Ansichten zuweisen. Die Bequemlichkeit, eine Codezeile zu speichern, hat ihre Nachteile.

Wenn Sie in Pyramid eine Route und eine Ansicht separat deklarieren, können Sie einer einzelnen Route viele Ansichten zuweisen. Ordnen Sie beispielsweise einer Ansicht für eine GET-Anforderung und einer anderen für eine POST-Anforderung für dieselbe Route zu. Als eine Seite davon macht es das Erstellen von RESTful-APIs weniger aufwendig. Weitere Informationen finden Sie in der Pyramid-Dokumentation Pyramid Introduction - View predicates and many views per route.

+0

"Dies verhindert, dass Sie einer einzelnen Route mehrere Ansichten zuweisen können." Während dies zutrifft, ist dies für die meisten Anwendungsfälle nicht erforderlich. Für eine "Do not repeat yourself" -Lösung, die die Codezeilen minimiert, siehe http://websauna.org/docs/api/websauna.system.core.route.html?highlight=simple_route#websauna.system.core.route. simple_route –

+0

aber die 'simple_route' als * dekorator * ist nicht ohne ihre Nachteile, wie in [Pyramid design defense] (http://docs.pylonsproject.org/projects/pyramid/en/latest/designdefense.html#routes- Bedürfnis-relative-Reihenfolge) –