Avec pyramid, vous pouvez créer une application à partir d'un seul fichier comme indiqué dans Exemple de hello world dans la documentation officielle. Cependant, dans la plupart des cas, il existe de nombreux modèles de création d'un projet (pcreate) et de démarrage à partir d'un fichier de configuration (pserve development.ini).
D'un autre côté, quand je trouve difficile de créer un projet, je veux aussi le faire si je peux le faire avec une application à un seul fichier. Cependant, il existe peu d'exemples d'applications à un seul fichier dans la documentation officielle. Il s'arrête à l'exemple de retour d'un objet Response sans utiliser le moteur de modèle, et il n'y a pas de description au-delà.
Une note sur la façon d'utiliser le moteur de template (par exemple mako, jinja2, chameleon) dans une application à un seul fichier.
hello world
Cité de la documentation officielle. Création de votre première application Pyramid - The Pyramid Web Framework v1.5.1
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello %(name)s!' % request.matchdict)
if __name__ == '__main__':
config = Configurator()
config.add_route('hello', '/hello/{name}')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
Je veux changer la partie suivante.
--Renvoyer un objet Response au lieu du moteur de modèle --Par exemple, je veux utiliser mako.
Inclure des modules pour chaque moteur de modèle
Pour mako, vous devez spécifier l'emplacement du répertoire de niveau supérieur du modèle.
Si vous avez créé un projet, écrivez les paramètres de l'application dans le fichier de paramètres (par exemple development.ini). Par exemple, les paramètres du moteur de modèle mentionné précédemment sont écrits comme suit.
mako.directories = appname:templates
Je veux définir ce "mako.directories" même dans une seule application de fichier. Dans ce cas, transmettez le dictionnaire en tant qu'argument au constructeur de pyramid.config.Configurator.
En fait, la fonction principale lors de la création d'un projet a un argument appelé settings, qui est passé au constructeur.
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
config = Configurator(settings=settings)
config.include('pyramid_chameleon')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
config.scan()
return config.make_wsgi_app()
Le fichier .ini devient juste un dictionnaire une fois passé, vous pouvez donc lui donner un dictionnaire. La forme est la suivante.
if __name__ == '__main__':
#Faire de la même hiérarchie que le code source de l'application la hiérarchie de niveau supérieur du modèle
here = os.path.abspath(os.path.dirname(__file__))
settings = {"mako.directories": [here]}
config = Configurator()
Après cela, vous pouvez créer une application à fichier unique à l'aide du moteur de modèle en procédant comme suit de la même manière que lors de la création à partir d'un projet. (Étant donné que la partie du modèle est divisée en premier lieu, il ne peut pas être appelé une application à un fichier)
Voici un exemple de combinaison de ces éléments.
onefile.py
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
import os.path
def hello_world(request):
return {"name": request.matchdict["name"]}
if __name__ == '__main__':
here = os.path.dirname(os.path.abspath(__file__))
settings = {"mako.directories": here,
"pyramid.reload_all": True}
config = Configurator(settings=settings)
config.include("pyramid_mako")
config.add_mako_renderer(".html")
config.add_route('hello', '/hello/{name}')
config.add_view(hello_world, route_name='hello', renderer="hello.html")
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
hello.html
Hello ${name}!
Pour ce qui suit, définissez "pyramid.reload_templates" sur True.
Recommended Posts