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')
...
]
我试着内联它并重命名它,发现这个问题因为某种原因消失了。虽然我不确定原因是什么,但我接受了你的回答:)