Über Python Pyramid Traversal

Ich habe versucht, Pyramid, ein Webframework von Python, zu berühren. Dieser Artikel ist ein Memorandum, das sich auf Dinge konzentriert, die wahrscheinlich hängen bleiben, wie z. B. "Was ist dann bei der tatsächlichen Implementierung zu tun?", Ohne die Grundlagen von "Ich habe versucht, es zu installieren".

Durchquerung

Zusätzlich zum bekannten URL-Versand verfügt Pyramid über eine URL-Zuordnungsmethode namens Traversal.

In Bezug auf das Durchqueren werden in der Erklärung der ursprünglichen englischen Site nur konzeptionelle Dinge beschrieben, und selbst wenn Sie das riesige Netz durchsuchen, gibt es mehrere Beschreibungen, aber es scheint, dass die Interpretation (?) Für jede unterschiedlich ist und die Implementierungsmethode Falsch.

Um die Zugriffskontrolle zu implementieren, muss die Durchquerung jedoch wie im Beispiel der ursprünglichen Website verwendet werden. Solange die Website mit Pyramid erstellt wird, kann dies nicht vermieden werden.

Traversal-Konzept und Python-Wörterbuch

Da die Kopffamilie eine Beschreibung des Traversal-Konzepts hat, werde ich eine detaillierte Erklärung weglassen, aber in einfachen Worten wird jedes Element der URL als Schlüsselwert eines verschachtelten Python-Wörterbuchs angesehen, und der letzte verbleibende Schlüssel ist der Ansichtsname und der letzte Dies ist eine URL-Zuordnungsmethode, bei der das Element, das trifft, der Kontext (Operationsziel) ist.

Wenn die URL zum Bearbeiten der Benutzerinformationen des Kontotestbenutzers einer Website beispielsweise "http://example.com/account/testuser/edit" lautet, wird sie durchlaufen

-- Root ['account'] ['testuser'] Das von `` `erhaltene Element ist eine Ressource -- edit``` ist der Ansichtsname

Wird sein. Die obige Wurzel wird der Einfachheit halber beschrieben, ist jedoch das Startelement der Durchquerung und eine Ressource, die jedes Mal generiert wird, wenn eine Anforderung vom Benutzer eingeht. Es liegt ein Fehler vor, aber http://example.com kann als Stammressource für diese Site bezeichnet werden.

Um es richtig zusammenzufassen, es ist wie oben geschrieben, aber es trifft sofort die Wand.

Implementierung des Benutzerkontos mittels Traversal

Der obige Inhalt ist bereits (obwohl in englischer Sprache) auf der ursprünglichen Website beschrieben. Wenn Sie die ursprüngliche Site als Schwalbe betrachten, erfolgt die Implementierung von Ressourcen in Bezug auf Benutzerkonten wie folgt.

def site_root_factory(request):
    root = dict()
    root['account'] = dict()
    root['account']['testuser'] = request.dbsession.Query(User).filter(name = 'testuser').first()

Was Atari Mae betrifft, kann nicht gesagt werden, dass es sich um eine Implementierung handelt. Selbst wenn es sich um eine feste Site handelt, kann das Benutzerkonto natürlich "registriert" / "gelöscht" werden, und es handelt sich nicht immer um eine Site. Was ist beispielsweise, wenn "Fousouser" hinzugefügt wird?

Mit anderen Worten, wenn Sie eine durchquerende und dynamische Website erstellen möchten, können Sie die Ressource nicht einfach als Python-Wörterbuch und seine Elemente implementieren.

Implementierungsmethode nach Ressourcenklasse

