使用query_params

时间:2016-07-08 10:39:29

标签: python django django-rest-framework

我正在尝试使用Django设置API。在我的views.py中,我有这个端点:

@api_view()
def update_label(request):
    user_id = request.query_params['user_id']
    date = datetime.strptime(request.query_params['date'], '%Y-%m-%dT%H:%M:%S.%f')
    label_name = request.query_params['label_name']
    value = request.query_params['value']
    value = eval(value)
    db_user_ctrl.update_label(date, user_id, label_name, value)
    return Response({'status': 'SUCCESS'})

它会为某些用户更新数据库中的某些标签。可以从此端点更新多个标签,一些与value关联,一些关联value与一个小字典,例如{'item1':1,'item2':-1}。在javascript方面,我使用JSON.stringify(value)格式化值,然后通过GET请求发送它。在Django部分,我可以看到通过调试接口收到了正确的参数。但是我有以下错误:

invalid literal for int() with base 10: '{"item1":-1}'

在我的代码中与此行关联:

value = request.query_params['value']

这里发生了什么?为什么他试图将字符串转换为整数?

编辑1:

有关堆栈跟踪的更多信息:

.../venv/lib/python3.4/site-packages/django/core/handlers/base.py in get_response
.../venv/lib/python3.4/site-packages/django/core/handlers/base.py in get_response
.../venv/lib/python3.4/site-packages/django/views/decorators/csrf.py in wrapped_view
.../venv/lib/python3.4/site-packages/django/views/generic/base.py in view
.../venv/lib/python3.4/site-packages/rest_framework/views.py in dispatch
.../venv/lib/python3.4/site-packages/rest_framework/views.py in dispatch
.../venv/lib/python3.4/site-packages/rest_framework/decorators.py in handler
.../webapp/api/views.py in update_label
    value = request.query_params['value'] 

2 个答案:

答案 0 :(得分:1)

你能试试吗

import json
json.loads(<query string value>)

答案 1 :(得分:0)

这个问题非常狡猾,这是由于Gunicorn缓存了一些文件。在views.py的旧版本中,我有value = int(request.query_params['value'])。当我更新代码时,Gunicorn仍在回答使用过时的缓存文件,因此无法将字符串转换为int。我重新启动了Gunicorn并且它现在正在工作。