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
相关产品推荐
相关产品推荐

