关于python:我的BaseHTTPServer问题

Problems with my BaseHTTPServer

我正试图在basehttpRequestHandler的子类中创建自己的函数。

class Weblog(BaseHTTPServer.BaseHTTPRequestHandler):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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>%(title)s</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('Add a post')
    self.wfile.write('<table><tr><th>Date</th><th>Title</th></tr>%(lines)s</tables>' %content)

当我在命令行上运行它时,它会给出以下错误:

Exception happened during processing of request from ('127.0.0.1', 59808)
Traceback (most recent call last):
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 281, in _handle_request_noblock
self.process_request(request, client_address)
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 307, in process_request
self.finish_request(request, client_address)
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py", line 615, in __init__
self.handle()
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", line 329, in hand
self.handle_one_request()
File"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py", line 323, in handle_one_request
method()
File"weblog.py", line 34, in do_GET
do_index()
NameError: global name 'do_index' is not defined

我在这里做错什么了吗?


若要在当前类中调用某些内容,应使用self.methodu name()。

1
2
3
4
5
6
7
8
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()