说明
在使用到七牛的回调时要用到 verify_callback 方法以保证回调合法。其中就需要传入请求body作为参数。
但是,在使用WTForms后,就没办法获取。有两种解决方案。
Python2,Flask<1.0
class WSGICopyBody(object):def __init__(self, application):self.application = applicationdef __call__(self, environ, start_response):from cStringIO import StringIOlength = environ.get('CONTENT_LENGTH', '0')length = 0 if length == '' else int(length)body = environ['wsgi.input'].read(length)environ['body_copy'] = bodyenviron['wsgi.input'] = StringIO(body)# Call the wrapped applicationapp_iter = self.application(environ,self._sr_callback(start_response))# Return modified responsereturn app_iterdef _sr_callback(self, start_response):def callback(status, headers, exc_info=None):# Call upstream start_responsestart_response(status, headers, exc_info)return callbackapp = Flask(__name__)app.wsgi_app = WSGICopyBody(app.wsgi_app)
但是目前在Python3和flask>1.0 后会报错
Python3,Flask>1.0
在WTForms初始化之前先获取body,可以通过
request.get_data() 或者 request.stream.read() 获取。
!!!一定要在WTForms初始化之前!!!