Google Cloud ndbとRESTアーキテクチャを使用してCRUDアプリケーションを作成しようとしています。キーでNDBエンティティをエンコードするJSON
したがって、私は作成と取得のために異なるAPI呼び出しを持っています。
エンティティを更新するには、それらをフロントエンドに表示する必要がありますが、識別子も指定する必要があります。したがって、ndbは後で更新するエンティティを認識します。
私はmodel.query
でエンティティを取得しようとし、その後datetime
とndb.Key
をシリアル化するために拡張されたエンコーダとJSONにそれらをエンコード:
# JSONEncoder extension to handle datetime & ndb.Key
class CustomJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d-%H-%M-%S')
if isinstance(obj, ndb.Key):
return obj.urlsafe()
return json.JSONEncoder.default(self, obj)
# Get JSON data from ndb
query = Card.query(Card.category==category, ancestor=ancestor_key()).fetch()
cards = json.dumps([c.to_dict() for c in query], cls=CustomJsonEncoder)
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(cards)
私の問題は、現在のエンティティのキーがちょうど消えると示されていないということですjson.dump
にはもうありません。私は何の誤りもなく、それは単にコード化されておらず、渡されているだけです。
datetime
オブジェクトは、印刷すると正しく表示されます。 json.dump
と一緒にURL安全なndbキーをどのように送信できるかについてのアイデアはありますか?