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

Flask中如何实现/sms路由的phone_no变量在/paynow路由中调用

Flask跨路由共享phone_no变量的实现方案

推荐方案:使用Session(用户会话绑定,无串号风险)

Session是Flask原生提供的用户级会话存储,每个用户的Session独立,不会出现多用户数据混淆的问题,是这类场景的最优解。

实现步骤:

  1. 首先配置SECRET_KEY(Session加密必备),在app实例初始化后添加配置:
# 生产环境请将密钥存入环境变量读取,不要硬编码在代码中
app.config["SECRET_KEY"] = "请替换为你自己的复杂随机加密字符串"
  1. 在/sms路由中导入Session并存储phone_no:
from flask import session # 顶部导入session模块

@app.route("/sms", methods=['POST'])
def sms_reply():
    """Respond to incoming calls with a simple text message."""
    # Fetch the message
    msg = request.form.get('Body')
    phone_no = request.form.get('From')
    # 将手机号存入当前用户的Session
    session["phone_no"] = phone_no
    reply = fetch_reply(msg, phone_no)

    # Create reply
    resp = MessagingResponse()
    resp.message(reply)

    return str(resp)
  1. 在/paynow路由中读取Session中的phone_no使用,同时添加异常判断:
@app.route("/paynow", methods=['POST','GET'])
def paynow():
    # 从Session读取手机号,不存在则返回错误提示
    phone_no = session.get("phone_no")
    if not phone_no:
        return "请先完成短信验证", 400
    
    paynow = Paynow(
        '36958', 
        '88s25s66-335d-58dq-6632-cf4e5dfb5615',
        'http://google.com', 
        'http://google.com'
        )

    payment = paynow.create_payment('Gonai Subscription', 'krchikwangwani@gmail.com')
    payment.add('Payment for Qray Gonai subscription', 350)
    # 注意此处不要给phone_no加引号,你原代码的'phone_no'是硬编码字符串,会报错
    response = paynow.send_mobile(payment, phone_no, 'ecocash')

    if(response.success):
        poll_url = response.poll_url
        print("Poll Url: ", poll_url)
        status = paynow.check_transaction_status(poll_url)
        print("Payment Status: ", status.status)
        # 支付完成后可选清理Session中的手机号
        session.pop("phone_no", None)
        return "success"

可选方案:数据库持久化存储

如果需要长期保留用户手机号、或者跨设备使用,可以将手机号和用户唯一标识(如用户ID、设备ID)绑定存入数据库,在/paynow路由中根据当前用户的唯一标识查询对应手机号即可。

禁止使用的错误方案

  • 不要用全局变量存储:生产环境Flask多进程/多线程模式下,全局变量会被所有用户共享,会出现A用户的手机号被B用户调用的严重安全问题。
  • 不要用Flask的g变量存储:g变量的生命周期仅为单次请求,跨路由请求就会失效,无法满足需求。

内容的提问来源于stack exchange,提问作者Kurai Chikwangwani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:05