pin_drop当前位置:知识文库 ❯ 图文

requests.delete()详解 - Python发送DELETE请求完整教程

一、requests.delete()概述

requests.delete() 用于向服务器发送HTTP DELETE请求,通常用于删除服务器上的指定资源。在RESTful API设计中,DELETE请求与资源URL配合使用,表示移除该资源。

DELETE请求是幂等的,即多次删除同一资源的结果应一致——第一次删除成功后,后续删除请求通常返回404(资源不存在),但操作结果是相同的。这是RESTful架构中最重要的设计原则之一。


二、语法与参数说明

代码示例

requests.delete(url, **kwargs)
参数 类型 默认值 说明
url str 必填 要删除的资源URL地址
data dict/bytes None 请求体数据(部分API需要)
json dict None JSON格式的请求体数据
headers dict None 请求头字典
auth tuple/AuthBase None 认证信息
timeout float/tuple None 请求超时时间(秒)
allow_redirects bool True 是否允许重定向
verify bool/str True 是否验证SSL证书

返回值:返回一个 requests.Response 对象,常见状态码为200(成功)、202(已接受但未执行)、204(成功无返回内容)。


三、基本DELETE请求

最简单的DELETE请求只需要提供目标资源的URL:

代码示例

import requests

# 删除指定ID的用户
response = requests.delete('https://httpbin.org/delete')

print(f"状态码: {response.status_code}")
print(f"请求方法: {response.json()['method']}")
print(f"请求URL: {response.json()['url']}")

输出:

代码示例

状态码: 200
请求方法: DELETE
请求URL: https://httpbin.org/delete

四、带认证的DELETE请求

在生产环境中,删除操作通常需要身份认证。可以通过请求头传递Token:

代码示例

import requests

# 携带认证信息删除资源
headers = {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
    'Content-Type': 'application/json'
}

# 也可以在请求体中传递删除原因
delete_data = {
    'reason': '用户主动注销',
    'confirm': True
}

response = requests.delete(
    'https://httpbin.org/delete',
    json=delete_data,
    headers=headers
)

result = response.json()
print(f"状态码: {response.status_code}")
print(f"认证头: {result['headers'].get('Authorization', '未设置')[:30]}...")
print(f"删除原因: {result['json']['reason']}")

输出:

代码示例

状态码: 200
认证头: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
删除原因: 用户主动注销

五、删除请求的异常处理

删除操作需要完善的异常处理机制,因为可能遇到网络超时、连接失败、资源不存在等多种情况:

代码示例

import requests

def delete_resource(url, token=None):
    """安全删除资源的函数"""
    headers = {}
    if token:
        headers['Authorization'] = f'Bearer {token}'

    try:
        response = requests.delete(url, headers=headers, timeout=10)

        if response.status_code == 200:
            print(f"删除成功: {url}")
            return response.json()
        elif response.status_code == 204:
            print(f"删除成功(无返回内容): {url}")
            return None
        elif response.status_code == 404:
            print(f"资源不存在: {url}")
            return None
        elif response.status_code == 403:
            print(f"无权限删除: {url}")
            return None
        else:
            print(f"删除失败,状态码: {response.status_code}")
            return None

    except requests.exceptions.Timeout:
        print("请求超时")
        return None
    except requests.exceptions.ConnectionError:
        print("连接失败")
        return None

# 测试删除
result = delete_resource('https://httpbin.org/delete', token='test_token_123')

输出:

代码示例

删除成功: https://httpbin.org/delete

小贴士

在编写删除函数时,建议统一使用 timeout 参数防止无限等待,并对各种状态码进行分类处理。对于关键资源的删除,还应实现日志记录和重试机制。


六、实际应用场景

  • 后台管理系统:管理员删除用户账号、文章、评论等资源,通常需要管理员权限认证

  • 购物车系统:用户删除购物车中的商品,通过DELETE请求从购物车资源中移除指定商品

  • 文件管理系统:用户删除服务器上的文件或文件夹,通过DELETE请求指定文件路径URL

  • API资源清理:在自动化测试中,通过DELETE请求清理测试产生的临时数据


七、注意事项

操作不可逆:DELETE操作不可逆,建议在UI层添加二次确认机制,服务端实现软删除(标记删除状态而非物理删除)

认证机制:DELETE请求必须配合认证机制(如JWT Token、OAuth等),防止未授权用户删除他人资源

请求体兼容性:部分服务器对DELETE请求的请求体支持不一致,建议优先通过URL传递资源标识(如 /api/users/123),而非通过请求体传递数据


八、DELETE请求状态码对比

了解不同的HTTP状态码含义,有助于正确处理删除操作的响应:

状态码 含义 说明
200 OK 删除成功,返回响应体(如删除确认信息)
202 Accepted 请求已接受,但删除尚未完成(异步删除场景)
204 No Content 删除成功,无返回内容(最常见的成功响应)
404 Not Found 资源不存在(可能已被删除或URL错误)
403 Forbidden 无权限删除(认证通过但权限不足)
409 Conflict 资源存在冲突,无法删除(如有依赖关系)

九、课后练习

练习1

使用requests.delete()向 https://httpbin.org/delete 发送删除请求,打印响应的状态码和方法

练习2

编写一个函数,发送DELETE请求时携带Bearer Token认证头,并处理401未认证和403无权限的情况

练习3

编写一个资源管理类,包含create(POST)、read(GET)、update(PUT)、delete(DELETE)四个方法,实现完整的CRUD操作

常见问题

什么是软删除?为什么要使用软删除?

软删除是指不真正删除数据库记录,而是标记一个deleted_at字段记录删除时间。这样做的好处是:数据可恢复、便于审计追踪、避免外键关联问题。在企业管理系统中,软删除是最佳实践。

DELETE请求能携带请求体吗?

HTTP规范没有明确禁止DELETE携带请求体,但也没有明确定义其语义。部分服务器和代理可能会忽略DELETE的请求体。因此最佳实践是通过URL路径传递资源标识,如 DELETE /api/users/123,而不是通过请求体。

DELETE请求返回204和200有什么区别?

200表示删除成功且返回响应体(如删除确认信息);204表示删除成功但无返回内容。204更常见,因为删除操作通常不需要返回数据。如果API需要返回删除的资源信息或操作日志,可以使用200。

为什么DELETE是幂等的?

幂等性指多次执行同一操作结果相同。DELETE第一次执行删除资源成功,后续再DELETE同一资源,虽然可能返回404(资源不存在),但结果都是"资源不存在",状态一致。因此DELETE是幂等的。

标签: requests.delete DELETE请求 资源删除 RESTful API 幂等性 软删除

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: PUT与PATCH请求详解 - Python资源更新方法对比教程 下一篇: requests库设置HTTP请求头 - User-Agent与Authorization详解

poll相关推荐