Eine Ressource ist nicht nur ein Wörterbuch `dict () '`, sondern eine Klasse / ein Objekt, das die Methode `` getitemimplementiert. Wenn dies nicht geschrieben ist, wird es für Anfänger schwierig sein.getitem```Was ist es? Dies ist ein Beweis dafür, dass Sie das Python-Home-Dokument nicht gelesen haben. Sie sollten es jetzt lesen.

Unter Verwendung des obigen Beispiels kann das mit dem Schlüssel "account" erhaltene Element als die folgende "AccountFactory" -Klasse implementiert werden, die "__ getitem" implementiert.

class AccountResource(object):
    def __init__(self, parent, request, model):
         self.request = request
         self.model = model
         self.parent = parent

    @property
    def __name__(self):
         return self.model.name

    @property
    def __parent__(self):
         return self.parent


class AccountFactory(object):
    def __init__(self, parent, request):
         self.request = request
         self.parent  = parent

    @property
    def __name__(self):
         return 'account'

    @property
    def __parent__(self):
         return self.parent

    def __getitem__(self, key):
         m = self.request.dbsession.Query(User).filter(name = key).first()
         if m: 
             reurn m
         else: 
             raise KeyError(key)


def site_root_factory(request):
    root = dict()
    root['account'] = AccountFactory(root, request)

Wenn nun `root ['account'] ['testuser']` `aufgerufen wird, lautet die` `__getitem__``` Methode von AccountFactory``` key = 'testuser`. Mit "" "aufgerufen, wird das" Benutzer "-Modell nun als endgültiger Kontext aufgerufen.

So definieren Sie eine Bearbeitungsansicht, die diesen Kontext bearbeitet (Benutzermodell), zum Beispiel:

@view_config(name='edit', context='User', renderer='editview.jinja2')
def edit(context, request)
    #Kontext ist das Benutzermodell, das als Ergebnis der Durchquerung erhalten wurde
    #Der Prozess zum Bedienen des Benutzermodells wird unten beschrieben.

Aus irgendeinem Grund gab es kein Beispiel für das Durchlaufen, wenn der DB-Zugriff wie im obigen Beispiel erfolgte. Daher wird dies hier beschrieben.

Status

Es gibt fast keine japanische Literatur. Ich vermute.

Auch wenn es eine routinemäßige Pyramideninstallation und einen Artikel "Gestartet!" Gibt. Wie wäre es mit der Tatsache, dass es hier in der Zeit nur eines gibt, wenn Sie es schnell mit pip installieren können? Ich frage mich, was ich mit dem Artikel über die Installationsmethode tun soll, wie auf der ursprünglichen Site beschrieben.

Recommended Posts

Über Python Pyramid Traversal
Über Python-Slices
Über die Einschlussnotation von Python
Über Python tqdm.
Über Python, Klasse
Informationen zur Python-Vererbung
Über Python, range ()
Informationen zur Python-Referenz
Über Python-Dekorateure
[Python] Über Multi-Prozess
Über Python für Schleife
Über Funktionsargumente (Python)
Über Python für ~ (Bereich)
[Python] Memo Über Fehler
Informationen zur Python-Entwicklungsumgebung
Python: Über Funktionsargumente
Python, über die Ausnahmebehandlung
Über Python3 ... (Ellipsenobjekt)
[Python] Kapitel 01-01 Über Python (Erster Python)
[Python] Informationen zur Standardeingabe
Über __all__ in Python
[Python] Informieren Sie sich über pip
Fabric unterstützt Python 3
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Über das Python-Modul venv
Python-Anfänger-Memorandum-Funktion
Über die Aufzählungsfunktion (Python)
Über verschiedene Codierungen von Python 3
Über Python, len () und randint ()
Über Perl, Python, PHP, Ruby
Ein Memorandum über den Python-Mock
Informationen zu Python-Zeichenfolgenvergleichsoperatoren
Über Python und reguläre Ausdrücke
Über die Funktionen von Python
Über "für _ in range ():" von Python
Informationen zu Python- und Betriebssystemoperationen
Python # Über Referenz und Kopie
Über Python sort () und reverse ()
Ein Hinweis zu [Python] __debug__
Python
[Python] Lassen Sie uns kurz über die Einschlussnotation schreiben
Über Python-Diktat und sortierte Funktionen
Über Python und Cython dtype
[Python] Was ist @? (Über Dekorateure)
Was war überraschend an Python-Klassen?
Über Python Pickle (cPickle) und Marschall
[Python] Über Executor und zukünftige Klassen
Über Python, aus und importieren, als
Pyramide
Ich habe versucht, den Prozess mit Python zu studieren
Informationen zur Grundlagenliste der Python-Grundlagen
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Informationen zum Erstellen einer GUI mit TKinter of Python
[Python Kivy] Über das Ändern des Designthemas
Informationen zur virtuellen Umgebung von Python Version 3.7
Memorandum von Python-Anfängern