【问题标题】:How can I get all URL parameters in a PUT request?如何获取 PUT 请求中的所有 URL 参数?
【发布时间】:2014-10-02 22:35:45
【问题描述】:

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

这是我所拥有的 -

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 参数?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

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

    没有引号,& 告诉 shell 在后台运行命令,然后继续执行下一个命令。所以shell运行两个单独的命令,并且url中只包含第一个get参数。

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

    【讨论】:

    • 谢谢!很高兴看到它很容易解决。
    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多