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