我有一个基于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
答案 0 :(得分:1)
对于这种简单且可扩展的内容,您最好使用flask
或bottle
等微框架。