我正在尝试使用Python瓶编写WSGI应用程序。我安装了瓶子,现在我和Apache的mod_wsgi模块一起运行,如下所述:http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide
我想要做的是根据URL(请求)返回JSON文件。 我设法做到了,但我认为这不是正确的方法,因为它充满了变通方法。 我的意思是 1我无法返回JSON变量,因为Apache抱怨
RuntimeError: response has not been started
2 mod_wsgi要求我的可调用对象命名为“application”,并且需要2个参数,这意味着我不能使用“@route”属性,如下所述:http://webpython.codepoint.net/wsgi_application_interface
因此,对于1,我使用了json.dumps方法,而对于2,我将路由作为环境变量。在这种情况下,您能否告诉我如何使用“@route”属性和Python瓶的最佳实践? 我如何处理这两个问题如下:
#!/usr/bin/python
import sys, os, time
import json
import MySQLdb
import bottle
import cgi
os.chdir( os.path.dirname( __file__ ) )
bottle.debug( True )
application = bottle.default_app( )
@bottle.route( '/wsgi/<parameter>' )
def application( environ, start_response ) :
# URL = bottle.request.method
URL = environ["PATH_INFO"]
status = '200 OK'
response_headers = [('Content-type', 'application/json')]
start_response( status, response_headers )
demo = { 'status':'online', 'servertime':time.time(), 'url':URL }
demo = json.dumps( demo )
return demo
答案 0 :(得分:0)
正如评论所述,你应该写一个像这样的瓶子应用程序(改编自你的代码):
#!/usr/bin/python
import sys, os, time
import bottle
@bottle.route( '/wsgi/<parameter>' )
def application(parameter):
return {'status':'online', 'servertime': time.time(), 'url': bottle.request.path}
if __name__ == '__main__':
bottle.run(host="localhost", port=8080, debug=True)
用卷曲测试:
$curl -i http://127.0.0.1:8080/wsgi/test
HTTP/1.0 200 OK
Date: Tue, 02 Apr 2013 09:25:18 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 73
Content-Type: application/json
{"status": "online", "url": "/wsgi/test", "servertime": 1364894718.82041}