Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架:支持任意HTTP谓词的视图?_Django_Django Rest Framework - Fatal编程技术网

Django Rest框架:支持任意HTTP谓词的视图?

Django Rest框架:支持任意HTTP谓词的视图?,django,django-rest-framework,Django,Django Rest Framework,例如,是否有一种视图类型允许我同时执行以下操作: 获取/account/items 及 发布/修补帐户/项目/一次完成?从一个视图集还是什么?请注意,我没有在POST上的帐户/项目路线上创建任何内容,但我需要POST到帐户/项目/以执行特定操作 据我所知,我需要创建两个单独的视图,一个用于通过GET/account/items获取列表,另一个用于在细节视图上执行自定义发布和修补操作。是吗?您应该使用DRF 使用APIView类与使用常规视图类基本相同,通常,传入的请求被分派到适当的处理程序方法,

例如,是否有一种视图类型允许我同时执行以下操作:

获取
/account/items

发布/修补
帐户/项目/
一次完成?从一个视图集还是什么?请注意,我没有在POST上的
帐户/项目
路线上创建任何内容,但我需要POST到
帐户/项目/
以执行特定操作

据我所知,我需要创建两个单独的视图,一个用于通过
GET/account/items
获取列表,另一个用于在细节视图上执行自定义发布和修补操作。是吗?

您应该使用DRF

使用APIView类与使用常规视图类基本相同,通常,传入的请求被分派到适当的处理程序方法,如.get()或.post()

下面是一个使用
get
post
处理程序的示例。我已将用于更新用户的代码抽象为帮助器方法,供您创建-您的实现将有所不同:

从rest\u framework.views导入APIView
来自rest\u framework.response导入响应
从django.contrib.auth.models导入用户
从my_project.accounts.helpers导入更新用户
类用户视图(APIView):
def get(自我、请求、*args、**kwargs):
"""
返回一个用户。
"""
user_data=user.objects.get(pk=kwargs['pk']).values()
返回响应(用户数据)
def补丁(self、request、*args、**kwargs):
user=user.objects.get(pk=kwargs['pk'])
data=request.POST
更新用户(用户、数据)
返回响应('Updated user!')
您可能还想研究一下,它提供了简单的CRUD操作处理。

您应该使用DRF

使用APIView类与使用常规视图类基本相同,通常,传入的请求被分派到适当的处理程序方法,如.get()或.post()

下面是一个使用
get
post
处理程序的示例。我已将用于更新用户的代码抽象为帮助器方法,供您创建-您的实现将有所不同:

从rest\u framework.views导入APIView
来自rest\u framework.response导入响应
从django.contrib.auth.models导入用户
从my_project.accounts.helpers导入更新用户
类用户视图(APIView):
def get(自我、请求、*args、**kwargs):
"""
返回一个用户。
"""
user_data=user.objects.get(pk=kwargs['pk']).values()
返回响应(用户数据)
def补丁(self、request、*args、**kwargs):
user=user.objects.get(pk=kwargs['pk'])
data=request.POST
更新用户(用户、数据)
返回响应('Updated user!')

您可能还想查看,它提供了简单的CRUD操作处理。

这不是ViewSet的工作方式吗?也许我不明白你的问题,但看看@action decorator:,你可以设置“detail”变量,如果它使用列表或详细url,它会处理。是的,我看到了–看起来我无法使用它获得我想要的确切url方案。@action decorator将函数名作为url路径的下一部分,但我希望它是pk。另一方面,视图集中的常规细节视图似乎不允许我覆盖细节路线上的POST(我需要从路径获取pk)。这不是视图集的工作方式吗?也许我不明白你的问题,但看看@action decorator:,你可以设置“detail”变量,如果它使用列表或详细url,它会处理。是的,我看到了–看起来我无法使用它获得我想要的确切url方案。@action decorator将函数名作为url路径的下一部分,但我希望它是pk。另一方面,视图集中的常规细节视图似乎不允许我覆盖细节路线上的POST(我需要从路径获取pk)。因此我现在使用的是APIView–我知道这包括get
account/items
情况,但是上面示例中的
POST
似乎不包括向
account/items/
发布以执行操作。特定的APIView示例(来自文档)用于列表视图,但您可以将任何url指向任何APIView。您可以创建一个
User
视图,该视图在其
get
方法中返回单个用户,在其
post
方法中创建用户,并在其
patch
方法中更新用户。像在其他视图中一样执行此操作。如果有帮助的话,我可以用一个例子更新我的答案。我继续修改了我的答案。现在让我知道这是否有意义。因此我现在正在使用APIView–我知道这包括GET
account/items
案例,但您上面示例中的这个
POST
似乎不包括发布到
account/items/
以执行操作。特定的APIView示例(来自文档)用于列表视图,但是您可以将任何url指向任何APIView。您可以创建一个
User
视图,该视图在其
get
方法中返回单个用户,在其
post
方法中创建用户,并在其
patch
方法中更新用户。像在其他视图中一样执行此操作。如果有帮助的话,我可以用一个例子更新我的答案。我继续修改了我的答案。现在让我知道这是否有意义。