Stuur waarden naar BaseHTTPRequestHandler

Ik maak een eenvoudige webserver met behulp van HTTPServer en BaseHTTPRequestHandler in Python. Dit is wat ik tot nu toe heb:

from handler import Handler #my BaseHTTPRequestHandler

def run(self):
    httpd = HTTPServer(('', 7214), Handler)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()

Ik wil het basispad voor de Handler instellen om de bestanden weer te geven, maar ik weet niet zeker hoe ik dat moet doen omdat het nog niet is geïnstantieerd? Ik heb het gevoel dat dit heel gemakkelijk/voor de hand liggend is, maar ik kan niet bedenken hoe ik het moet doen. Ik weet dat ik het kan doen in de Handler-klasse, maar ik wil het hier van doen als het mogelijk is, omdat al mijn configuraties hier worden gelezen.

0
Wilt u bestanden vanuit een map weergeven? SimpleHTTPServer doet dat standaard al voor u ...
toegevoegd de auteur John Doe, de bron
python -m SimpleHTTPServer zal bestanden van de CWD weergeven als dat nodig is. Gewoon proberen om je werk gemakkelijk te maken. :)
toegevoegd de auteur John Doe, de bron
Ik denk dat ik SimpleHTTPServer / SimpleHTTPRequestHandler had kunnen gebruiken, maar ik denk dat mijn vraag ook voor deze klasse geldig is. Hoe vertel ik SimpleHTTPRequestHandler om een ​​specifieke map te gebruiken en niet alleen de huidige map. Ik denk dat ik dat niet super duidelijk heb gemaakt.
toegevoegd de auteur NeilMonday, de bron

1 antwoord

Omdat niemand je vraag wilde beantwoorden ...

Vervang gewoon het onderdeel in de code met de opmerking "uwpad".

import os
import posixpath
import socket
import urllib
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler


class MyFileHandler(SimpleHTTPRequestHandler):
    def translate_path(self, path):
        """Translate a /-separated PATH to the local filename syntax.

        Components that mean special things to the local file system
        (e.g. drive or directory names) are ignored.  (XXX They should
        probably be diagnosed.)

        """
        # abandon query parameters
        path = path.split('?',1)[0]
        path = path.split('#',1)[0]
        path = posixpath.normpath(urllib.unquote(path))
        words = path.split('/')
        words = filter(None, words)
        path = '/' # yourpath
        for word in words:
            drive, word = os.path.splitdrive(word)
            head, word = os.path.split(word)
            if word in (os.curdir, os.pardir): continue
            path = os.path.join(path, word)
        return path

def run():
    try:
        httpd = HTTPServer(('', 7214), MyFileHandler)
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    except socket.error as e:
        print e
    else:
        httpd.server_close()
1
toegevoegd
Leuk! Bedankt man. Zal dit vanavond proberen.
toegevoegd de auteur NeilMonday, de bron