Flask环境下生成的WiFi二维码无效问题求助
问题描述
我有一段可正常生成可用WiFi二维码的Python脚本:
import qrcode ssid = "Matheus-5G" password = "*****" security = "WPA" wifi_data = f"WIFI:T:{security};S:{ssid};P:{password};;&" qr = qrcode.QRCode( version = 1, error_correction = qrcode.constants.ERROR_CORRECT_L, box_size = 10, border = 4 ) print(wifi_data) qr.add_data(wifi_data) qr.make(fit=True) img = qr.make_image(fill_color = 'black', back_color = 'white') img.save("qrcode_wifi.png") img.show()
但移植到Flask框架后,生成的二维码提示“无可用数据”,无法正常使用。我已打印相关变量,确认数据与单独脚本中的一致,Flask代码如下:
from flask import Flask, render_template, request, url_for import qrcode import os app = Flask(__name__) @app.route('/') def inicio(): if os.path.exists("static/qrcode_wifi.png"): os.remove("static/qrcode_wifi.png") return render_template('index.html', titulo='Wi-Fi QR Code Generator') @app.route('/criar', methods=['POST']) def criar(): ssid = request.form['ssid'] password = request.form['password'] security = request.form['security'] wifi_data = f"WIFI:T:{security};S:{ssid};P:{password};;&" print(wifi_data) print(ssid) print(password) print(security) qr = qrcode.QRCode( version = 1, error_correction = qrcode.constants.ERROR_CORRECT_H, box_size = 10, border = 4 ) qr.add_data(wifi_data) qr.make() img = qr.make_image(fill_color = 'black', back_color = 'white') img.save("static/qrcode_wifi.png") return render_template('index.html', titulo='Wi-Fi QR Code Generator', qr_code_image_data=url_for('static', filename='qrcode_wifi.png')) app.run(debug=True)
两段脚本逻辑一致,变量数据也正常,但生成的二维码一个可用一个无效,请问原因是什么?
问题原因与解决方法
核心问题:QR Code生成时的fit参数缺失
单独脚本中调用了qr.make(fit=True),而Flask版本里只调用了qr.make()(默认fit=False):
- 当
fit=True时,qrcode库会自动调整二维码版本,确保数据能被完整容纳; - Flask代码中固定了
version=1,且fit=False,加上使用了更高纠错级别的ERROR_CORRECT_H(相比单独脚本的ERROR_CORRECT_L会占用更多容量),如果用户输入的SSID或密码长度超过版本1二维码的承载上限,数据会被截断,导致扫描时识别失败。
解决步骤
在Flask代码的qr.make()中添加fit=True参数,让库自动适配合适的二维码版本:
qr.add_data(wifi_data) qr.make(fit=True) # 补充fit=True参数
修改后的二维码生成部分代码:
qr = qrcode.QRCode( version = 1, error_correction = qrcode.constants.ERROR_CORRECT_H, box_size = 10, border = 4 ) qr.add_data(wifi_data) qr.make(fit=True) img = qr.make_image(fill_color = 'black', back_color = 'white') img.save("static/qrcode_wifi.png")
额外验证点
- 确保项目根目录下存在
static文件夹,避免图片保存失败; - 可以用在线二维码解析工具扫描生成的图片,确认
wifi_data内容是否完整编码。
内容的提问来源于stack exchange,提问作者Matheus
相关产品推荐
相关产品推荐

