从谷歌的应用引擎生成非HTML输出

时间:2011-02-23 18:47:48

标签: python django google-app-engine

我正在尝试使用Max M的iCal python模块和Google的应用引擎动态生成icalendar输出。但是,当我在<html>的输出上省略锅炉板webapp.RequestHandler页眉和页脚标签时,看起来HTTP 200响应已添加到文件顶部。

当我注册此代码时:

class Calendar(webapp.RequestHandler):
    def get(self):
        self.response.out.write('BEGIN:VCALENDAR\n')
        [...]

webapp.WSGIApplication,响应如下:

Status: 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 11133

BEGIN:VCALENDAR
[...]

如何省略<html>代码未在页面顶部显示HTTP 200响应?

5 个答案:

答案 0 :(得分:3)

Webapp和App Engine不关心您返回的内容类型,因此问题与标记无关(或缺少标记)。您的代码中某处可能有print语句,这会导致标头作为响应正文的一部分发送。您永远不应在WSGI应用中使用print - 始终在您粘贴的代码段中使用self.response.out.write

答案 1 :(得分:2)

你不能,“状态:200 Ok .....”是HTTP头,它将在Web服务器的每个请求中输出。任何Web服务器都会做同样的事情。

您的客户需要阅读http响应的正文

答案 2 :(得分:1)

不确定这是否是真正的问题,但您应该设置内容类型以指示这是日历数据,而不是HTML:

Content-Type: text/html; charset=utf-8

应该是

Content-Type: text/calendar;

答案 3 :(得分:0)

这似乎是输出标准的HTTP响应头。尝试在您的回复中添加“Content-Disposition:attachment; filename ='%s'”%filename HTTP标头,以获取所需的文件。

答案 4 :(得分:0)

需要考虑的其他事项:

如果要从其他文件导入代码,而另一个文件是webapp,则需要确保它只作为webapp运行(如果它是主要文件)

另一个词 - 从这里开始

application = webapp.WSGIApplication(
                                 [
                                  ('/locate', Request),
                                   ],
                                 debug=False)

util.run_wsgi_app(application)

到这个

application = webapp.WSGIApplication(
                                 [
                                  ('/locate', Request),
                                   ],
                                 debug=False)

def main():
   util.run_wsgi_app(application)

if __name__ == "__main__":
   main()

这个问题让我筋疲力尽了几个小时,这是我能找到的唯一一个接近它的帖子之一。我希望这能帮助其他人和我一样有问题!