장고를 사용하여 API를 설정하려고합니다. 내 views.py에서 나는이 종점이있다 :query_params를 사용할 때 장고 valueError
@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}
. 자바 스크립트 쪽에서 나는 GET 요청을 통해 값을 보내기 전에 값을 포맷하기 위해 JSON.stringify(value)
을 사용한다. Django 부분에서 디버깅 인터페이스를 통해 적절한 매개 변수가 수신 된 것을 볼 수 있습니다.
value = request.query_params['value']
여기에 무슨 일이 일어나고 무엇 : 내 코드에서이 줄을
invalid literal for int() with base 10: '{"item1":-1}'
관련 : 그러나 나는 다음과 같은 오류가? 왜 문자열을 정수로 변환하려고합니까?
편집 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']
가능한 경우 전체 스택 추적을 게시하십시오. 내 첫 번째 추측은 실제로 문제가'eval (value)'이었을 것입니다. 그게 바로 원격 코드 실행 문제가 있기 때문에하지 말아야 할 일입니다. – dhke
여기 왜 eval을 전혀 사용하지 않는지 잘 모르겠습니다. 불필요한 것일뿐만 아니라 유효하지 않은 사용자 입력에서 호출하는 것이 특히 바람직하지 않은 것처럼 보입니다. –
나는 문자열을 파이썬 객체로 변환하기 위해 eval을 사용한다. 아마도이 방법을 사용하는 것이 더 안전한 방법 일 수는 있지만 문제가있는 곳이라고 생각하지는 않는다. 나는 eval 라인에 주석을 달아 보았고 같은 에러가 나왔다. 쿼리 매개 변수는 문자열로 해석되어야하고 다른 모든 매개 변수는! 어떤 이유로 django는 이것을 int로 변환하려고합니다. – user3091275