python - 为什么我不能得到这个简单的 Python 字典的键/值对?

标签 python django rest dictionary

我正在使用 Django-Rest-Framework 为 Django 应用程序构建一个 restful API。

在 viewset 函数中,我正在检查响应的值并试图找出我可以对其调用哪些方法。我通过打印简单的日志消息来做到这一点。但是,当我尝试在 QueryDict(毕竟只是一本字典)上调用这些方法(键)之一时,我收到错误消息:TypeError: descriptor 'keys' of 'dict' object needs an argument。为什么?我该如何解决?

>>> logger.info("request.QueryDict = %s" % request.QueryDict)
[2014-02-25 17:21:30] INFO [myApp.views:2352] request.QueryDict = <class 'django.http.request.QueryDict'>
# Works!


>>> logger.info("dir(request.QueryDict) = %s" % dir(request.QueryDict))
[2014-02-25 17:21:30] INFO [myApp.views:2354] dir(request.QueryDict) = ['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_assert_mutable', '_encoding', '_iteritems', '_iterlists', '_itervalues', '_mutable', 'appendlist', 'clear', 'copy', 'dict', 'encoding', 'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'iterlists', 'itervalues', 'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update', 'urlencode', 'values', 'viewitems', 'viewkeys', 'viewvalues']
# Works!


>>> logger.info("request.QueryDict.keys() = %s" % request.QueryDict.keys())
TypeError: descriptor 'keys' of 'dict' object needs an argument
# Fails!

最佳答案

QueryDict 是一个类,类似于dict 类。

.keys() 是一个实例方法,但是你在类上调用它,所以你需要将实例传递给方法

>>> mydict = {'key': 'value'}
>>> mydict.keys()        # instance method, works
['key']
>>> dict.keys()          # no argument, on class, same error you get
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'keys' of 'dict' object needs an argument
>>> dict.keys(mydict)    # passing in mydict
['key']

编辑:

经过一些研究,看起来 request.GETrequest.POST 都是 request.QueryDict< 的实例/ 。因此,您要调用的不是 request.QueryDict.keys(),而是:

request.GET.keys()

关于python - 为什么我不能得到这个简单的 Python 字典的键/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028785/

相关文章:

java - 如何使用模型类作为输入将输入参数传递给 Spring restful web 服务方法并执行 MySql 存储过程

java - 在 Java 中使用 Akka 的 REST API

python - 压缩到python中的特定目录

python - 在 Django 模型中不存在的 django-rest-framework 序列化器上定义任意字段

python - Django反向路由-两个可选参数

python - 如何使用相同的URL为GET和POST请求设置不同的permission_classes?

python - 查找系列集中没有 NaN 值的最长子序列

Python 绘制带注释的 3D 点

python - Django WSGIRequest 参数错误

java - 如何使用 rest-assured 将 header 位置响应与正则表达式匹配