2017-02-10 5 views
0

저는 Python을 배우면서 Google App Engine을 탐색 중이며이 문제에 직면했습니다 :요청에서 json 배열을 얻고 GAE가있는 Python을 사용하여 객체에서 사용하는 방법은 무엇입니까?

내 json 요청에 포함 된 json 배열을 ndb 객체에 추가하는 방법은 무엇입니까?

class Driver (ndb.Model): 
    id = ndb.StringProperty() 
    first_name = ndb.StringProperty() 
    last_name = ndb.StringProperty() 
    date_of_birth = ndb.StringProperty() 
    phone_number = ndb.StringProperty() 
    email = ndb.StringProperty() 
    vehicles = ndb.StructuredProperty(Vehicle, repeated=False) 
    document = ndb.StructuredProperty(Document, repeated=False) 
    device_registration_id = ndb.StringProperty() 
    time_created = ndb.TimeProperty() 
    time_updated = ndb.TimeProperty() 
    account_status = ndb.StringProperty() 
    driver_status = ndb.StringProperty() 


class Vehicle (ndb.Model): 
    car_make = ndb.StringProperty() 
    car_model = ndb.StringProperty() 
    car_year = ndb.StringProperty() 
    license_plate_number = ndb.StringProperty() 


class Document (ndb.Model): 
    driver_license = ndb.StringProperty() 
    insurance_provider = ndb.StringProperty() 
    insurance_id = ndb.StringProperty() 
    insurance_expiration_date = ndb.StringProperty() 

그리고 요청 처리에 대한 내 코드는 다음과 같습니다 :

여기 내 모델입니다 내가 전에 간단한 모델을 했어

class DriverManagementNew(webapp2.RequestHandler): 

    def post(self): 
    jsonstring = self.request.body 
    jsonobject = json.loads(jsonstring) 
    driver_id = str(uuid.uuid4()) 
    new_driver = Driver(
     id=driver_id, 
     first_name=jsonobject["first_name"], 
     last_name=jsonobject["last_name"], 
     date_of_birth=jsonobject["date_of_birth"], 
     phone_number=jsonobject["phone_number"], 
     email=jsonobject["email"], 
     vehicles=Vehicle(car_make=jsonobject["car_make"], 
         car_model=jsonobject["car_model"], 
         car_year=jsonobject["car_year"], 
         license_plate_number=jsonobject["license_plate_number"]), 
     document=Document(driver_license=jsonobject["driver_license"], 
          insurance_provider=jsonobject["insurance_provider"], 
          insurance_id=jsonobject["insurance_id"], 
          insurance_expiration_date=jsonobject["insurance_expiration_date"]), 
     device_registration_id=jsonobject["device_registration_id"], 
     time_created=datetime.datetime.now(), 
     time_updated=datetime.datetime.now(), 
     account_status=jsonobject["account_status"], 
     driver_status=jsonobject["driver_status"]) 
    new_driver.put() 

, 그리고 난 StructuredProperty를 사용하지 않았다. 내 요청이 작동했지만 지금은이 같은 요청을 보낼 때 :

{ 
    "first_name":"FName", 
    "last_name":"LName", 
    "date_of_birth":"01-02-1900", 
    "phone_number":"+1123123123", 
    "email":"[email protected]", 
    "vehicles":{"car_make":"volkswagen", 
      "car_model":"jetta", 
      "car_year":"2000", 
      "license_plate_number":"ABC01DC" 
    }, 
    "document":{"driver_license":"F3377232G", 
      "insurance_provider":"Geico", 
      "insurance_id":"1433123aa", 
      "insurance_expiration_date":"02-02-2018" 
    }, 
    "device_registration_id":"id123123123123123", 
    "account_status":"ACTIVATED", 
    "driver_status":"ACTIVE" 
} 

내가 얻을 500 서버 오류

NameError: name 'Vehicle' is not defined

나는 이것이 아주 멍청한 놈 질문이 될 수 있음을 이해하지만, 내가 할 수 없었다 나를 위해 일했던 대답을 찾아라. 나 좀 도와 줄 수있어?

감사합니다.

+1

그것은 클래스 드라이버 클래스 차량을 언급처럼 보이지만 차량이 아직 정의되지 않았습니다. 차량 정의를 위로 움직이면이 오류를 지나쳐야합니다. – dragonx

답변

0

나는 내 문제를 해결할 수있었습니다. 그의 코멘트에 대한 @dragonx 덕택으로, 그것은 나를 많이 도왔다.

내 처리기 :

class DriverManagementNew(webapp2.RequestHandler): 


    def post(self): 
    jsonstring = self.request.body 
    jsonobject = json.loads(jsonstring) 
    driver_id = str(uuid.uuid4()) 
    vehicle = Vehicle(car_make=jsonobject["vehicles"]["car_make"], 
         car_model=jsonobject["vehicles"]["car_model"], 
         car_year=jsonobject["vehicles"]["car_year"], 
         license_plate_number=jsonobject["vehicles"]["license_plate_number"]) 
    doc = Document(driver_license=jsonobject["document"]["driver_license"], 
         insurance_provider=jsonobject["document"]["insurance_provider"], 
         insurance_id=jsonobject["document"]["insurance_id"], 
         insurance_expiration_date=jsonobject["document"]["insurance_expiration_date"]) 
    new_driver = Driver(
     id=driver_id, 
     first_name=jsonobject["first_name"], 
     last_name=jsonobject["last_name"], 
     date_of_birth=jsonobject["date_of_birth"], 
     phone_number=jsonobject["phone_number"], 
     email=jsonobject["email"], 
     vehicles=vehicle, 
     document=doc, 
     device_registration_id=jsonobject["device_registration_id"], 
     time_created=datetime.datetime.now(), 
     time_updated=datetime.datetime.now(), 
     account_status=jsonobject["account_status"], 
     driver_status=jsonobject["driver_status"]) 
    new_driver.put() 

내 모델 :

class Vehicle (ndb.Model): 
    car_make = ndb.StringProperty() 
    car_model = ndb.StringProperty() 
    car_year = ndb.StringProperty() 
    license_plate_number = ndb.StringProperty() 


class Document (ndb.Model): 
    driver_license = ndb.StringProperty() 
    insurance_provider = ndb.StringProperty() 
    insurance_id = ndb.StringProperty() 
    insurance_expiration_date = ndb.StringProperty() 


class Driver (ndb.Model): 
    id = ndb.StringProperty() 
    first_name = ndb.StringProperty() 
    last_name = ndb.StringProperty() 
    date_of_birth = ndb.StringProperty() 
    phone_number = ndb.StringProperty() 
    email = ndb.StringProperty() 
    vehicles = ndb.StructuredProperty(Vehicle, repeated=False) 
    document = ndb.StructuredProperty(Document, repeated=False) 
    device_registration_id = ndb.StringProperty() 
    time_created = ndb.DateTimeProperty() 
    time_updated = ndb.DateTimeProperty() 
    account_status = ndb.StringProperty() 
    driver_status = ndb.StringProperty()