Pyramida (web framework)

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] .

Historie

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]

Základní principy a koncepty

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.

Funkce

Hlavní výhody pyramidy jsou [4] :

Použití rámce k vývoji aplikace

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.py

Výš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.

Odesílání URL a procházení stromu zdrojů

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]

Konfigurace

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.

Generování HTML

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.

Příklad

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

Aplikace

Poznámky

  1. Vydání 2.0 – 2021.
  2. O frameworku Pyramid . Získáno 8. července 2012. Archivováno z originálu dne 23. července 2012.
  3. BFG přejmenováno na Pyramid (downlink) . Získáno 8. července 2012. Archivováno z originálu 13. listopadu 2010. 
  4. 1 2 Úvod do pyramidy . Získáno 8. července 2012. Archivováno z originálu 15. června 2012.
  5. O „MVC“ v Pyramidě . Získáno 8. července 2012. Archivováno z originálu 15. června 2012.
  6. Portování do Pythonu 3 . Získáno 8. července 2012. Archivováno z originálu dne 1. října 2020.
  7. podobně jako lešení
  8. Struktura projektu Pyramida . Datum přístupu: 9. července 2012. Archivováno z originálu 22. června 2012.
  9. O jedinečných rysech pyramidy . Získáno 9. července 2012. Archivováno z originálu 12. září 2014.
  10. Algoritmus obcházení . Získáno 9. července 2012. Archivováno z originálu 10. června 2012.
  11. O konfiguraci . Získáno 8. července 2012. Archivováno z originálu 15. června 2012.
  12. Moduly šablon . Získáno 9. července 2012. Archivováno z originálu 15. června 2012.
  13. Dokumentace pyramidy. . Datum přístupu: 8. července 2012. Archivováno z originálu 29. června 2012.

Odkazy

Literatura