Aru*_* SS 2 python python-2.7 django-serializer django-rest-framework
我已经安装了'us'模块(https://pypi.python.org/pypi/us)来获取美国各州.它打印状态列表.我想以下列格式在API中显示它.
{
"states": [
{
"state_code":"CA",
"state_name":"California"
},
{
"state_code":"AL",
"state_name":"Alabama"
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在显示以下错误.
TypeError at /api/v1/us/states
<State:Alabama> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
views.py
@api_view(['GET'])
def get_all_states(request):
states = us.states.STATES
print (states)
return Response({'states':states})
Run Code Online (Sandbox Code Playgroud)
当我打印状态时,它具有以下格式.
[<State:Alabama>, <State:Alaska>, <State:Arizona>, <State:Arkansas>, <State:California>, <State:Colorado>, <State:Connecticut>, <State:Delaware> <State:West Virginia>, <State:Wisconsin>, <State:Wyoming>]
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = [
url(r'^us/states', get_all_states),
]
Run Code Online (Sandbox Code Playgroud)
我没有使用任何序列化器.无论如何迭代状态并获取格式化的状态数据?
当您dict
在响应中返回时,django会将其视为application/json
内容类型响应并将其返回.它使用json
库来序列化它.dict是可序列化的,但State对象不是.你需要自己充气.像这样的东西.
@api_view(['GET'])
def get_all_states(request):
states = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]
print (states)
return Response({'states': states})
Run Code Online (Sandbox Code Playgroud)
因为你需要的只是一些静态数据,所以缓存它总是一个好主意.或者膨胀一次,以便在每次请求时都不会重复.
US_STATES = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]
@api_view(['GET'])
def get_all_states(request):
return Response({'states': US_STATES})
Run Code Online (Sandbox Code Playgroud)
快乐的编码.
归档时间: |
|
查看次数: |
4990 次 |
最近记录: |