@main.route('/csv', methods=['GET'])
def csv():
users = User.query.all()
def generate():
head_str = ['email', 'username', 'name', 'location', 'confirmed', 'member_since', 'last_seen']
head = list()
head.extend(head_str)
yield ','.join(head).encode('GB18030') + '\n'
for user in users:
row = [user.email, user.username, user.name,
user.location, turnBool(user.confirmed), strftime(user.member_since), strftime(user.last_seen)]
vl = list()
vl.extend(row)
yield ','.join(vl).encode('GB18030') + '\n'
rsp = Response(stream_with_context(generate()), mimetype='text/csv')
rsp.headers['Content-Disposition'] = 'attachment; filename="csv.csv"'
return rsp
# return Response(stream_with_context(generate()), mimetype='text/csv')
def turnBool(b):
if b:
return '1'
else:
return '0'
def strftime(time):
if time is not None:
return time.strftime('%Y-%m-%d %H:%M:%S')
else:
return 'Null'
New in version 0.9.
注意,当你生成流内容时,请求环境已经在函数执行时消失了。 Flask 0.9 为你提供了 一点帮助,让你可以在生
成器运行期间保持请求环境:
如果没有使用 stream_with_context() 函数,那么就会引发 RuntimeError 错误。
from flask import stream_with_context, request, Response
@app.route('/stream')
def streamed_response():
def generate():
yield 'Hello '
yield request.args['name']
yield '!'
return Response(stream_with_context(generate()))