zu verhandeln ist eine intelligente, einfache Content-Negotiation für Python-Web-Anwendungen.
Content-Negotiation kann schwierig, gut zu tun. Im Idealfall sollten Sie Ihren Code DRY, und Sie würden nicht immer wieder dieselben alten Textvorschlag in mehrere Ansichtsmethoden, um die gleiche Domain-Objekt in verschiedenen Formaten zu emittieren. verhandeln hilft Ihnen das Leben noch einfacher, indem Sie die Ansicht Methoden mit Formatierer, die automatisch in die vom Kunden gewünschten Format übersetzen Ihre Domain-Objekte zu schmücken.
Es ist wirklich einfach zu bedienen. Hoffentlich wird dies beispielsweise (für eine Flasche Anwendung) stellt die wichtigsten Punkte auf der Hand:
# Zuerst schreiben wir ein paar Formatierer, die angeben, wie das übersetzen
# Ausgabe des View-Funktion in einem bestimmten Format. Hier definieren wir ein
# JSON-Formatierer und eine HTML-Formatierer, die ein Template-Parameter übernimmt.
von negotiate.flask Import Formatter
Klasse JSONFormatter (Formatter):
& Nbsp; format = 'json'
& Nbsp; mimetypes = ['application / json']
& Nbsp; def machen (self, obj):
& Nbsp; Rück json.dumps (obj)
Klasse HTMLFormatter (Formatter):
& Nbsp; format = 'json'
& Nbsp; mimetypes = ['text / html']
& Nbsp; def konfigurieren (self, Vorlage):
& Nbsp; self.template = Vorlage
& Nbsp; def machen (self, obj):
& Nbsp; zurück render (self.template, ** obj)
# Dann, wenn Erstellen der Anwendung, dekorieren wir die View-Funktion mit der
# "Verhandeln" Dekorateur, in dem die Formate, in denen diese Ansicht zur Verfügung.
von negotiate.flask Import verhandeln
@ App.route ('/ Beiträge /
@ App.route ('/ Beiträge /
negotiate (JSONFormatter)
negotiate (HTMLFormatter, template = "post.html ')
def view_post (id, Format = None):
& Nbsp; post = Posts.by_id (id)
& Nbsp; falls Beitrag ist keine:
& Nbsp; abbrechen (404)
& Nbsp; wenn nicht g.user.authorize ("lesen", Post):
& Nbsp; abbrechen (401)
& Nbsp; Rückkehr {'post': Post}
Das Ergebnis ist eine Ansicht, Aktion, die eine HTML-Version des Post standardmäßig zurückgibt (dh mit Accept: * / * und kein explizites Format), oder wenn die Erweiterung .html explizit angegeben, oder ein JSON-Version von der Post, wenn der .json Erweiterung gegeben oder Accept: application / json wird mit der Anforderung gesendet.
Support
verhandeln derzeit unterstützt Flasche und Pylonen, auch wenn die Unterstützung für andere Web-Frameworks sollte recht einfach. Schauen Sie sich auszuhandeln / flask.py und verhandeln / pylons.py um die kleine Menge von Integrationscode erforderlich siehe
Anforderungen .
- Python
Kommentare nicht gefunden