繁体   English   中英

从Google的应用程序引擎生成非HTML输出

[英]generating non-html output from google's app engine

我正在尝试使用Max M的icalendar python模块和google的应用程序引擎动态生成iCal输出。 但是,当我在webapp.RequestHandler的输出中省略样板<html>标头和页脚标记时,似乎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响应?

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

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

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

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

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

应该

Content-Type: text/calendar;

这似乎正在输出标准的HTTP响应标头。 尝试在响应中添加“ Content-Disposition:附件; filename ='%s'”%filename HTTP标头,以下载所需的文件。

还有其他需要考虑的事项:

如果您要从另一个文件导入代码,并且该另一个文件是一个Web应用程序,则需要确保该文件仅在作为主应用程序时才作为Web应用程序运行

Anotherwords-从这里开始

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()

这个问题使我丧命了好几个小时,这是我能找到的与之接近的仅有的帖子之一。 我希望这将对其他与我有同样问题的人有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM