Python a une fonction de serveur HTTP simple pour le développement WEB. C'est pratique, mais ce n'est pas pratique car vous devez mettre le script de publication directement sous le répertoire que vous souhaitez publier (je pensais), et je viens de découvrir comment spécifier le répertoire public.
(Prend en charge Python 3.7 et supérieur) Ci-dessous, vous pouvez entrer le chemin relatif du script dans __DIRECTORY.
Cité de la référence 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?" J'ai juste écrit ce que je voulais savoir.
Si vous ne spécifiez pas de répertoire public, vous pouvez utiliser le code suivant. Le répertoire dans lequel le script existe devient automatiquement le répertoire public. En passant le gestionnaire à TCPServer () comme argument, l'argument approprié est placé dans le constructeur de SimpleHTTPRequestHandler dans TCPServer (). Donc, ce __Handler est une image comme un pointeur de fonction __. (Autrement dit, est-ce un "gestionnaire"?)
Ne spécifiez pas de répertoire.py
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
Donc, ce que nous faisons dans le code de la conclusion ci-dessus est d'appeler le constructeur de SimpleHTTPRequestHandler dans TCPServer () sans changer le contour (* args et ** kwargs dans le code ci-dessous), Le constructeur __ est écrasé afin que "tout répertoire spécifié" soit passé au répertoire d'arguments.
J'ai enquêté uniquement sur les parties difficiles.py
#Redéfinir la fonction d'initialisation de SimpleHTTPRequestHandler
class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=DIRECTORY, **kwargs)
#Je veux vraiment faire cela, mais j'obtiens une erreur avec des arguments insuffisants.
#L'argument est TCP Server()Je ne peux pas le mettre ici et je ne sais pas parce que je l'ai mis correctement à l'intérieur.
Handler = http.server.SimpleHTTPRequestHandler(directory="web")
#Ce n'est pas bon non plus. Naturellement, on dit ce que sont les arguments.
Handler = http.server.SimpleHTTPRequestHandler(*args,directory="web",**kwargs)
À partir des spécifications python http.server
alors! Tout ce que je veux faire est de mettre les arguments dans le répertoire ci-dessous!
Lançons une classe dérivée en utilisant l'héritage et super () en python Je n'ai pas compris la partie de l'écrasement du constructeur, donc j'ai été pris en charge. Comment utiliser les arguments de longueur variable Python (* args, ** kwargs)
Recommended Posts