2014-10-02 312 views
1

我正在使用Django 1.7和Django REST Framework 2.4.3。我有一个端点,看起来像/items/{pk}/notify,使用UpdateAPIView可以很好地工作。我试图将多个查询参数传递给此URL,但我似乎只能看到第一个参数。 URL中的任何后续参数都已提交。我四处搜索,发现Django有一个QueryDict,然后我开始使用lists来获得所有的值。不幸的是,这不起作用。如何获取PUT请求中的所有URL参数?

这里是我 -

class Notify(generics.UpdateAPIView): 
    queryset = Item.objects.all() 
    serializer_class = ItemSerializer 

    def update(request, *args, **kwargs): 
     print('request: %s', request) 
     print('args: %s' % args) 
     print('kwargs: %s' % kwargs) 

     return Response(data='123') 

我做curl -X PATCH 127.0.0.1:8000/items/notify/?ticket_no=123&foo=bar测试。奇怪的是,本地Django服务器没有记录完整的URL。我只看到[02/Oct/2014 08:52:03] "PATCH /items/1234/notify/?ticket_no=123 HTTP/1.1" 200 5

如何访问所有URL参数?

回答

1

这不是Django的问题,这是您的curl命令的问题。您需要将url放在引号中,因为&是一个由shell特别处理的元字符。

curl -X PATCH '127.0.0.1:8000/items/notify/?ticket_no=123&foo=bar' 

不带引号,&告诉shell来在后台运行命令,并移动到下一个命令。因此,shell运行两个单独的命令,并且只有第一个get参数包含在url中。

curl -X PATCH 127.0.0.1:8000/items/notify/?ticket_no=123 
foo=bar 
+0

谢谢!很高兴看到这是一个简单的修复。 – 2014-10-02 13:42:34