我有一个apache + mod_wsgi + python3.1设置。 (简单,没有Django或其他框架。)我可以编写输出HTML的应用程序,但我似乎无法获得基本的Web表单+ POST解析器工作,所以我也可以处理输入。我已经在网上发现了几年的一些例子并且使用了python2,并且有几个页面用python3描述了“你应该注意的问题”,使得python2示例过时了(python3的新编码问题长列表等)
有没有人碰巧有python3代码(“def应用程序(environ,start_response):...”),它提供了一个小的UTF-8 Web表单,其中有几个简短的菜单,当你提交(POST)它时,将那些UTF-8菜单选项放入python3字符串?一个python3脚本,正确地处理问题,告诉它从请求中读取正确的字节数,不会使UTF-8用于非ASCII字符,不使用已弃用的函数等,可以使用尝试使用mod_wsgi + python3进行输入和输出的人作为一个简单的模板?
答案 0 :(得分:3)
from urllib.parse import parse_qsl
def application(environ, start_response):
try:
path = environ['PATH_INFO']
except KeyError:
path = environ['REQUEST_URI'].decode('utf-8').split('=', 1)[1]
method = environ['REQUEST_METHOD']
get = dict(parse_qsl(environ['QUERY_STRING'], keep_blank_values=True))
post = dict(parse_qsl(environ['wsgi.input'].read().decode('utf-8')))
if path == '/my_form':
start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
yield '''\
<form action="" method="POST">
<label for="name">What is your name?</label>
<input type="text" name="name"/>
<input type="submit"/>
</form>'''.encode('utf-8')
if method == 'POST' and 'name' in post:
yield "<p>Hello, {}!</p>".format(post['name']).encode('utf-8')
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
yield "<h1>404 Not Found</h1>".encode('utf-8')
答案 1 :(得分:2)
您可能不需要任何框架,但我建议您尝试Bottle。它不需要任何安装,你可以将 bottle.py 文件放入项目文件夹中,然后就可以开始了。
是的,它适用于Python 3!
import bottle
from bottle import get, post, request
@get('/my_form')
def show_form():
return '''\
<form action="" method="POST">
<label for="name">What is your name?</label>
<input type="text" name="name"/>
<input type="submit"/>
</form>'''
@post('/my_form')
def show_name():
return "Hello, {}!".format(request.POST.name)
application=bottle.default_app() # run in a WSGI server
#bottle.run(host='localhost', port=8080) # run in a local test server