Python中使用Flask制作一個(gè)工具供局域網(wǎng)內(nèi)其他終端通過(guò)網(wǎng)頁(yè)訪問(wèn)使用

首先需安裝flask

pip install flask

示意工具的功能說(shuō)明:
上傳一個(gè)文件,若是xml文件則將其顯示出來(lái)。


工具示意圖

成功上傳后

具體代碼

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提示的密鑰

# 主頁(yè)HTML模板(內(nèi)嵌在代碼中,無(wú)需額外文件)
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>局域網(wǎng)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>局域網(wǎng)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文件名稱(chēng):</h3>
        <div class="xml-fileName">{{ xml_fileName }}</div>
    {% endif %}
    {% if xml_content %}
        <h3 class="success">XML文件內(nèi)容:</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("請(qǐng)選擇要上傳的文件", "error")
            return render_template_string(HTML_TEMPLATE, xml_content=xml_content)
        
        # 驗(yàn)證文件后綴(前端已限制,后端二次校驗(yàn))
        if not file.filename.endswith(".xml"):
            flash("上傳的文件不合規(guī),請(qǐng)重傳標(biāo)準(zhǔn)XML文件(后綴為.xml)", "error")
            return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)
        
        try:
            # 讀取文件內(nèi)容并解析XML
            file_content = file.read().decode("utf-8")  # 假設(shè)文件編碼為UTF-8
            # 驗(yàn)證XML格式是否標(biāo)準(zhǔn)
            ET.parse(StringIO(file_content))
            # 展示文件名稱(chēng)
            xml_fileName = file.filename
            # 格式化展示內(nèi)容(保留原始縮進(jìn))
            xml_content = file_content
        except UnicodeDecodeError:
            flash("文件編碼錯(cuò)誤,僅支持UTF-8編碼的XML文件", "error")
        except ET.ParseError:
            flash("上傳的文件不合規(guī),不是標(biāo)準(zhǔn)XML格式,請(qǐng)重傳", "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 表示允許局域網(wǎng)所有設(shè)備訪問(wèn),port=5000(可修改為其他未占用端口)
    app.run(host="0.0.0.0", port=5000, debug=False)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容