调试Python烧瓶中的请求/响应

hen*_*dry 4 python flask

我是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)
Run Code Online (Sandbox Code Playgroud)

有小费吗?每个请求/响应应该是一个文件.

Yan*_*hou 13

使用after_request

@app.after_request
def after(response):
    # todo with response
    print(response.status)
    print(response.headers)
    print(response.get_data())
    return response
Run Code Online (Sandbox Code Playgroud)

另外,用before_request处理请求

@app.before_request
def before():
    # todo with request
    # e.g. print request.headers
    pass
Run Code Online (Sandbox Code Playgroud)

编辑:

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

更新某些特定网址(基于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)
Run Code Online (Sandbox Code Playgroud)