Web2py - Kern

Befehlszeilenoptionen

Wir haben im vorherigen Kapitel gelernt, wie Sie den web2py-Server mithilfe des GUI-Widgets starten.

Dieses Widget kann übersprungen werden, indem der Server von gestartet wird command line prompt.

python web2py.py -a 'Ihr Passwort' -i 127.0.0.1 -p 8000

Immer wenn der web2py-Server gestartet wird, wird eine Datei erstellt. "parameters_8000.py"wo alle Passwörter in einer Hash-Form gespeichert sind.

Für zusätzliche Sicherheitszwecke kann die folgende Befehlszeile verwendet werden:

python web2py.py -a '<recycle>' -i 127.0.0.1 -p 8000

Für das obige Szenario verwendet web2py die in "parameters_8000.py".

Falls die Datei "parameters_8000.py"wird versehentlich oder aus anderen Gründen gelöscht, die webbasierte Verwaltungsoberfläche ist in web2py deaktiviert.

URL-Zuordnung / Versand

Die Funktionsweise von web2py basiert auf dem Model-View-Controller, der die URL in einer bestimmten Form abbildet. http://127.0.0.1:8000/a/d/f.html

Es wird bis zur Funktion weitergeleitet “f()” in der Steuerung erwähnt d.pysteht unter der Anwendung "a". Wenn der Controller nicht in der Anwendung vorhanden ist, verwendet web2py einen Standardcontroller mit dem Namen“default.py”.

Wenn die in der URL angegebene Funktion nicht vorhanden ist, wird die Standardfunktion aufgerufen init()wird eingesetzt. Die Funktionsweise der URL ist im folgenden Bild schematisch dargestellt.

Die Erweiterung .htmlist für die URL optional. Die Erweiterung bestimmt die Erweiterung vonViewDadurch wird die Ausgabe der in der Steuerung definierten Funktion gerendert. Der gleiche Inhalt wird in mehreren Formaten bereitgestellt, nämlich HTML, XML, JSON, RSS usw.

Die Anforderung wird basierend auf den Funktionen übergeben, die die Argumente akzeptieren und dem Benutzer die entsprechende Ausgabe geben. Es ist der Controller, der mit dem Modell und der Ansicht der Anwendung interagiert, um die Ausgabe gemäß den Anforderungen des Benutzers bereitzustellen.

web2py - Workflow

Der Workflow von web2py wird unten diskutiert -

  • Der Webserver verwaltet alle HTTP-Anforderungen gleichzeitig in einem eigenen Thread.

  • Der HTTP-Anforderungsheader wird analysiert und an den Dispatcher übergeben.

  • Der Dispatcher verwaltet die Anwendungsanforderungen und ordnet die zu PATH_INFOin der URL des Funktionsaufrufs. Jeder Funktionsaufruf wird in der URL dargestellt.

  • Alle Anforderungen für Dateien, die im statischen Ordner enthalten sind, werden direkt verwaltet, und große Dateien werden an den Client gestreamt.

  • Anforderungen für alles andere als eine statische Datei werden einer Aktion zugeordnet.

  • Wenn der Anforderungsheader ein Sitzungscookie für die App enthält, wird das Sitzungsobjekt abgerufen. Andernfalls wird eine Sitzungs-ID erstellt.

  • Wenn die Aktion einen Wert als Zeichenfolge zurückgibt, wird dieser an den Client zurückgegeben.

  • Wenn die Aktion eine iterable zurückgibt, wird sie verwendet, um die Daten zu schleifen und an den Client zu streamen.

Bedingte Modelle

Im vorigen Kapitel haben wir die Funktionalität des Controllers. web2py verwendet in jeder Anwendung Modelle, Ansichten und Controller. Daher ist es auch notwendig, die Funktionalität des zu verstehenModel.

Im Gegensatz zu anderen MVC-Anwendungen werden Modelle in web2py als bedingt behandelt. Modelle in Unterordnern werden basierend auf der Verwendung des Controllers ausgeführt. Dies kann anhand des folgenden Beispiels demonstriert werden:

Betrachten Sie die URL - http://127.0.0.1:8000/a/d/f.html

In diesem Fall, ‘a’ ist der Name der Anwendung, ‘d’ ist der Name des Controllers und f()ist die dem Controller zugeordnete Funktion. Die Liste der Modelle, die ausgeführt werden, lautet wie folgt:

