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

Azure Static App与Azure Web App(Python)选型及脚本跳转问题

关于Azure Static App vs Web App的选择及状态保留实现方案

一、Azure Static App vs Web App的选择

  • 无法使用Azure Static App。原因:Static Apps核心定位是托管静态资源(HTML/CSS/JS),配套的API基于Azure Functions实现,属于无状态、按需触发的架构——每次API请求都会在独立的执行环境中运行,无法保留脚本前半部分执行后的中间状态(比如预计算的数据、加载的资源)。而你的需求需要先完成脚本前半部分,再基于该状态处理后续用户输入,Static Apps的架构无法支撑这种有状态的连续流程。
  • 必须使用Azure Web App。Web App可以运行长期驻留的Python Web框架(如Flask、Django),应用启动后会持续运行,能在整个生命周期内保留脚本前半部分的执行状态,完全匹配你的流程需求。

二、Web App中实现不重复运行脚本前半部分的方案

以你提到的Flask技术栈为例,可按以下步骤实现:

1. 将脚本前半部分移至应用初始化阶段

把脚本前半部分的逻辑放在Flask应用启动时执行,仅运行一次,并将生成的结果存储起来(单实例场景用全局变量/内存缓存,多实例场景用分布式缓存如Azure Redis Cache)。示例代码:

from flask import Flask, render_template, request

app = Flask(__name__)

# 存储前半部分脚本的执行结果
precomputed_data = None

# 脚本前半部分逻辑:仅在应用启动时执行一次
def run_pre_script():
    global precomputed_data
    # 替换为你的实际前半部分脚本逻辑(如数据预处理、资源加载等)
    precomputed_data = "前半部分脚本生成的核心数据"

# 应用启动时触发前半部分脚本
run_pre_script()

# 搜索页路由
@app.route('/')
def search_page():
    return render_template('search.html')  # 包含搜索框的前端页面

# 处理搜索请求,执行脚本后半部分
@app.route('/generate', methods=['POST'])
def generate_html():
    user_input = request.form.get('search_query')
    # 使用预计算数据 + 用户输入执行脚本后半部分
    # 替换为你的实际HTML生成逻辑
    generated_content = f"<h3>基于输入「{user_input}」和预计算数据生成的内容</h3>"
    # 返回带返回按钮的结果页面
    return render_template('result.html', content=generated_content)

2. 页面跳转与状态保留

  • 搜索页(/)加载时,脚本前半部分已经在应用启动阶段完成,无需重复运行。
  • 用户提交搜索后,后端执行脚本后半部分生成内容,返回的结果页面中通过<a href="/">返回搜索页</a>实现跳转。此时应用处于持续运行状态,precomputed_data的状态会被保留,不会重新触发前半部分脚本。

3. 多实例场景的补充说明

如果Web App启用了横向扩展(多实例),单实例内存中的precomputed_data无法在实例间共享,此时需要将预计算数据存储到Azure Redis Cache等分布式缓存中,确保所有实例都能访问到相同的前置结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:15:15