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]