Pyramida | |
---|---|
Typ | Rámec webové aplikace |
Vývojář | Ben Bangert, James Gardner |
Zapsáno v | Krajta |
Operační systém | Křížová platforma |
První vydání | prosinec 2010 _ |
Nejnovější verze | |
Licence | BSD |
webová stránka | pylonsproject.com |
Pyramid ( anglicky pyramid - pyramid) je softwarový framework (framework) pro vývoj open source webových aplikací napsaných v Pythonu v rámci projektu Pylons [2] .
Vytvoření Pyramid bylo ovlivněno frameworky jako Zope , Pylons a Django . Pyramidový kód byl vyvinut v projektu repoze.bfg a název se změnil v důsledku sloučení projektů BFG a Pylons. [3]
Konstrukce pyramidy je založena na následujících principech [4] :
Na obranu svého návrhu napsali autoři Pyramid poměrně rozsáhlý dokument, který má vyvrátit mýty o frameworku. Například po kritice modelu MVC v Pyramid následuje podrobné vysvětlení, že MVC je pro webové aplikace „přitažené za vlasy“. Následující citát [5] dobře charakterizuje přístup k terminologii v Pyramidě:
Věříme, že existují pouze dvě věci: zdroje (zdroj) a pohledy (zobrazení). Strom zdrojů představuje strukturu webu a pohled představuje zdroj. Šablony _
ve skutečnosti jen detail implementace nějakého pohledu: přísně vzato, nejsou vyžadovány a pohled může vrátit odpověď (odpověď) i bez nich. Neexistuje žádný „kontrolér“ (kontrolor): prostě neexistuje. „Model“ je buď strom zdrojů, nebo „model domény“ (jako je model SQLAlchemy ), který vůbec není součástí rámce. Zdá se nám, že naše terminologie je rozumnější vzhledem k existujícím omezením webových technologií.
Původní text (anglicky)[ zobrazitskrýt]...[My] říkáme, že existují dvě věci: zdroje a názory. Strom zdrojů představuje strukturu webu, pohled představuje zdroj. Šablony jsou ve skutečnosti pouze detailem implementace jakéhokoli daného pohledu: pohled nepotřebuje šablonu, aby vrátil odpověď. Neexistuje žádný „kontrolér“: prostě neexistuje. „Model“ je reprezentován buď stromem zdrojů nebo „modelem domény“ (jako model SQLAlchemy), který je zcela oddělený od rámce. To se nám vzhledem k současným omezením webu zdá jako rozumnější terminologie.
Hlavní výhody pyramidy jsou [4] :
Přestože není těžké napsat aplikaci (projekt) Pyramid od začátku, má Pyramid nástroje pro inicializaci kódu nové aplikace podle zvolené šablony, nebo v terminologii Pyramid scaffolds [ 7 ] . Distribuce například zahrnuje rámcové struktury pro projekty využívající ZODB nebo SQLAlchemy .
Projekt je adresář obsahující alespoň jeden balíček Pythonu .
Typická adresářová struktura pro malý projekt:
MůjProjekt/ | -- CHANGES.txt | -- vývoj.ini | -- MANIFEST.in | -- můjprojekt | | -- __init__.py | | -- statické | | | -- favicon.ico | | | -- logo.png | | ` -- pylons.css | | -- šablony | | ` -- mytemplate.pt | | -- testy.py | ` -- views.py | -- výroba.ini | -- README.txt | -- setup.cfg ` -- setup.pyVýše uvedená struktura, jak vyplývá z dokumentace, by se neměla příliš měnit, protože to může ostatním vývojářům bránit v rychlé orientaci v kódu projektu [8] . Rostoucí projekt však může vyžadovat určité změny. Například pohledy, modely (pokud jsou použity) a testy lze rozdělit do modulů a přenést je do podadresářů views, models a tests (nezapomeňte je dodat se souborem __init__.py).
Projekt může být například v sestavě (řekněme v adresáři src), která dává dohromady všechny požadované komponenty. Není nutné, aby se projekt Pyramid skládal z jednoho balíčku. Velikost projektu je omezena pouze dostatečnou znalostí vývojářů o možnostech Pyramid [9] .
Pyramid může pracovat s jakýmkoli serverem WSGI . Projekty vytvořené z předem sestavených frameworků používají server servírky.
Každý příchozí požadavek na aplikační server Pyramid (požadavek) musí najít pohled (pohled), který jej zpracuje.
V Pyramid existují dva základní přístupy k nalezení správného druhu pro zpracovávaný požadavek: založené na párování (matching), jako ve většině podobných frameworků, a bypassu (traversal), jako v Zope . Oba přístupy lze navíc úspěšně kombinovat v jedné aplikaci.
Nejjednodušší příklad s nastavením trasy (vypůjčeno z dokumentace):
# Zde config je instance pyramid.config.Configurator config . add_route ( 'idea' , 'site/ {id} ' ) config . add_view ( 'mypackage.views.site_view' , route_name = 'nápad' )Použití bypassu nejlépe ilustruje malý příklad:
z wsgiref.simple_server import make_server z pyramid.config import Konfigurátor z pyramid.response import Odpověď # Třída nějaké třídy prostředků Resource ( dict ): pass # Strom zdrojů (pevně zakódovaný) v kořenové továrně def get_root ( request ): return Resource ({ 'a' : Resource ({ 'b' : Resource ({ 'c' : Resource ()})})}) # View-to-invoke, které může zobrazit prostředek zdroje (v kontextu) def hello_world_of_resources ( context , request ): output = "Zdroj a jeho podřízené položky: %s " % kontext return Response ( output ) if __name__ == '__main__' : config = Konfigurace konfigurátoru ( root_factory = get_root ) . add_view ( hello_world_of_resources , context = Resource ) app = config . make_wsgi_app () server = make_server ( '0.0.0.0' , 8080 , app ) server . sloužit_navždy ()V tomto příkladu je hierarchie procházení pevně zakódována do metody get_rootpomocí vnořených slovníků, zatímco skutečné aplikace musí určit potřebný přístup pomocí klíčů (metoda __getitem__pomáhá organizovat takový přístup). Kód také obsahuje kořenovou továrnu , ze které vlastně začíná procházení uzlů (uzlů) stromu zdrojů. Volatelný pohled je reprezentován příponou hello_world_of_resources. Jednoduše řečeno, na základě URL požadavku Pyramid prochází hierarchií a najde zdroj a aplikuje na něj „nejlepší“ view-to-call (v našem příkladu je to jediný). [deset]
Konfiguraci aplikace, tedy specifikaci nastavení, která ovlivňují její provoz, lze v Pyramidě provést dvěma způsoby: imperativním a deklarativním.
Imperativní konfigurace se provádí voláním metod konfigurátoru těsně před spuštěním aplikace.
Deklarativní konfigurace je dána pohledovými dekoratéry. Před spuštěním je aplikace „naskenována“ na konfigurační parametry pomocí scan()metody konfigurátoru. Příklad z dokumentace:
from pyramid.response import Odpověď z pyramid.view import view_config @view_config ( name = 'hello' , request_method = 'GET' ) def hello ( request ): return Response ( 'Ahoj' )Oba způsoby konfigurace jsou zcela zaměnitelné. [jedenáct]
Ti, kteří chtějí, mohou použít ZCML ke konfiguraci instalací příslušného balíčku.
V Pyramid můžete pro generování HTML použít různé motory. Chameleon a Mako jsou tedy součástí dodávky. [12] Kromě nich můžete zařadit i další, například Jinja2 .
Práce s formami lze provádět například pomocí trojice Peppercorn-Clander-Deform.
Jedna z nejjednodušších aplikací pro Pyramid [13] :
z wsgiref.simple_server import make_server z pyramid.config import Konfigurátor z pyramid.response import Odpověď def hello_world ( request ): return Response ( 'Ahoj %(name)s !' % request . matchdict ) if __name__ == '__main__' : config = Konfigurace konfigurátoru ( ) . add_route ( 'ahoj' , '/ahoj/ {jméno} ' ) config . add_view ( hello_world , route_name = 'ahoj' ) app = config . make_wsgi_app () server = make_server ( '0.0.0.0' , 8080 , app ) server . sloužit_navždy ()Krajta | |
---|---|
Společenství | |
Implementace | |
jiný |
|