我正在尝试使用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']
答案 0 :(得分:1)
你能试试吗
import json
json.loads(<query string value>)
答案 1 :(得分:0)
这个问题非常狡猾,这是由于Gunicorn缓存了一些文件。在views.py
的旧版本中,我有value = int(request.query_params['value'])
。当我更新代码时,Gunicorn仍在回答使用过时的缓存文件,因此无法将字符串转换为int。我重新启动了Gunicorn并且它现在正在工作。