2017-09-12 8 views
0

동일한 json_mapping을 사용하여 객체에 대한 재귀 적 매핑을 제공 할 수 있습니까?Flask_restplus recursive json_mapping

exapmle :

person_json_mapping = api.model('Person', { 
    'name': fields.String(), 
    'date_of_birth': fields.Date(), 
    'parents': fields.List(fields.Nested(##person_json_mapping##)) 
    } 

방법 자체 내부을 person_json_mapping 를 사용하는?

답변

2

재귀 매핑을 flask_restplus으로 정의하는 방법이 있습니다. 상황에 따라 최대 재귀 수준을 가정해야한다는 제약이 있습니다. 아담과 에바에게 연락하고 싶지 않을거야. 그렇지?

api.model을 직접 사용하는 대신 해당 모델을 반복적으로 작성하고 각 재귀 호출에서 iteration_number 인수를 감소시키는 메소드를 작성하십시오.

def recursive_person_mapping(iteration_number=10): 
    person_json_mapping = { 
     'name': fields.String(), 
     'date_of_birth': fields.Date() 
    } 
    if iteration_number: 
     person_json_mapping['parents'] = fields.List(fields.Nested(recursive_person_mapping(iteration_number-1))) 
    return api.model('Person'+str(iteration_number), person_json_mapping) 

는 함수 호출을 만들기 위해 기억, 이런 마샬, 당신의 방법을 장식 할 때 :

@api.marshal_with(recursive_person_mapping()) 
def get(self): 
... 

주를 괄호를!

swagger를 사용하는 경우 'Person'+str(iteration_number)은 필수 항목입니다. iteration_number를 추가하지 않으면 순환 한계 초과로 끝나고 내부 서버 오류가 발생합니다. 비틀 거리지 않는 매퍼 (mapper)는 문제없이 잘 해낼 것입니다.

최대 재귀 수준을 임의로 가정 한 후 재귀 제한을 초과 한 경우 자동으로 관리자에게 알리는 것이 좋습니다. 이는 마샬 러 자체가 아니라 데이터를 준비하는 방법의 책임 일 수 있습니다.