Python API调用是否执行POST或GET
对于获取数据,建议通常使用Python API调用是否执行POST或GET,python,rest,http,Python,Rest,Http,对于获取数据,建议通常使用GET,对于提交表单,建议使用POST。对于“签出”项目的以下函数如何: @validate_credentials @csrf_exempt @acceptable_methods(???) def cue_checkout(request, cue_id, user=None, checkout=True): cue = Cue.objects.filter(pk=cue_id, user=user) if not cue.exists():
GET
,对于提交表单,建议使用POST
。对于“签出”项目的以下函数如何:
@validate_credentials
@csrf_exempt
@acceptable_methods(???)
def cue_checkout(request, cue_id, user=None, checkout=True):
cue = Cue.objects.filter(pk=cue_id, user=user)
if not cue.exists():
return HttpResponseForbidden('Invalid Cue supplied.')
cue = cue[0]
CueAssignment.objects.create(cue=cue, user=user, checkout_timestamp=timezone.now())
return HttpResponse()
我在想,既然我们正在修改数据,它应该是一个
帖子,但是有人能解释一下这里的正确方法是什么以及为什么吗?W3指定了两个术语来描述HTTP方法
第一个是“安全的”,这意味着它不会改变服务器上的数据资源
第二个是“幂等”,意思是只要数据资源的状态没有改变,请求的结果就应该是相同的(独立于幂等请求)
因为您是在服务器上创建对象,所以应该使用POST
,因为GET
被定义为安全且幂等的操作POST
同时既不安全也不幂等(因为我们可能会由于约束而拒绝创建对象)。此外,您应该强制实施csrf_保护,以避免重复使用会话cookie,从而维护用户自由使用创建对象的权限
有一个很好的、快速的表,可以作为常用方法的快速参考。W3指定了两个用于描述HTTP方法的术语
第一个是“安全的”,这意味着它不会改变服务器上的数据资源
第二个是“幂等”,意思是只要数据资源的状态没有改变,请求的结果就应该是相同的(独立于幂等请求)
因为您是在服务器上创建对象,所以应该使用POST
,因为GET
被定义为安全且幂等的操作POST
同时既不安全也不幂等(因为我们可能会由于约束而拒绝创建对象)。此外,您应该强制实施csrf_保护,以避免重复使用会话cookie,从而维护用户自由使用创建对象的权限
有一个很好的、快速的表,可以作为常用方法的快速参考。W3指定了两个用于描述HTTP方法的术语
第一个是“安全的”,这意味着它不会改变服务器上的数据资源
第二个是“幂等”,意思是只要数据资源的状态没有改变,请求的结果就应该是相同的(独立于幂等请求)
因为您是在服务器上创建对象,所以应该使用POST
,因为GET
被定义为安全且幂等的操作POST
同时既不安全也不幂等(因为我们可能会由于约束而拒绝创建对象)。此外,您应该强制实施csrf_保护,以避免重复使用会话cookie,从而维护用户自由使用创建对象的权限
有一个很好的、快速的表,可以作为常用方法的快速参考。W3指定了两个用于描述HTTP方法的术语
第一个是“安全的”,这意味着它不会改变服务器上的数据资源
第二个是“幂等”,意思是只要数据资源的状态没有改变,请求的结果就应该是相同的(独立于幂等请求)
因为您是在服务器上创建对象,所以应该使用POST
,因为GET
被定义为安全且幂等的操作POST
同时既不安全也不幂等(因为我们可能会由于约束而拒绝创建对象)。此外,您应该强制实施csrf_保护,以避免重复使用会话cookie,从而维护用户自由使用创建对象的权限
有一个很好的快速表格,可以作为常用方法的快速参考。您可以将签出项目视为更新某些资源,例如购物车。因此,在这种情况下,POST
或PUT
最有意义
POST
用于修改资源或创建资源。使用POST
在资源标识符未知时创建资源,例如,在创建时,服务器将确定资源的id
修改:
POST/my/resource/[existing id]
-在已知位置修改资源
创建:
POST/my/resource
-通过此操作,您可能会返回一个201,其中包含标识新资源的位置标头
PUT
用于创建资源或覆盖资源。在这两种情况下,资源id都是已知的且完全限定的
创建:
PUT/my/resource/[id]
-在已知位置创建资源
修改:
PUT/my/resource/[existing id]
-在已知位置更新资源
差异:
PUT
是幂等的。多次调用它总是得到相同的结果
POST
不是幂等的。多次调用它可能会产生多个新资源。您可以将签出项目视为更新某些资源,例如购物车。因此,在这种情况下,POST
或PUT
最有意义
POST
用于修改资源或创建资源。使用POST
在资源标识符未知时创建资源,例如,在创建时,服务器将确定资源的id
修改:
POST/my/resource/[existing id]
-在已知位置修改资源
创建:
POST/my/resource
-通过此操作,您可能会返回一个201,其中包含标识新资源的位置标头
PUT
用于创建资源或覆盖资源。在这两种情况下,资源id都是已知的且完全限定的
创建:
PUT/my/resource/[id]