程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了获取 Tornado 请求处理程序中设置的当前响应标头大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决获取 Tornado 请求处理程序中设置的当前响应标头?

开发过程中遇到获取 Tornado 请求处理程序中设置的当前响应标头的问题如何解决?下面主要结合日常开发的经验,给出你关于获取 Tornado 请求处理程序中设置的当前响应标头的解决方法建议,希望对你解决获取 Tornado 请求处理程序中设置的当前响应标头有所启发或帮助;

Tornado requestHandler 类具有 add_header()clear_header()set_header() 方法。有没有办法只看到当前设置的标题?

我的用例是我正在编写一些实用方法来在某些条件下自动设置响应标头。但我想添加一些错误检查,以便不添加我不想重复的标题的重复项。

我想编写或多或少这样的代码:

class MyHandler(tornado.web.requestHandler):
    def ensure_Json_header(self):
        if not self.has_header_with_key('Content-Type'):
            self.set_header('Content-Type','application/Json')

    def finish_Json(self,data):
        self.ensure_Json_header()
        return self.finish(Json.dumps(data))

但当然 Tornado 中没有 has_header_with_key() 方法。我怎样才能做到这一点?

编辑:结果证明这是一个 X-Y 问题。真正的答案是只使set_header 而不是 add_header。我把这个留给其他可能提出类似问题的人。

解决方法

没有用于列出响应中存在的标头的文档化 API。

但是有一个 self._headers 私有属性(tornado.@R_450_10107@util.@R_450_10107@Headers 的一个实例),它基本上是响应中所有标头的字典。您可以这样做来检查标题:

if 'Content-Type' in self._headers:
    # do something

作为附录,如果您想访问请求的所有标头,您可以执行 self.request.headers


编辑:看到你的问题后,我在github上打开了一个issue about this;让我们看看会发生什么。

,

Tornado 将始终将 Content-Type 标头设置为默认标头 (@R_450_10107@s://www.tornadoweb.org/en/stable/_modules/tornado/web.html#requestHandler.clear)。因此,如果您想确保设置了特定的内容类型,只需调用 set_header

如果您想检查响应是否没有在您的代码中设置标头,您必须首先重置默认标头,您可以通过实现 set_default_headers并在那里做一个 clear_header(“Content-Type”)

但您也可以通过在处理程序上设置一个属性(例如 override_content_type)来实现相同的目的,在代码中设置它,然后在呈现结果之前执行非条件 set_header

大佬总结

以上是大佬教程为你收集整理的获取 Tornado 请求处理程序中设置的当前响应标头全部内容,希望文章能够帮你解决获取 Tornado 请求处理程序中设置的当前响应标头所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:获取