Python verfügt über eine einfache HTTP-Serverfunktion für die WEB-Entwicklung. Es ist praktisch, aber unpraktisch, weil ich das öffentliche Skript direkt unter dem Verzeichnis ablegen muss, das ich veröffentlichen möchte (dachte ich), und ich habe gerade herausgefunden, wie man das öffentliche Verzeichnis angibt.
(Unterstützt Python 3.7 und höher) Unten können Sie den relativen Pfad aus dem Skript in __DIRECTORY eingeben.
Zitiert aus Referenz 1
server.py
import http.server
import socketserver
PORT = 8000
DIRECTORY = "web"
class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=DIRECTORY, **kwargs)
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
StackOverflow "How to run a http server which serves a specific path?" Ich habe gerade geschrieben, was ich wissen wollte.
Wenn Sie kein öffentliches Verzeichnis angeben, können Sie den folgenden Code verwenden. Das Verzeichnis, in dem das Skript vorhanden ist, wird automatisch zum öffentlichen Verzeichnis. Durch Übergeben des Handlers an TCPServer () als Argument wird das entsprechende Argument in den Konstruktor von SimpleHTTPRequestHandler in TCPServer () eingefügt. Dieser __Handler ist also ein Bild wie ein Funktionszeiger __. (Das heißt, ist es ein "Handler"?)
Geben Sie kein Verzeichnis an.py
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
Was wir also im Code der obigen Schlussfolgerung tun, ist, den Konstruktor von SimpleHTTPRequestHandler in TCPServer () aufzurufen, ohne die Gliederung zu ändern (* args und ** kwargs im folgenden Code). Der __ Konstruktor wird überschrieben, so dass "jedes angegebene Verzeichnis" an das Argumentverzeichnis übergeben wird.
Ich habe nur die schwierigen Teile untersucht.py
#Definieren Sie die Initialisierungsfunktion von SimpleHTTPRequestHandler neu
class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=DIRECTORY, **kwargs)
#Ich möchte das wirklich tun, aber ich erhalte eine Fehlermeldung mit unzureichenden Argumenten.
#Das Argument ist TCP Server()Ich kann es hier nicht einfügen und ich weiß es nicht, weil ich es richtig hineingesteckt habe.
Handler = http.server.SimpleHTTPRequestHandler(directory="web")
#Das ist auch nicht gut. Natürlich wird gesagt, was Argumente sind.
Handler = http.server.SimpleHTTPRequestHandler(*args,directory="web",**kwargs)
Aus den Python-Spezifikationen http.server
damit! Ich möchte nur die Argumente in das unten stehende Verzeichnis stellen!
Lassen Sie uns eine abgeleitete Klasse mit Vererbung und super () in Python initiieren Ich habe den Teil des Überschreibens des Konstruktors nicht verstanden, also wurde ich versorgt. Verwendung von Python-Argumenten mit variabler Länge (* args, ** kwargs)
Recommended Posts