我的BaseHTTPServer问题

时间:2010-08-13 05:05:33

标签: python basehttpserver

我试图在BaseHTTPRequestHandler的子类中创建自己的函数

  

类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)

当我在commnadline上运行它时,它给出了以下错误: -

  

在处理来自('127.0.0.1',59808)的请求期间发生异常   追溯(最近的呼叫最后):
    文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py”,第281行,在_handle_request_noblock中       self.process_request(request,client_address)
    在process_request中文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py”,第307行       self.finish_request(request,client_address)
    文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py”,第320行,在finish_request中       self.RequestHandlerClass(request,client_address,self)
    {/ 1}}中的文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/SocketServer.py”,第615行       self.handle()
    文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py”,第329行,在手    self.handle_one_request()
    在handle_one_request文件中输入文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/BaseHTTPServer.py”,第323行       方法()
    文件“weblog.py”,第34行,在do_GET中       do_index()
  NameError:未定义全局名称“do_index”

我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

要调用当前类中的某些内容,应使用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()