2017-02-15 11 views
0

PUT 요청을 사용하여 오브젝트로리스트를 갱신하려면 Flask Restful을 사용하고 싶습니다.플라스크 안정된 PUT 업데이트리스트와 오브젝트

{"EmployeeID":"12345", "firstname":"Joe","lastname":"Bloggs","SupervisorName":"Name","SupervisorID":"2468","role":"Role","active":"True","hours":["{'date':'01/01/2017','qty':'3','project':'Project 1'}"]"} 

json으로의 시간 필드 목록은 다음과 같은

결과 JSON이 보일 것입니다. 목표는 각 PUT 요청의 목록에 개체를 추가하는 것입니다.

시간의 파서는 다음과 같습니다

parser.add_argument('hours', action='append') 

put 메소드의 코드는 다음과 같습니다

def put(self, EmployeeID=None): 
     data = parser.parse_args() 
     if not data: 
      data = {'ERROR': 'No Data'} 
      return jsonify(data) 
     else: 
      if EmployeeID: 
       if mongo.db.employee.find_one({'EmployeeID': EmployeeID}): 
        mongo.db.employee.update_one({'EmployeeID': EmployeeID}, {set: {"hours": data.get('hours')}}) 
        return {'response': 'Employee:'+str(EmployeeID)+' updated'} 
       else: 
        return {'Error': 'employee ' + str(EmployeeID) + ' not found'} 

      else: 
       return {'response': 'Employee ID missing'} 

가 update_one 방법 여기에 사용할 수있는 권리 중 하나인가? 컬 PUT 요청을 사용하여

:

curl -H "Content-type: application/json" -X PUT -d '{"EmployeeID":"1234",...,"hours":{'time':'','qty':'3','project':'Project 1'}}' http://127.0.0.1:5000/api/people/1234 

오류 준 :

{ 
"message": "Failed to decode JSON object: Expecting property name enclosed in double quotes: line 1 column 168 (char 167)" 
} 

을하지만 요청에 견적을 추가 할 때 오류 반환 :

{ 
"message": "Failed to decode JSON object: Unterminated string starting at: line 1 column 167 (char 166)" 
} 

내가 할 수있는을 요청에 문제가 있는지 아니면 실제 Flask-Restful 코드가 있는지 파악하지 마십시오.

Mongo 문서 목록을 개체로 업데이트하는 올바른 방법은 무엇입니까?

답변

0

Flask에 많은 경험이 없지만 게시 한 오류 메시지에서 요청의 JSON이 Flask에 의해 올바르게 디코딩되지 않은 것처럼 보입니다. JSON 문자열에 작은 따옴표를 사용하고 전체 JSON을 다른 작은 따옴표로 묶는 것이기 때문에 이것이라고 생각합니다. 나는 그 요청을 형성 JSON을 디코딩 할 수없는 문제를 해결해야한다고 생각

curl -H "Content-type: application/json" -X PUT -d '{"EmployeeID":"1234","hours":{"time":"","qty":"3","project":"Project 1"}}' http://127.0.0.1:5000/api/people/1234 

을 :

시도는 JSON 문자열에 큰 따옴표를 단지를 사용과 같이 작은 따옴표로 전체 JSON 문자열을 포장하기 .

+0

했다 다음 몽고 업데이트를 사용하여 = 액션을 제거 'APPEND'다음

parser.add_argument('hours') 

:

은 내가 RequestParser을 변경했다 그런 다음 업데이트 방법을 mongo.db.employee.update_one ({ 'EmployeeID': EmployeeID}, { '$ set': { "hours": data.get ('hours')}}로 변경하십시오. – Bchadwick

+0

불행히도이 방법으로 덮어 씁니다 현재의 objec t, I 그런 다음 '$ addToSet'메서드를 사용해 보았습니다. 그러나 이것은 기존 목록에있는 객체를 포함하는 새로운 목록을 추가했습니다. – Bchadwick

+0

올바른 해결책을 찾으면 답변을 추가합니다. – Bchadwick

0

누군가이 문제에 부딪히면 마침내 거기에 도착했습니다. 는 JSON 파싱 문제 덕분에 해결

mongo.db.employee.update_one({'EmployeeID': EmployeeID}, {'$addToSet': {"hours": data.get('hours')}})