Python flask路由能否同时返回IO流和变量?
我使用flask路径生成二维码作为字节流,在主页上使用jinja2模板非常简单地称为:Python flask路由能否同时返回IO流和变量?,python,flask,jinja2,Python,Flask,Jinja2,我使用flask路径生成二维码作为字节流,在主页上使用jinja2模板非常简单地称为: #INDEX.HTML <img src="{{ url_for('qr') }}"> 这是一个最小的工作示例,它使用{{cost}和@app.route('/qr/')和{url\u for('qr',cost=cost)}生成的QRcode创建页面 from flask import Flask, render_template_string import pyqrcod
#INDEX.HTML
<img src="{{ url_for('qr') }}">
这是一个最小的工作示例,它使用
{{cost}
和@app.route('/qr/')和{url\u for('qr',cost=cost)}
生成的QRcode
创建页面
from flask import Flask, render_template_string
import pyqrcode
from io import BytesIO
import random
app = Flask(__name__)
@app.route('/')
def index():
#conversion = requests.get(API_ADDRESS)
conversion = random.randint(1, 9)
cost = conversion*10
return render_template_string('''Cost: {{ cost }}<br>
<img src="{{ url_for('qr', cost=cost) }}">''', cost=cost)
@app.route('/qr/<int:cost>') #, methods=['GET', 'POST'])
def qr(cost):
base_string = pyqrcode.create(cost, error='H')
stream = BytesIO()
base_string.svg(stream, scale=5)
return stream.getvalue(), 200, {
'Content-Type': 'image/svg+xml',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'}
if __name__ == '__main__':
app.run(debug=True, use_reloader=False)
从烧瓶导入烧瓶,呈现\u模板\u字符串
导入pyqrcode
从io导入字节io
随机输入
app=烧瓶(名称)
@应用程序路径(“/”)
def index():
#转换=请求.get(API\U地址)
转换=random.randint(1,9)
成本=换算*10
返回呈现模板字符串(''Cost:{{{Cost}}
'',成本=成本)
@app.route('/qr/')#,methods=['GET','POST'])
def qr(成本):
base_string=pyqrcode.create(成本,错误='H')
stream=BytesIO()
base_string.svg(流,比例=5)
返回stream.getvalue(),200{
“内容类型”:“图像/svg+xml”,
“缓存控制”:“没有缓存,没有存储,必须重新验证”,
“Pragma”:“无缓存”,
“Expires':“0”}
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行(debug=True,use_reloader=False)
最好用使用{{cost}}
的模板显示代码,因为这是发送值和流的唯一方法。使用@app.route('/qr/'
和{url\u for('qr',value=cost)}有什么问题
?@furas类似的东西是我正在寻找的,但这对我不起作用。它对你起作用了吗?非常感谢你的回答。那么这是否证实路由函数确实不可能同时返回流和变量?它必须在两个单独的路由中完成?流只能发送流。你可以用其他路径发送图像项目作为JSON,但需要JavaScript和AJAX才能获得它,并将其放入HTML中的预期位置。使用/qr/
生成图像似乎是一种自然的方法-尤其是您需要将成本发送到/qr/
以生成正确的图像。顺便说一句:所有门户/API都是这样工作的-即根据您在url-ie中使用。
from flask import Flask, render_template_string
import pyqrcode
from io import BytesIO
import random
app = Flask(__name__)
@app.route('/')
def index():
#conversion = requests.get(API_ADDRESS)
conversion = random.randint(1, 9)
cost = conversion*10
return render_template_string('''Cost: {{ cost }}<br>
<img src="{{ url_for('qr', cost=cost) }}">''', cost=cost)
@app.route('/qr/<int:cost>') #, methods=['GET', 'POST'])
def qr(cost):
base_string = pyqrcode.create(cost, error='H')
stream = BytesIO()
base_string.svg(stream, scale=5)
return stream.getvalue(), 200, {
'Content-Type': 'image/svg+xml',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'}
if __name__ == '__main__':
app.run(debug=True, use_reloader=False)