Vorwort
Bottle ist ein Python-Webframework. Das gesamte Framework verfügt über nur eine Datei, weniger als 4.000 Codezeilen und keine Abhängigkeiten außer der Python-Standardbibliothek. Es enthält jedoch allgemeine Funktionen von Web-Frameworks wie Routing, Vorlagen und Plug-Ins. Es gibt keinen besseren Zeitpunkt als das Lesen des Bottle-Quellcodes, um zu verstehen, was ein Web-Framework ist und wie es funktioniert. Da Bottle ein Framework ist, das WSGI unterstützt, wollen wir vor dem Lesen des Quellcodes zunächst verstehen, was WSGI ist.
Hinweis: Die in diesem Artikel verwendete Flaschenversion ist 0.12.13.
WSGI
Allgemeine Webserver können nur statische Seiten verarbeiten. Handelt es sich um dynamische Inhalte, muss der Server mit Serversprachen wie Java/Python/Ruby interagieren und ihnen den Inhalt zur Verarbeitung übergeben. Da die meisten Webserver in C geschrieben sind, können sie die Serversprache nicht direkt ausführen. Daher ist eine Brücke zwischen beiden erforderlich (in praktischen Anwendungen wird normalerweise ein Anwendungsserver zwischen dem Webserver und der WSGI-Anwendung hinzugefügt, um WSGI zu unterstützen). In Python ist WSGI eine solche Brücke. Die Implementierung von WSGI ist in zwei Teile unterteilt: Der eine ist der Server und der andere die Anwendung. Werfen wir einen Blick darauf, wie jeder von ihnen aussieht und wie die beiden zusammenarbeiten.
1 class Server: 2 3 def __init__(self, server_address): 4 self.server_address = server_address 5 6 def set_app(self, application): 7 self.app = application 8 9 def serve_forever(self):10 while True:11 # socket.accept()12 if request_comein():13 self.handle_request()14 15 def handle_request(self):16 request_data = self.get_request()17 self.parse_request(request_data)18 environ = self.get_environ()19 result = self.application(environ, self.start_response)20 self.send_response(result)21 22 def start_response(self, status, headers, exc_info):23 pass24 25 def get_environ(self):26 pass27 28 def get_request(self):29 pass30 31 def parse_request(self, text):32 pass33 34 def send_response(self, message):35 pass36 37 38 def make_server(host, port, app, server=Server):39 server = server((host, port))40 server.set_app(app)41 return server42 43 def simple_app(environ, start_response):44 status = '200 OK'45 response_headers = [('Content-type', 'text/plain')]46 start_response(status, response_headers)47 return 'Hello World!'48 49 if __name__ == '__main__':50 server = make_server('localhost', 8080, simple_app)51 server.serve_forever()
Dieses Servermodell ist durch den Platz begrenzt und lässt viele Details aus. Wenn Sie einen einfachen und lauffähigen WSGI-Server wünschen, können Sie hier auf Let's Build A verweisen Webserver.Teil 2.
Nach Erhalt der Anfrage analysiert der Server die Informationen in der Anfragenachricht und speichert das Ergebnis in einem Wörterbuch namens environ. Anschließend wird die Anwendung application(environ, start_response) mit environ und der start_response-Funktion aufgerufen, die Header-Informationen als Parameter verarbeitet. Abschließend werden die Ergebnisse der Anwendung zu einer neuen Antwort zusammengefasst und an den Client zurückgesendet.
Auf der Anwendungsseite ist eine WSGI-Anwendung ein aufrufbares Objekt. Es kann eine Funktion, Methode, Klasse oder eine Instanz mit einer __call__
-Methode sein. Die obige Anwendung ist eine Funktion.
Wenn verschiedene Server und Anwendungen/Frameworks gemäß WSGI-Standards entwickelt werden, können wir verschiedene Server und Frameworks entsprechend unseren Anforderungen frei kombinieren.
Die einfachste Anwendung von Bottle
Nachdem wir WSGI kurz verstanden haben, kehren wir zu Bottle zurück, um zu beobachten, wie eine Bottle-Anwendung aussieht, wie sie ausgeführt wird und wie wir sie ausführen Unterschied zwischen den Modellen.
1 from bottle import Bottle, run2 3 app = Bottle()4 5 @app.route('/hello')6 def hello():7 return 'Hello World!'8 9 run(app, host='localhost', port=8080, server='wsgiref')
Führen Sie nun dieses Programm aus und verwenden Sie den Browser, um auf die Adresse „localhost:8080/hello“ zuzugreifen. Daraufhin wird „Hello World“ angezeigt !'
1 Im Gegensatz zur oben genannten Anwendung ist die Flaschenanwendung eine Instanz. Gemäß den WSGI-Vorschriften muss das Bottle-Objekt die Methode __call__ implementieren:
1 def __call__(self, environ, start_response):2 ''' Each instance of :class:'Bottle' is a WSGI application. '''3 return self.wsgi(environ, start_response)
Diese Bottle.wsgi-Methode ist also der Eingang für den Server, um das aufzurufen Bottle-Anwendung, und es ist auch der Einstiegspunkt für den Server, um die Bottle-Anwendung aufzurufen. Unser Einstiegspunkt zum Lesen des Quellcodes.
2. @app.route() Dieser Dekorator bindet eine Funktion an eine URL. Wenn wir auf „localhost:8080/hello“ zugreifen, wird die Hallo-Funktion aufgerufen.
3. Der Standardserver von Bottle ist wsgiref (eine einfache Implementierung von WSGI in der Python-Standardbibliothek). Natürlich hat Bottle auch Adapter für viele Server geschrieben. Sie müssen nur den Wert von server ändern, und die Funktion run() findet den entsprechenden Adapter basierend auf dem Namen des Servers. Es ist nicht erforderlich, zusätzlichen Code zu schreiben.
Funktion und Adapter-Teilecode ausführen:
1 def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, 2 interval=1, reloader=False, quiet=False, plugins=None, 3 debug=None, **kargs): 4 if server in server_names: 5 server = server_names.get(server) 6 if isinstance(server, basestring): 7 server = load(server) 8 if isinstance(server, type): 9 server = server(host=host, port=port, **kargs)10 if not isinstance(server, ServerAdapter):11 raise ValueError("Unknown or unsupported server: %r" % server)12 ...13 server.run(app)14 15 class MeinheldServer(ServerAdapter):16 def run(self, handler):17 from meinheld import server18 server.listen((self.host, self.port))19 server.run(handler)
Endlich
in diesem Artikel haben wir kurz vorgestellt, wie Server und Anwendungen unter dem WSGI-Standard interagieren. Im nächsten Artikel konzentrieren wir uns weiterhin auf diese einfachste Anwendung und sprechen über die Routing-Funktionen im Zusammenhang mit @app.route().
Das obige ist der detaillierte Inhalt vonHinweise zum Lesen des Flaschenquellcodes (1): WSGI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Inpython, youAppendElementStoAlistusedtheAppend () Methode.1) UseAppend () ForsingleElelements: my_list.append (4) .2) usextend () oder = formulnElements: my_list.extend (andere_list) ormy_list = [4,5,6] .3) useInSert () FORSPECIFIFICISPositionen: my_list.insert (1,5) .Beaware

