Domanda

Sto cercando di creare proprie funzioni nella sottoclasse di BaseHTTPRequestHandler come tale

  

classe Weblog (BaseHTTPServer.BaseHTTPRequestHandler):

def do_HEAD(self):
    self.send_response(200)
    self.send_header("Content-type", "text/html")
    self.end_headers()
def do_GET(self):
    """Respond to a GET request."""
    if self.path == '/':
        do_index()
    elif self.path == '/timestamp':
        do_entry()
    elif self.path == '/post':
        do_post_form()

def do_index(self):
    '''If the PATH_INFO is '/' then the weblog index should be presented'''
    self.send_response(200)
    self.send_header("Content-type", "text/html")
    self.end_headers()
    post = None
    content = {}
    line = '<tr id="%(timestamp)s"><td>%(date)s</td>'
    line += '<td><a href="%(timestamp)s">%(title)s</a></td></tr>'
    for timestamp in weblog.list_posts():
        post = storage.retrieve_post(timestamp)
        if content.has_key('lines') == false:
            content['lines'] = line %post
        else:
            content['lines'] += line %post
    self.wfile.write('<a href = "post">Add a post</a>')
    self.wfile.write('<table><tr><th>Date</th><th>Title</th></tr>%(lines)s</tables>' %content)

Quando eseguo sul commnadline mi dà il seguente errore: -

  

Eccezione è accaduto durante la lavorazione di richiesta (, 59808 '127.0.0.1')
  Traceback (chiamata più recente scorso):
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", la linea 281, in _handle_request_noblock
      self.process_request (richiesta, client_address)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", la linea 307, in process_request
      self.finish_request (richiesta, client_address)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", la linea 320, in finish_request
      self.RequestHandlerClass (richiesta, client_address, auto)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", la linea 615, in __init__
      self.handle ()
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", la linea 329, in mano
   self.handle_one_request ()
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", la linea 323, in handle_one_request
      () metodo
    File "weblog.py", linea 34, in do_GET
      do_index ()
  NameError: nome globale 'do_index' non è definito

sto facendo qualcosa di sbagliato qui?

È stato utile?

Soluzione

Per chiamare qualcosa nella classe corrente, è necessario utilizzare self.method_name ()

def do_GET(self):
    """Respond to a GET request."""
    if self.path == '/':
        self.do_index()
    elif self.path == '/timestamp':
        self.do_entry()
    elif self.path == '/post':
        self.do_post_form()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top