pin_drop当前位置:知识文库 ❯ 图文
requests.delete()详解 - Python发送DELETE请求完整教程
目录
一、requests.delete()概述
requests.delete() 用于向服务器发送HTTP DELETE请求,通常用于删除服务器上的指定资源。在RESTful API设计中,DELETE请求与资源URL配合使用,表示移除该资源。
DELETE请求是幂等的,即多次删除同一资源的结果应一致——第一次删除成功后,后续删除请求通常返回404(资源不存在),但操作结果是相同的。这是RESTful架构中最重要的设计原则之一。
二、语法与参数说明
代码示例
requests.delete(url, **kwargs)
返回值:返回一个 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状态码含义,有助于正确处理删除操作的响应:
九、课后练习
练习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是幂等的。
本文涉及AI创作
内容由AI创作,请仔细甄别