Zu den Methoden zum Debuggen des Shebang -Problems gehören: 1.. Überprüfen Sie die SHEBANG -Zeile, um sicherzustellen, dass es sich um die erste Zeile des Skripts handelt, und es gibt keine vorangestellten Räume. 2. Überprüfen Sie, ob der Dolmetscherpfad korrekt ist; 3. Rufen Sie den Dolmetscher direkt an, um das Skript auszuführen, um das Problem der Shebang zu isolieren. 4. Verwenden Sie Strace oder Trusts, um die Systemaufrufe zu verfolgen. 5. Überprüfen Sie die Auswirkungen von Umgebungsvariablen auf Shebang.

PythonlistscanbemanipuleduseveralmethodstoremoveElements: 1) theremove () methodremoveFirstoccurce -ofaspecifiedValue.2) thepop () methodremovesandreturnsanelementatagivedEx.3) theedelstatementcanremoveMeMeMeMeTex.

PythonlistscanstoreanyDatatype, einschließlich Integren, Streicher, Schwimmkörper, Booleans, anderen Listen und Dotionen. ThisverSatilityAllows-Formixed-Typen, die kanbemännische EffectivantivinyusingTypecks, TypenHints und spezialisierte LikenumpyForperformance

PythonlistsSupportnumousoperationen: 1) AddelementsWithAppend (), Extend (), andInsert (). 2) REMVERGENDEMODESUSUSUSSUMOVER (), POP () und Clear (). 3) Accessing undModifyingWithindexingandSlicing.4) SearchingandSortingWithindEx (), Sorte (), und Sortex ()

Durch die folgenden Schritte können mehrdimensionale Arrays mit Numpy erstellt werden: 1) Verwenden Sie die Funktion numpy.array (), um ein Array wie NP.Array ([1,2,3], [4,5,6]) zu erstellen, um ein 2D-Array zu erstellen; 2) Verwenden Sie np.zeros (), np.ones (), np.random.random () und andere Funktionen, um ein Array zu erstellen, das mit spezifischen Werten gefüllt ist; 3) Verstehen Sie die Form- und Größeneigenschaften des Arrays, um sicherzustellen, dass die Länge des Unterarrays konsistent ist und Fehler vermeiden. 4) Verwenden Sie die Funktion np.reshape (), um die Form des Arrays zu ändern. 5) Achten Sie auf die Speichernutzung, um sicherzustellen, dass der Code klar und effizient ist.

SendeminnumpyissamethodtoperformoperationsonarraysofdifferentShapesByAutomaticaligningTHem.itsimplifiesCode, Verbesserung der Verschiebbarkeit, und BoostSPerformance.her'Showitworks: 1) kleinereArraysArepaddedwithonestOMatchDimens.2) compatibledimens

Forpythondatastorage, ChooselistsforflexibilitätswithmixedDatatypes, Array.Arrayformemory-effizientesHomogenoususnumericalData und NumpyArraysForAdvancedNumericalComputing.ListsareversAntileffictionForLarGenicalDataSetsetaSets;


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion
