如何从远程Jupyter Notebook向Flask应用传输数据并生成二维码
解决方案
1. Jupyter Notebook自动发送请求
直接用Python的requests库就能实现无人工输入的请求发送,步骤如下:
- 先在Jupyter里安装requests(如果没装的话):
!pip install requests - 编写发送请求的代码,替换成你的Flask服务器实际IP和端口:
运行这段代码就能自动把参数传给Flask,不需要手动输入。import requests # Flask服务的地址,把xxx.xxx.xxx.xxx换成实际的服务器IP flask_url = "http://xxx.xxx.xxx.xxx:5000/qrcode" # 要发送的姓名参数 payload = {"name": "JohnDoe"} # 发送GET请求 response = requests.get(flask_url, params=payload) # 打印响应结果,验证是否成功 print(response.text)
2. Flask已经在持续监听接口
你不用额外做任何操作——Flask启动后,自带的开发服务器本来就会一直运行,持续监听所有注册的路由(包括/qrcode)。只要你的Flask服务没关闭,每次有请求过来,displayQrCode函数就会被触发执行,自动获取name参数生成二维码。
3. 优化二维码GUI的刷新逻辑
你当前的代码每次请求都会开新线程弹出新窗口,容易出现多个窗口堆积的问题。可以改成单窗口持续运行,更新图片内容,示例代码如下:
import PySimpleGUI as sg import threading import os # 全局变量存储二维码窗口 qr_window = None def qrCodeWindowShow(img_path='checkin-qrcode.png'): global qr_window # 如果窗口已经存在,就更新图片,否则创建新窗口 if qr_window: # 更新图片 qr_window['-QR-'].update(filename=img_path) qr_window.refresh() else: # 初始化窗口布局 layout = [[sg.Image(filename=img_path, key='-QR-')]] qr_window = sg.Window('二维码展示', layout, finalize=True) # 启动窗口事件循环(单独线程里运行) while True: event, values = qr_window.read(timeout=100) if event == sg.WIN_CLOSED: qr_window = None break # 修改你的Flask路由函数 @app.route('/qrcode', methods=['GET']) def displayQrCode(): args = request.args name = args.get('name') try: if not name: return 'Error: 缺少name参数' # 生成二维码 img = qrcode.make(name) img.save('checkin-qrcode.png') # 确保GUI线程正常运行 if not qr_window or not qr_window.is_closed(): # 如果窗口没开,启动线程;如果已开,直接更新 if not qr_window: qrWindowThread = threading.Thread(target=qrCodeWindowShow, daemon=True) qrWindowThread.start() else: qr_window['-QR-'].update(filename='checkin-qrcode.png') qr_window.refresh() print(name) return 'Success' except Exception as e: print(f'错误: {e}') return 'Error in GET'
这样每次收到新的name参数时,会直接更新已有窗口里的二维码,而不是弹出新窗口,实现了GUI的持续刷新。
内容的提问来源于stack exchange,提问作者h21
相关产品推荐
相关产品推荐

