西麦农场

时间尺度守恒


  • 首页

  • 分类

  • 归档

  • 坑List

在Flask中获取POST请求BODY

2019-08-15 | DevFAQ | Flask StringIO 七牛

说明

在使用到七牛的回调时要用到 verify_callback 方法以保证回调合法。其中就需要传入请求body作为参数。
但是,在使用WTForms后,就没办法获取。有两种解决方案。

Python2,Flask<1.0

  1. class WSGICopyBody(object):
  2. def __init__(self, application):
  3. self.application = application
  4. def __call__(self, environ, start_response):
  5. from cStringIO import StringIO
  6. length = environ.get('CONTENT_LENGTH', '0')
  7. length = 0 if length == '' else int(length)
  8. body = environ['wsgi.input'].read(length)
  9. environ['body_copy'] = body
  10. environ['wsgi.input'] = StringIO(body)
  11. # Call the wrapped application
  12. app_iter = self.application(environ,
  13. self._sr_callback(start_response))
  14. # Return modified response
  15. return app_iter
  16. def _sr_callback(self, start_response):
  17. def callback(status, headers, exc_info=None):
  18. # Call upstream start_response
  19. start_response(status, headers, exc_info)
  20. return callback
  21. app = Flask(__name__)
  22. app.wsgi_app = WSGICopyBody(app.wsgi_app)

但是目前在Python3和flask>1.0 后会报错

Python3,Flask>1.0

在WTForms初始化之前先获取body,可以通过
request.get_data() 或者 request.stream.read() 获取。
!!!一定要在WTForms初始化之前!!!

  • 目录
  • 站点概览
  • 说明
  • Python2,Flask<1.0
  • Python3,Flask>1.0
    戊在西安填坑中

    戊在西安填坑中

    29 日志
    7 分类
    50 标签
    0%
    © 2017- 戊在西安填坑中 | 陕ICP备13008306号-3 | 主题 NexT.Pisces