Python中使用Flask制作一个工具供局域网内其他终端通过网页访问使用

首先需安装flask

pip install flask

示意工具的功能说明:
上传一个文件,若是xml文件则将其显示出来。


工具示意图

成功上传后

具体代码

from flask import Flask, render_template_string, request, flash
import xml.etree.ElementTree as ET
from io import StringIO

app = Flask(__name__)
app.secret_key = "company_internal_tool_2024"  # 用于flash提示的密钥

# 主页HTML模板(内嵌在代码中,无需额外文件)
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>局域网XML文件查看器</title>
    <style>
        body { max-width: 1200px; margin: 0 auto; padding: 20px; font-family: Arial, sans-serif; }
        .upload-form { margin-bottom: 30px; padding: 20px; border: 1px solid #eee; border-radius: 8px; }
        input[type="file"] { margin: 10px 0; padding: 8px; }
        button { padding: 10px 20px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }
        button:hover { background: #0056b3; }
        .xml-fileName { padding: 20px; border: 1px solid #eee; border-radius: 8px; white-space: pre-wrap; word-break: break-all; }
        .xml-content { padding: 20px; border: 1px solid #eee; border-radius: 8px; white-space: pre-wrap; word-break: break-all; }
        .error { color: #dc3545; font-weight: bold; }
        .success { color: #28a745; }
    </style>
</head>
<body>
    <h1>局域网XML文件查看器</h1>
    <div class="upload-form">
        <form method="POST" enctype="multipart/form-data">
            <label for="xml-file">选择XML文件:</label>
            <input type="file" id="xml-file" name="xml_file" accept=".xml" required>
            <br>
            <button type="submit">上传并解析</button>
        </form>
    </div>
    {% with messages = get_flashed_messages(with_categories=true) %}
        {% if messages %}
            {% for category, msg in messages %}
                <div class="{{ category }}">{{ msg }}</div>
            {% endfor %}
        {% endif %}
    {% endwith %}
    {% if xml_fileName %}
        <h3 class="success">XML文件名称:</h3>
        <div class="xml-fileName">{{ xml_fileName }}</div>
    {% endif %}
    {% if xml_content %}
        <h3 class="success">XML文件内容:</h3>
        <div class="xml-content">{{ xml_content }}</div>
    {% endif %}
</body>
</html>
"""

@app.route("/", methods=["GET", "POST"])
def index():
    xml_fileName = None
    xml_content = None
    if request.method == "POST":
        # 获取上传的文件
        file = request.files.get("xml_file")
        if not file or file.filename == "":
            flash("请选择要上传的文件", "error")
            return render_template_string(HTML_TEMPLATE, xml_content=xml_content)
        
        # 验证文件后缀(前端已限制,后端二次校验)
        if not file.filename.endswith(".xml"):
            flash("上传的文件不合规,请重传标准XML文件(后缀为.xml)", "error")
            return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)
        
        try:
            # 读取文件内容并解析XML
            file_content = file.read().decode("utf-8")  # 假设文件编码为UTF-8
            # 验证XML格式是否标准
            ET.parse(StringIO(file_content))
            # 展示文件名称
            xml_fileName = file.filename
            # 格式化展示内容(保留原始缩进)
            xml_content = file_content
        except UnicodeDecodeError:
            flash("文件编码错误,仅支持UTF-8编码的XML文件", "error")
        except ET.ParseError:
            flash("上传的文件不合规,不是标准XML格式,请重传", "error")
        except Exception as e:
            flash(f"文件处理失败:{str(e)}", "error")
    
    return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)

if __name__ == "__main__":
    # 0.0.0.0 表示允许局域网所有设备访问,port=5000(可修改为其他未占用端口)
    app.run(host="0.0.0.0", port=5000, debug=False)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容