Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python Django Rest框架:一个URL用于POST,一个URL用于在同一APIView上获取_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架:一个URL用于POST,一个URL用于在同一APIView上获取

Python Django Rest框架:一个URL用于POST,一个URL用于在同一APIView上获取,python,django,django-rest-framework,Python,Django,Django Rest Framework,我目前正在写一个POST请求来创建一个a记录: client.post(url, {'name' : 'foo', 'another_field' : 2}) 在服务器端,在视图中,我有: class AQuery(generics.GenericAPIView): queryset = A.objects.all() serializer_class = ASerializer def get(self, request, param1, param2, forma

我目前正在写一个
POST
请求来创建一个
a
记录:

client.post(url, {'name' : 'foo', 'another_field' : 2})
在服务器端,在视图中,我有:

class AQuery(generics.GenericAPIView):
    queryset = A.objects.all()
    serializer_class = ASerializer

    def get(self, request, param1, param2, format=None):
        ... # do some special query based off of param1 and 2.

    def post(self, request, format=None):
        serializer = self.get_serializer(data=request.data, many=False) 
        if serializer.is_valid():
            serializer.save()
            return Response(...)
        return Response(...)
如您所见,我希望在url中捕获
param1
param2
,在
url.py中也是如此:

urlpatterns = [
    # for GET
    path('A/<str:param1>/<path:param2>', views.AQuery.as_view(), name='A query GET')
    # for POST
    path('A', views.AQuery.as_view(), name='A query POST')
    ...
]
urlpatterns = [
        # for GET
        path('A/<str:param1>/<path:param2>', views.a_get_query, name='A query GET')
        # for POST
        path('A', views.a_post_query, name='A query POST')
        ...
    ]
在我的
url.py
中:

urlpatterns = [
    # for GET
    path('A/<str:param1>/<path:param2>', views.AQuery.as_view(), name='A query GET')
    # for POST
    path('A', views.AQuery.as_view(), name='A query POST')
    ...
]
urlpatterns = [
        # for GET
        path('A/<str:param1>/<path:param2>', views.a_get_query, name='A query GET')
        # for POST
        path('A', views.a_post_query, name='A query POST')
        ...
    ]
urlpatterns=[
#为了得到
路径('A/',views.A_get_query,name='A query get')
#投递
路径('A',views.A\u post\u query,name='A query post')
...
]
但我得到了以下错误:

TypeError:调用视图集上的
.as\u view()
时,必须提供
操作
参数。例如
.as_视图({'get':'list'})


我也不太确定发生在哪里

这种方法对我来说就像预期的那样有效。然而,我不得不做一些小改动:

1) 我不得不将函数名从
get
post
更改为
do\u get
do\u post
。当函数的名称与HTTP方法本身相同时,Django似乎做了一些特殊的事情

2) 我在
urls.py
中直接内联调用
as_view()

因此,在这样做之后:

urlpatterns = [
        # for GET
        path('A/<str:param1>/<path:param2>', views.AQuery.as_view({'get':'do_get'}), name='A query GET')
        # for POST
        path('A', views.AQuery.as_view({'post':'do_post'}), name='A query POST')
        ...
    ]

我试着内联它并重命名它,发现这个问题因为某种原因消失了。虽然我不确定原因是什么,但我接受了你的回答:)