applications/a/models/*.py
applications/a/models/d/*.py
applications/a/models/d/f/*.py

Bibliotheken

web2py enthält Bibliotheken, die für alle Anwendungen als Objekte verfügbar sind. Diese Objekte werden in den Kerndateien unter dem Verzeichnis "gluon" definiert.

Viele der Module wie die DAL-Vorlage haben keine Abhängigkeiten und können außerhalb des Frameworks von web2py implementiert werden. Es werden auch die Unit-Tests beibehalten, die als gute Praxis angesehen werden.

Anwendungen

web2py-Anwendungen sind unten in schematischer Form dargestellt.

Das Applications entwickelt in web2py bestehen aus folgenden Teilen -

  • Models - Repräsentiert Daten und Datenbanktabellen.

  • Controllers - Beschreibt die Anwendungslogik und den Workflow.

  • Views - Hilft beim Rendern der Anzeige der Daten.

  • Languages - Beschreiben, wie Zeichenfolgen in der Anwendung in verschiedene unterstützte Sprachen übersetzt werden.

  • Static files - Keine Verarbeitung erforderlich (z. B. Bilder, CSS-Stylesheets usw.).

  • ABOUT und README - Details des Projekts.

  • Errors - Speichert von der Anwendung generierte Fehlerberichte.

  • Sessions - Speichert Informationen zu jedem bestimmten Benutzer.

  • Databases - Speichern Sie SQLite-Datenbanken und zusätzliche Tabelleninformationen.

  • Cache - Speichern Sie zwischengespeicherte Anwendungselemente.

  • Modules - Module sind andere optionale Python-Module.

  • Private - Auf die enthaltenen Dateien wird von den Controllern zugegriffen, jedoch nicht direkt vom Entwickler.

  • Uploads - Auf Dateien wird von den Modellen zugegriffen, jedoch nicht direkt vom Entwickler.

API

In web2py models, controllers und views werden in einer Umgebung ausgeführt, in der bestimmte Objekte für die Entwickler importiert werden.

Global Objects - Anfrage, Antwort, Sitzung, Cache.

Helpers- web2py enthält eine Hilfsklasse, mit der HTML programmgesteuert erstellt werden kann. Es entspricht HTML-Tags, die als bezeichnet werden“HTML helpers”.

Zum Beispiel A, B, FIELDSET, FORM usw.

Session

Eine Sitzung kann als serverseitige Speicherung von Informationen definiert werden, die während der gesamten Interaktion des Benutzers in der gesamten Webanwendung erhalten bleibt.

Sitzung in web2py ist die Instanz der Speicherklasse.

Beispielsweise kann eine Variable in der Sitzung als gespeichert werden

session.myvariable = "hello"

Dieser Wert kann als abgerufen werden

a = session.myvariable

Der Wert der Variablen kann abgerufen werden, solange der Code in derselben Sitzung von demselben Benutzer ausgeführt wird.

Eine der wichtigsten Methoden in web2py für die Sitzung ist “forget” - -

session.forget(response);

Es weist web2py an, die Sitzung nicht zu speichern.

Ausführen von Aufgaben im Hintergrund

Eine HTTP-Anfrage kommt parallel zum Webserver, der jede Anfrage in einem eigenen Thread verarbeitet. Die Aufgabe, die aktiv ist, findet im Vordergrund statt, während die anderen im Hintergrund bleiben. Das Verwalten der Hintergrundaufgaben ist auch eine der Hauptfunktionen von web2py.

Zeitaufwändige Aufgaben bleiben vorzugsweise im Hintergrund. Einige der Mechanismen, die die Hintergrundaufgaben verwalten, sind wie folgt aufgeführt:

  • CRON

  • Queues

  • Scheduler

CRON

In web2py CRONgibt die Möglichkeit, die Aufgabe innerhalb der angegebenen Zeitintervalle auszuführen. Jede Anwendung enthält eine CRON-Datei, die ihre Funktionen definiert.

Planer

Der integrierte Scheduler hilft beim Ausführen der Aufgaben im Hintergrund, indem die Priorität festgelegt wird. Es bietet einen Mechanismus zum Erstellen, Planen und Ändern der Aufgaben.

Die geplanten Ereignisse werden in Modellen mit dem Dateinamen aufgelistet “scheduler.py”.

Erstellen einer Anwendung

Wir hatten einen Überblick über das Erstellen von Modellen und Controllern in web2py. Hier konzentrieren wir uns auf die Erstellung der genannten Anwendung“Contacts”. Die Anwendung muss eine Liste der Unternehmen und eine Liste der Personen führen, die in diesen Unternehmen arbeiten.

Erstellung eines Modells

Hier ist die Identifizierung der Tabellen für das Datenwörterbuch das Modell. Das Modell für die Kontaktanwendung wird unter „modelsOrdner. Die Datei wird in gespeichertmodels/db_contacts.py.

# in file: models/db_custom.py
db.define_table('company', Field('name', notnull = True, unique = True), format = '%(name)s')
db.define_table(
   'contact',
   Field('name', notnull = True),
   Field('company', 'reference company'),
   Field('picture', 'upload'),
   Field('email', requires = IS_EMAIL()),
   Field('phone_number', requires = IS_MATCH('[\d\-\(\) ]+')),
   Field('address'),
   format = '%(name)s'
)

db.define_table(
   'log',
   Field('body', 'text', notnull = True),
   Field('posted_on', 'datetime'),
   Field('contact', 'reference contact')
)

Sobald die obige Datei erstellt wurde, kann mithilfe der URL auf die Tabellen zugegriffen werden http://127.0.0.1:8000/contacts/appadmin

Erstellung des Controllers

Das Controller enthält einige Funktionen zum Auflisten, Bearbeiten und Löschen der Kontakte.

# in file: controllers/default.py
def index():return locals()
def companies():companies = db(db.company).select(orderby = db.company.name)
return locals()

def contacts():company = db.company(request.args(0)) or redirect(URL('companies'))
contacts = db(db.contact.company == company.id).select(orderby = db.contact.name)
return locals()

@auth.requires_login()
def company_create():form = crud.create(db.company, next = 'companies')
return locals()

@auth.requires_login()
def company_edit():company = db.company(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.company, company, next='companies')
return locals()

@auth.requires_login()
def contact_create():db.contact.company.default = request.args(0)
form = crud.create(db.contact, next = 'companies')
return locals()

@auth.requires_login()
def contact_edit():contact = db.contact(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.contact, contact, next = 'companies')
return locals()

def user():return dict(form = auth())

Die Schaffung der view zusammen mit seiner Ausgabe wird im nächsten Kapitel besprochen.