You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:30:36