Django API传递类/字段名称,而不是与它们相关的值

时间:2015-04-20 17:02:32

标签: python django django-views

所以我在Django应用程序中创建一个API,并且我有一个遵循该模式的NodeID类:

class NodeID(enum.IntEnum):
    EIGENVECTOR = 0

我在视图函数中返回的简化版本是:

return json.dumps({'eigenvector': NodeID.EIGENVECTOR})

当我在浏览器中查看我的API的结果时,它将'eigenvector'的值显示为NodeID.EIGENVECTOR而不是整数0。

{"eigenvector": NodeID.EIGENVECTOR }

这使得我的前端无法处理它(显然它不知道NodeID是什么)。我怎样才能使调用接收NodeID.EIGENVECTOR的值而不是变量?

1 个答案:

答案 0 :(得分:1)

这与Python enum的实现有关,它使用自定义元类来修改对其类属性的访问:

仅访问该值的工作方式如下:

>>> member = NodeID.EIGENVECTOR
>>> member.value
0

所以从简化的例子中返回它将是:

return {'eigenvector': NodeID.EIGENVECTOR.value}

更新:如果使用Python 3.4并将输出定位为JSON,Python自己的json.dumps()本身会将值扩展为序列化表示。 (我发现在this answer

示例w / json.dumps()

>>> class Foo(IntEnum):
...     bam = 0
...     bar = 1
...
>>> Foo.bam
<Foo.bam: 0>
>>> json.dumps(Foo.bam)
'0'

示例w /嵌套结构:

>>> something = {'a': Foo.bam, 'b': { 'c': Foo.bar}}
>>> something 
{'a': <Foo.bam: 0>, 'b': {'c': <Foo.bar: 1>}}
>>> json.dumps(something) 
'{"a": 0, "b": {"c": 1}}'