【问题标题】:Debugging a request/response in Python flask [duplicate]在 Python 烧瓶中调试请求/响应 [重复]
【发布时间】:2016-03-18 05:00:48
【问题描述】:

我是python2 flask 的新手,我的任务是漂亮地打印和保存整个 HTTP 请求和对文件的响应。我不太明白如何打印/检查请求对象,更不用说响应了。

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def hi():
    print (request)
    return 'oh hai'

if __name__ == '__main__':
    app.run(debug=True)

有什么建议吗?每个请求/响应应该是一个文件。

【问题讨论】:

    标签: python flask


    【解决方案1】:

    使用after_request

    @app.after_request
    def after(response):
        # todo with response
        print(response.status)
        print(response.headers)
        print(response.get_data())
        return response
    

    另外,用before_request处理请求

    @app.before_request
    def before():
        # todo with request
        # e.g. print request.headers
        pass
    

    编辑:

    response.get_data()可以得到响应的数据。而response 是响应的整个对象。它可以获取你想要的任何东西。

    更新一些特定的url(基于http://s.natalian.org/2016-03-19/foo.py):

        from __future__ import print_function
        from flask import Flask, request, g
        import time
        app = Flask(__name__)             
    
        @app.route('/')
        def hi():
            g.fn = str(time.time()) + ".txt"
            with open(g.fn,'w') as f:
                print ("Request headers", request.headers, file=f)            
            return 'oh hai'
    
        @app.route('/foo')
        def foo():
            return 'foo'
    
        @app.before_request
        def before():
            pass
    
        @app.after_request
        def after(response):
            fn = g.get('fn', None)
            if fn:
                with open(fn, 'a') as f:
                    print("Printing response", file=f)
                    print(response.status, file=f)
                    print(response.headers, file=f)
                    print(response.get_data(), file=f)
            return response
    
        if __name__ == '__main__':
            app.run(debug=True)
    

    【讨论】:

    • 如何查看整个原始响应?
    • @hendry 为你编辑
    • 如何跟踪请求和响应?例如,我希望获取 epoch timestamp.txt 的请求和要存储的响应存储在同一个文件中。新请求是单独的文件。据我所知s.natalian.org/2016-03-19/foo.py
    • @hendry 你可以使用g (from flask import g),它是一个线程的全局对象。
    • 你能更新你的例子吗?我也不清楚一个人是如何附加到一条路线上的,而不是整个应用程序。也许我错过了一个调试选项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多