0

我正在尝试使用 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 要求我的可调用对象命名为“应用程序”并接受 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
4

1 回答 1

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 测试:

$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}
于 2013-04-02T09:27:30.553 回答