Python-Framework-Vergleich: Django vs. Pyramid

Dieser kurze Vergleich der Python-Frameworks Django vs. Pyramid wurde von Codementor Sheena geschrieben, die seit 6 Jahren mit Python arbeitet und derzeit an der Entwicklung von Tools beteiligt ist, die Hadoop nützlicher machen.


Einführung

Nachdem ich sowohl mit Django als auch mit Pyramid intensiv gearbeitet habe, bevorzuge ich Pyramid. Aber es ist nicht immer das geeignetste. Hier ist eine kleine Zusammenfassung der Unterschiede zwischen den beiden gängigen Frameworks, um Ihnen bei der Entscheidung zu helfen, welches für Ihre Arbeit geeignet ist.

Einstieg

Wenn Sie so schnell wie möglich von Null auf Helden kommen wollen, dann ist Django das Framework für Sie. Die Lernkurve ist nicht ganz so steil wie bei Pyramid, auch das Django Book (Djangos offizielles Mega-Tutorial) ist eine wunderbare Sache. Das erste Mal, als ich von Django hörte, war das erste Mal, dass ich von Python hörte. Meine Erfahrungen als Noob im Umgang mit Django waren zum größten Teil ziemlich gut – es ist sehr Noob-freundlich. Der Einstieg in Pyramid ist etwas schwieriger, aber aus gutem Grund.

Flexibilität

Pyramid gewinnt diesen mit Meilen.

Um eine nützliche Webanwendung zu erstellen, benötigen Sie ein Framework, das eine Reihe von Komponenten miteinander verbinden kann (dies ist keine vollständige Liste): Ein Template-Rendering-System, eine Möglichkeit, eine Verbindung zu einer Datenbank herzustellen, eine Möglichkeit, URLs Ansichten zuzuordnen , eine Art Authentifizierungssystem und ein paar andere Dinge. Pyramid ist insofern großartig, als alle diese Komponenten ausgetauscht werden können. Sie haben die Wahl zwischen Template-Rendering-Engines; Sie haben zwei verschiedene Möglichkeiten, URLs Ansichten zuzuordnen, und Sie können beide in derselben App verwenden. Sie können eine beliebige Methode verwenden, um eine Verbindung zu einer Datenbank herzustellen (obwohl SQLAlchemy im Allgemeinen verwendet wird), und Sie können sogar eine Verbindung zu mehreren Datenbanken sehr unterschiedlicher Typen herstellen.

Mit Pyramid können Sie mit etwas wirklich nackten Knochen beginnen und sich so aufbauen, wie Sie es brauchen. Hier ist eine wirklich einfache Pyramid-App. Es läuft, es dient, es ist ziemlich nutzlos, aber es ist in sich geschlossen.

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

def hello_world(request):
    return Response('Hi there')

def main():
    config = Configurator()
    config.add_route('hello', '/')                        
    config.add_view(hello_world, route_name='hello')
    app = config.make_wsgi_app()
    return app

if __name__ == '__main__':
    app = main()
    server = make_server('0.0.0.0', 6547, app)
    print ('Starting up server on http://localhost:6547')
    server.serve_forever()

Django hingegen hat ein eigenes Template-Rendering-System, einen eigenen ORM (Object Relational Manager – verwendet, um mit Datenbanken zu sprechen), fast alles. Dies macht die Lernkurve für neue Entwickler etwas freundlicher, da viel weniger Auswahlmöglichkeiten zu treffen sind, aber es hat definitiv seine Nachteile.

Admin-Oberfläche

Eines der Killer-Features von Django ist seine Admin-Oberfläche. Es macht es wirklich einfach, eine Verwaltungssite direkt aus den Modellen einer Anwendung zu generieren. Wenn das keinen Sinn machte, zeichne ich Ihnen ein Bild:

