如何使用BaseHTTPServer在自包含服务器中提供表单?

时间:2013-12-09 09:01:52

标签: python web

我有一个基于BaseHTTPServer的简单Web服务器,它处理GET个请求(我重复使用下面的例子)。我想,对于特定的GET参数(下例中的x),打开一个带有简单表单和提交按钮的网页。

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from urlparse import urlparse, parse_qs

class GetHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        url = urlparse(self.path)
        d = parse_qs(url[4])
        if 'x' in d:
            self.handle_input_form()  # this is the part I want to write
        else:
            if 'c' in d:
                print d['c'][0]
            self.send_response(200)
            self.end_headers()
        return

    def handle_input_form(self):
        # here a form is displayed, user can input something, submit and 
        # the content this is handled back to the script for processing
        # the next three lines are just a place holder
        pass
        self.send_response(200)
        self.end_headers()

server = HTTPServer(('localhost', 8080), GetHandler)
server.serve_forever()

换句话说,这是一个独立的Web服务器(没有cgi页面),我希望尽可能简单。我看到了a great example of how to use CGI和文档页面,但都假设有一个经典的cgi-bin结构。 我试图在Python中轻松实现(我相信它是可能的:))?

我非常感谢关于最佳做法的一般答案(“就像那样做”“不要那样做” - 请记住这是一个内部私有服务器,它不会运行任何重要的事情)以及handle_input_form()的整体流程。


编辑:按照Jon Clements的建议,我使用了Bottle并修改了the example in the tutorial

import bottle

@bottle.get('/note') # or @route('/note')
def note():
    return '''
        <form action="/note" method="post">
            <textarea cols="40" rows="5" name="note">
            Some initial text, if needed
            </textarea>
            <input value="submit" type="submit" />
        </form>
    '''

@bottle.post('/note') # or @route('/note', method='POST')
def note_update():
    note = bottle.request.forms.get('note')
    # processing the content of the text frame here

1 个答案:

答案 0 :(得分:1)

对于这种简单且可扩展的内容,您最好使用flaskbottle等微框架。