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

如何为Python目录HTTP服务器添加仅用Python/HTML实现的Delete请求功能

实现方案

首先明确:HTML原生表单仅支持GET、POST两种请求方法,不用JavaScript的前提下无需强行使用DELETE请求,直接通过POST请求携带操作标识即可实现删除功能,完全符合你的需求。

1. 修改前端表单生成代码

在你现有上传表单的代码(156行)之后,新增删除功能的表单,沿用你当前的代码风格:

line 157        f.write(b"<form ENCTYPE=\"multipart/form-data\" method=\"post\">")
line 158        f.write(b"<input name=\"delete_file\" type=\"file\"/>")
line 159        f.write(b"<input type=\"hidden\" name=\"action\" value=\"delete\"/>")
line 160        f.write(b"<input type=\"submit\" value=\"delete\"/></form>\n")

生成的界面会和你现有的上传按钮风格完全一致,符合你的要求。

2. 修改后端POST请求处理逻辑

找到项目中处理POST请求的代码段,在原有上传逻辑之前新增删除操作的判断:

路径校验逻辑(必须添加,防止越权删除)

先定义允许操作的根目录:

import os
ALLOWED_ROOT = os.path.abspath("./your_target_dir") # 替换为你要限制的指定目录路径

处理删除请求

import cgi
# 解析POST请求的表单数据
content_type = self.headers.get('Content-Type')
boundary = content_type.split('boundary=')[1].encode()
form_data = cgi.parse_multipart(self.rfile, {'boundary': boundary})

# 判断是否为删除操作
if form_data.get('action') == ['delete']:
    delete_file = form_data.get('delete_file', [None])[0]
    if not delete_file:
        self.send_response(400)
        self.end_headers()
        self.wfile.write(b"No file selected for delete")
        return
    # 拼接完整路径并做安全校验
    target_path = os.path.abspath(os.path.join(self.cur_dir, delete_file.filename))
    # 校验路径是否在允许的根目录下,防止路径遍历攻击
    if not target_path.startswith(ALLOWED_ROOT):
        self.send_response(403)
        self.end_headers()
        self.wfile.write(b"Delete not allowed for this path")
        return
    # 校验操作对象是文件而非目录
    if os.path.isfile(target_path):
        os.remove(target_path)
        # 重定向回当前目录页面刷新
        self.send_response(303)
        self.send_header('Location', self.path)
        self.end_headers()
    else:
        self.send_response(400)
        self.end_headers()
        self.wfile.write(b"Not a valid file")
    return

# 原有上传逻辑放在这之后即可

补充说明

你提到的requests.delete是客户端发起HTTP DELETE请求的方法,你当前是在服务端实现功能,不需要用到这个方法;JSON交互一般是前后端分离场景使用,你这个纯表单提交的场景也不需要。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:36:03