Angenommen, Sie haben eine Web-App, mit der Sie alle Buntstifte in Ihrem Leben im Auge behalten. Ja, Buntstifte. Jeder Buntstift hat eine Reihe von Attributen wie Farbe, Marke, Länge, Umfang, Spitze. Jeder Buntstift lebt in einem Federmäppchen. Jedes Federmäppchen hat eine Farbe und Abmessungen. Jedes Federmäppchen befindet sich in einem Raum in Ihrem schiefen kleinen Haus, jedes Zimmer hat einen Namen und einen booleschen Wert, der angibt, ob wir an seinen Wänden zeichnen können oder nicht. Das gibt uns also 3 verschiedene Datenbanktabellen und ein paar Fremdschlüsselbeziehungen zwischen ihnen. Wenn diese letzte Anweisung keinen Sinn ergab, sollten Sie sich irgendwann ein wenig über SQL informieren. Wenn Sie an diesem Tutorial interessiert sind, wird SQL wahrscheinlich trotzdem für Sie nützlich sein.

Also haben wir uns überlegt, welche Tabellen wir wollen, und wir haben einige Modelle geschrieben (Klassen, die die Tabellen darstellen, damit wir auf freundliche Weise mit Datenbankzeilen interagieren können. Suchen Sie nach ORM, wenn Sie hier Details benötigen). Der nächste Schritt besteht darin, eine Reihe von Ansichten zu erstellen – wir müssen Räume verwalten (hinzufügen, bearbeiten); Federmäppchen verwalten (hinzufügen, entfernen, bearbeiten); Buntstifte verwalten (hinzufügen, entfernen, bearbeiten); und verwalten Sie die Beziehungen zwischen diesen Elementen. Da scheint es viele Wiederholungen zu geben. Hier ist der springende Punkt: Wenn Sie dies in Django schreiben würden, müssten Sie nicht den ganzen Code schreiben! Django ist schlau genug, es für Sie zusammenzustellen. Dies kann eine enorme Zeitersparnis sein.

Django erledigt nicht alles für Sie – Sie müssen ihm mitteilen, auf welches Ihrer Modelle über die Administrationsoberfläche zugegriffen werden soll. Sie haben auch eine gewisse Kontrolle darüber, wie Ihre Modelle in Formulare und dergleichen umgewandelt werden, indem Sie Dinge wie Feldtypen und Standardwerte angeben. Hier ist ein Code zum Erstellen eines Modells und zum Hinzufügen zur Verwaltungsoberfläche:

class Room(models.Model):
    name = models.CharField(max_length=30)
    can_draw_on_walls = models.BooleanField()
    
admin.site.register(Room)    

Beachten Sie, dass dieser Code sehr minimal ist, die Admin-Oberfläche kann viele Dinge tun und auf alle möglichen Arten angepasst werden. Das Optimieren der Admin-Oberfläche kann jedoch viel Zeit in Anspruch nehmen. Wenn Sie also etwas sehr Ausgefallenes wollen, sind Django und Pyramid an diesem Punkt tatsächlich gebunden.

Leichtigkeit von AJAX

Pyramid gewinnt dieses Mal. Die Verwendung von Dekoratoren und XHR-Ansichten macht es sehr einfach, AJAX-Anforderungen dorthin zu bringen, wo Sie sie haben möchten. Das Erklären von XHR, Decorators oder AJAX liegt weit außerhalb des Rahmens dieses Tutorials, aber ich versichere Ihnen, dass die Erklärungen da draußen sind.

Um in Pyramid eine xhr-Route hinzuzufügen, könnten Sie etwa so vorgehen:

config.add_route('test', '/test', my_view, renderer="json", xhr=True)

Oder dieses:

@view_config(... xhr=True)

Wenn das keinen Sinn macht, keine Sorge. Wenn Sie sich für Pyramid entscheiden, wird dies ziemlich einfach aussehen, sobald Sie sich mit den Dingen befasst haben.

Django hat keinen vergleichbaren xhr-Mechanismus.

Code-Layout

Django verwendet sogenannte Dinge Anwendungen um es einfach zu machen, neue Funktionen in Ihr Produkt zu integrieren. Das ist in gewisser Weise sehr gut, weil es Entwickler ermutigt, Code zu schreiben, der in sich geschlossen ist. Es macht auch das Einarbeiten Anwendungen aus anderen Quellen ziemlich einfach und das Lesen des Codes anderer Leute ist einfacher. Django hat einen Bootstrapping-Mechanismus zum Erstellen neuer Anwendungen innerhalb eines Projektes.

