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

Python网页开发问题:执行子目录index.py时表单代码重复,求优化

解决CGI脚本中表单代码重复的问题

核心思路

把表单处理、HTML模板这类通用逻辑抽离成公共模块,让各个公司专属的index.py直接复用,彻底避免重复编码。

具体实现步骤

1. 抽离公共模块

在主目录C:\wamp64\www\QMS_r1下创建common_utils.py文件,把通用逻辑集中存放:

# common_utils.py
import cgi, cgitb
from ClassHTMLTemplate import HTMLTemplate

# 开启调试(方便排查CGI脚本错误)
cgitb.enable()

def get_form_data():
    """统一获取表单提交数据"""
    return cgi.FieldStorage()

def get_html_template():
    """统一初始化HTML模板实例"""
    return HTMLTemplate()

2. 调整主脚本逻辑

修正原代码里的变量名错误,同时传递已初始化的表单、模板对象给子脚本,避免重复解析:

#!python  
import os
import sys
from common_utils import get_form_data, get_html_template

path = 'C:\\wamp64\\www\\QMS_r1'
form = get_form_data()
company_name = form.getvalue('company')

# 先检查目录是否存在,避免报错
target_dir = os.path.join(path, company_name)
if not os.path.isdir(target_dir):
    tplate = get_html_template()
    tplate.header()
    print(f"Error: 公司目录 {company_name} 不存在")
    tplate.footer()
    sys.exit()

# 切换到公司专属目录
os.chdir(target_dir)
# 把主目录加入搜索路径,确保子脚本能导入公共模块
sys.path.insert(0, path)

# 传递已有的对象给子脚本
globals_dict = {
    "__name__": "__main__",
    "form": form,
    "tplate": get_html_template()
}

with open("index.py", "r") as file:
    exec(file.read(), globals_dict)

3. 改造公司专属的index.py

删除里面重复的表单、模板初始化代码,直接使用主脚本传递的对象:

# companyname/index.py
# 直接复用主脚本传递的form和tplate
tplate.header()
print(f'Company Name: {form.getvalue("company")}')
print('<br>Current WD:', os.getcwd())
# 这里只写当前公司的专属业务逻辑即可
# ...
tplate.footer()

额外优化建议

  • 用os.path.join()拼接路径,适配不同系统的路径分隔符
  • 增加用户输入校验,防止恶意目录跳转(比如company_name包含../这类字符)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:32:48