如何从请求中获取json数组,并使用python和GAE在对象中使用它?

2024-05-29 10:04:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python并探索Google App Engine,我遇到了这个问题:

如何将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":"test@test.com",
  "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

我知道这可能是一个非常愚蠢的问题,但我找不到一个对我有用的答案。你能帮助我吗?你知道吗

谢谢你!你知道吗


Tags: nameidnumberdatelicensedriverstatuscar
1条回答
网友
1楼 · 发布于 2024-05-29 10:04:13

我设法解决了我的问题。感谢@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()

相关问题 更多 >

    热门问题