python manage.py startapp books

Dieser Befehl erstellt eine neue Anwendung namens books innerhalb des laufenden Projektes. Nachdem eine Anwendung erstellt wurde, muss sie installiert werden, d. h. das Projekt muss aktualisiert werden, damit es über die neue Anwendung Bescheid weiß. Dies erfolgt durch Aktualisieren der Projekteinstellungsdatei. Wenn dies für Sie keinen Sinn ergibt, verweise ich Sie erneut auf das Django-Buch.

Pyramid hingegen lässt Sie tun, was Sie wollen, hat aber ein paar Konventionen. Das ist also ein Pro und ein Contra. Die Code-Layout-Konventionen von Pyramid werden weitgehend durch die Verwendung von gefördert Gerüste, eine Art Bootstrapping-Mechanismus. Wenn Sie ein neues Pyramid-Projekt starten, können Sie entweder alle Ihre Dateien von Grund auf neu erstellen (was kaum jemals die Zeit wert ist) oder ein Basisprojekt erstellen, von dem aus Sie mithilfe eines Gerüsts arbeiten können. Es gibt eine Reihe verschiedener Gerüste, die standardmäßig mitgeliefert werden: Das Alchemy-Gerüst ist für SQLAlchemy optimiert; und das zodb-Gerüst für ZODB. Außerdem stehen verschiedene Scaffolds zum Download bereit. Um ein neues Projekt mit einem von uns verwendeten Gerüst zu erstellen pcreate von der Kommandozeile. So:

pcreate -s alchemy hello_alchemy

Dadurch wird ein Projekt erstellt, das alle Bits und Teile zum Erstellen einer SQLAlchemy-basierten Pyramid-Anwendung enthält und die Anwendung hello_alchemy nennt.

Zusammenfassend ist Django hier ziemlich streng und Pyramid nicht. Django zwingt Sie, sich an bestimmte Konventionen zu halten, die für neue Programmierer verwirrend sein können; und Pyramid geben Ihnen die Möglichkeit, an welche Konventionen Sie sich halten möchten (was auch für neue Programmierer verwirrend sein kann). Der Ansatz von Pyramid ist hier ein weiterer Ausdruck der gebotenen Flexibilität.

SQLAlchemy-Unterstützung


SQLAlchemy ist eine sehr mächtige Sache, viele sehr schlaue Leute denken, dass es das beste ORM ist, das es gibt. Wenn Sie sich für Django entscheiden, entscheiden Sie sich dafür, SQLAlchemy nicht zu verwenden. Es ist nur eine große Sache, wenn Ihre Anwendung sehr (SQL-)datenbankintensiv ist – wenn Sie komplizierte Abfragen auf vernünftige Weise durchführen möchten. Wenn Ihre App andererseits einfach ist, wird SQLAlchemy keine große Hilfe sein, aber es schadet nicht, sie zu haben.

Gemeinschaft und Unterstützung

Dieses ist ein Unentschieden. Die Gemeinschaften, die sowohl Pyramid als auch Django verwenden und unterstützen, sind riesig.

Fazit

Persönlich bevorzuge ich Pyramid – die Flexibilität, die es ermöglicht, ist sehr ansprechend und macht Spaß, damit zu arbeiten. Aber es gibt definitiv Gründe, stattdessen Django zu verwenden. Die beiden Frameworks verdienen und haben eine große Fangemeinde. Es ist ziemlich schwer zu sagen, welches besser ist. Sie wurden mit ähnlichen Endzielen entworfen und füllen die gleiche Nische, aber ihre unterschiedlichen Philosophien sind in fast jedem Aspekt ihrer jeweiligen Designs offensichtlich. Pyramid ist großartig, weil es flexibel ist, und Django ist großartig, weil es so ist Batterien enthalten Philosophie.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *