Ich habe zuvor Django verwendet, um eine kleine Website zu erstellen, aber ich hatte das Gefühl, dass Django zu umständlich war, also beschloss ich, auf ein einfacheres Web-Framework umzusteigen, um damit herumzuspielen. Der Autor von Web.py ist gestorben und das Projekt wurde schon lange nicht mehr aktualisiert, daher werde ich es nicht verwenden. Flask ist auch ein ausgereiftes, leichtes Web-Framework. Es gibt viele Stars und Forks auf Github, und die Dokumentation und Erweiterungen sind ebenfalls sehr umfangreich.
Der beste Weg, ein Framework zu erlernen, besteht darin, das Framework für die Durchführung eines Projekts zu verwenden und das Framework im tatsächlichen Kampf zu verstehen und zu beherrschen. Hier verwende ich das Flask-Framework und die Mysql-Datenbank, um ein Forensystem aufzubauen. Obwohl der Spatz klein ist, hat er alle Organe:
Screenshot des Forumsystems
Das Folgende sind die Grundlagen Funktionen des Forums:
Komplettes Benutzermodul (Registrierung, Anmeldung, Änderung, Passwortabruf, Informationsänderung, Site-Nachrichtenbenachrichtigung (Erstellen, Beantworten von Themen, Site-Suche, Markdown-Unterstützung, @); Benutzererinnerung); Leistungsstarke Hintergrundverwaltung, Unterstützung für das Blockieren von Benutzern, Themen und Kommentaren, die verschiedene Suchbedingungen für Themen und Kommentare unterstützen.
Dieser Blog wird eine Reihe von Artikeln verwenden, um den Prozess des Aufbaus des Forumsystems aufzuzeichnen um für Studenten hilfreich zu sein, die gerade erst mit der Webentwicklung beginnen.
Wir hören oft von Web-Frameworks in Python wie Django und Flask. Was genau ist der Unterschied zwischen einem Web-Framework und einem Webserver (Nginx, Apache usw.)? Verwenden Sie Python auch, um eine Website ohne das Framework zu erstellen. Um diese Fragen zu lösen, müssen wir das Funktionsprinzip des Webservers und die Natur des Web-Frameworks verstehen.
Webserver
Wenn wir die URL in den Browser eingeben, fordert der Browser zunächst den DNS-Server auf, die IP-Adresse der angeforderten Site zu erhalten. Senden Sie dann eine HTTP-Anfrage mit der IP an den Host und empfangen Sie dann die HTTP-Antwort vom Server. Nach dem Rendern präsentiert uns der Browser eine bessere Wirkung. Dabei leistet der Webserver im Hintergrund seinen Beitrag.
Einfach ausgedrückt ist ein Webserver ein Programm, das auf einem physischen Server läuft. Es wartet permanent darauf, dass Clients (hauptsächlich Browser wie Chrome, Firefox usw.) Anfragen senden. Wenn eine Anfrage eingeht, generiert es eine entsprechende Antwort und sendet diese an den Client zurück. Der Webserver kommuniziert mit dem Client über das HTTP-Protokoll und wird daher auch HTTP-Server genannt.
Webserver
Das Funktionsprinzip des Webservers ist nicht kompliziert und lässt sich im Allgemeinen in die folgenden 4 Schritte unterteilen: Verbindungsaufbau, Anforderungsprozess, Antwortprozess und Schließen der Verbindung.
Verbindung herstellen: Der Client stellt über das TCP/IP-Protokoll eine TCP-Verbindung zum Server her. Anforderungsprozess: Der Client sendet ein HTTP-Protokollanforderungspaket an den Server, um Ressourcendokumente auf dem Server anzufordern. Antwortprozess: Der Server sendet ein HTTP-Protokoll-Antwortpaket an den Client. Wenn die angeforderte Ressource dynamische Sprachinhalte enthält, ruft der Server die dynamische Sprachinterpretations-Engine auf, um den „dynamischen Inhalt“ zu verarbeiten und die verarbeiteten Daten an den Client zurückzugeben. Das HTML-Dokument wird vom Client interpretiert und das grafische Ergebnis wird auf dem Client-Bildschirm gerendert. Verbindung schließen: Der Client wird vom Server getrennt.
Lassen Sie uns einen einfachen Webserver implementieren. Nachdem Sie das Beispielprogramm ausgeführt haben, überwacht es den lokalen Port 8000, und Sie können den Antwortinhalt anzeigen, indem Sie im Browser auf //m.sbmmt.com/:8000 zugreifen. Und unser Programm kann auch den vom Client gesendeten Anforderungsinhalt ausdrucken, wie unten gezeigt:
Einfacher Webserver
Hier Sowohl die Anforderung als auch die Antwort müssen dem HTTP-Protokoll entsprechen. Weitere Informationen zum HTTP-Protokoll finden Sie im „HTTP Authoritative Guide“ oder in den von mir zusammengestellten HTTP-Inhalten.
Obwohl die Hauptaufgabe des Webservers darin besteht, eine Antwort entsprechend der Anfrage zurückzugeben, ist der eigentliche Webserver viel komplizierter als das obige Beispiel, da zu viele Faktoren berücksichtigt werden müssen, wie zum Beispiel:
Caching-Mechanismus: Zwischenspeicherung einiger häufig besuchter Seiten, um die Antwortgeschwindigkeit zu verbessern; Notieren Sie das Besuchsdatum, um eine Analyse zu erleichtern.
Die derzeit am häufigsten verwendeten kostenlosen Webserver unter UNIX- und LINUX-Plattformen sind Apache und Nginx.
Webanwendung
Der Webserver akzeptiert eine HTTP-Anfrage und gibt eine Antwort zurück. In vielen Fällen handelt es sich bei der Antwort nicht um eine statische Datei, sodass eine Anwendung eine entsprechende Antwort basierend auf der Anfrage generieren muss. Die Anwendungen hier werden hauptsächlich verwendet, um zugehörige Geschäftslogik zu verarbeiten, die Datenbank zu lesen oder zu aktualisieren und entsprechende Antworten gemäß verschiedenen Anforderungen zurückzugeben. Beachten Sie, dass dies nicht der Webserver selbst ist, sondern nur für die HTTP-Protokollebene und einige damit verbundene Dinge wie Parallelitätsverarbeitung, Sicherheit, Protokollierung usw. verantwortlich ist.
Anwendungen können in verschiedenen Sprachen geschrieben werden (Java, PHP, Python, Ruby usw.). Diese Anwendung empfängt die Anfrage des Clients nach der Verarbeitung und gibt die Antwort an den Server zurück Webserver. Schließlich kehrt der Webserver zum Client zurück. Die gesamte Architektur ist wie folgt:
Webanwendung
Nehmen Sie Python als Beispiel Die originellste und direkteste Art und Weise nutzt den CGI-Standard, der 1998 sehr beliebt war. Stellen Sie zunächst sicher, dass der Webserver CGI unterstützt und einen CGI-Handler konfiguriert hat. Richten Sie dann das CGI-Verzeichnis ein, fügen Sie die entsprechende Python-Datei im Verzeichnis hinzu. Jede Python-Datei verarbeitet die entsprechende Eingabe und generiert eine HTML-Datei, wie im Folgenden gezeigt Beispiel:
# !/usr/bin/python # -*- coding: UTF-8 -*- print "Content-type:text/html" print # 空行,告诉服务器结束头部 print '<html>' print '<head>' print '<meta charset="utf-8">' print '</head>' print '<body>' print '<h2>Hello Word! 我是一个CGI程序</h2>' print '</body>' print '</html>'
Auf diese Weise können Sie einen einfachen Hello World-Webseiteninhalt erhalten, indem Sie im Browser auf die Datei zugreifen. Das direkte Schreiben von Webanwendungen über CGI scheint einfach zu sein, da jede Datei die Eingabe verarbeitet und HTML generiert. Bei der tatsächlichen Entwicklung können jedoch viele Unannehmlichkeiten auftreten. Zum Beispiel:
Jedes unabhängige CGI-Skript schreibt möglicherweise wiederholt Datenbankverbindungs- und Schließcode. Back-End-Entwickler sehen eine Reihe von Inhaltstyp- und anderen HTML-Seitenelementen, die nichts mit sich selbst zu tun haben. Web-Framework
In den frühen Tagen wurde eine Menge sich wiederholender Arbeit geleistet, um die Website zu entwickeln. Um Duplikate zu reduzieren und das Schreiben von komplexem und verwirrendem Code zu vermeiden, extrahierten die Leute später die Schlüsselprozesse des Webs Entwicklung und entwickelte verschiedene A-Web-Frameworks. Mit einem Framework können Sie sich auf das Schreiben klaren, leicht zu wartenden Codes konzentrieren, ohne sich um sich wiederholende Arbeiten wie Datenbankverbindungen kümmern zu müssen.
Eines der klassischeren Web-Frameworks übernimmt die MVC-Architektur, wie in der folgenden Abbildung dargestellt:
MVC-Architektur
Der Benutzer gibt die URL ein, der Client sendet eine Anfrage, der Controller (Controller) erhält zuerst die Anfrage und verwendet dann die Modelle (Modelle), um alle erforderlichen Daten aus der Datenbank abzurufen, die erforderliche Verarbeitung durchzuführen und zu senden Die verarbeiteten Ergebnisse werden an die Ansicht (Ansicht) übermittelt. Die Ansicht verwendet die erhaltenen Daten zum Rendern und Generieren einer HTML-Antwort und gibt diese an den Client zurück.
Nehmen Sie als Beispiel das Python-Web-Framework flask. Das Framework selbst schränkt nicht ein, welche Architektur wir zum Organisieren unserer Anwendungen verwenden, aber flask kann die Organisation von Anwendungen auf MVC-Art gut unterstützen.
Controller: flask Sie können Dekoratoren verwenden, um Routing-Elemente wie folgt hinzuzufügen:
@app.route('/') def main_page(): pass
Modell: Wird hauptsächlich zum Extrahieren dessen verwendet, was ist Benötigte Daten, wie in der folgenden Funktion ausgeführt:
@app.route('/') def main_page(): """Searches the database for entries, then displays them.""" db = get_db() cur = db.execute('select * from entries order by id desc') entries = cur.fetchall() return render_template('index.html', entries=entries)
Ansicht: flask verwendet jinja2, um die Seite zu rendern. Die folgende Vorlagendatei gibt den Stil an Seite:
{% for entry in entries %} <li> <h2>{{ entry.title }}</h2> <p>{{ entry.text|safe }}</p> </li> {% else %} <li><em>No entries yet. Add some!</em></li> {% endfor %}
Wir wissen, dass Python viele Web-Frameworks und gleichzeitig viele Webserver hat (Apache, Nginx, Gunicorn usw.). .), zwischen Frameworks und Webservern. Wenn sie zur Entwurfszeit nicht miteinander übereinstimmen können, schränkt die Auswahl eines Frameworks die Auswahl an Webservern ein, was offensichtlich unvernünftig ist.
Wie können Sie also sicherstellen, dass Sie den Server Ihrer Wahl verwenden und mehrere verschiedene Netzwerk-Frameworks anpassen können, ohne den Webserver-Code oder den Netzwerk-Framework-Code zu ändern? Folgen Sie einfach der Benutzeroberfläche. Für Python ist es WSGI (Web Server Gateway Interface, Web Server Gateway Interface). Andere Programmiersprachen verfügen über ähnliche Schnittstellen: zum Beispiel Javas Servlet API und Rubys Rack.
Das Aufkommen von Python WSGI ermöglicht es Entwicklern, die Wahl zwischen Web-Framework und Webserver zu trennen und sich nicht mehr gegenseitig einzuschränken. Jetzt können Sie verschiedene Webserver und Web-Frameworks wirklich kombinieren und so die Kombination auswählen, die Ihren Anforderungen entspricht. Sie können beispielsweise Gunicorn oder Nginx/uWSGI verwenden, um Django-, Flask- oder web.py-Anwendungen auszuführen.
Weitere Artikel zum Python-Webserver und Web-Framework zum Erstellen einer Website finden Sie auf der chinesischen PHP-Website!