Ключ модуля db, отправленный клиенту, должен пройти через str (the_key), который дает вам безопасный ключ URL. Ваша templating environment и т. Д. Сделают это для вас, просто предоставив ключ в шаблон.
При переходе ключ обратно от клиента, вы должны воссоздать ключ с key = db.Key(encoded=self.request.get("obj"))
На данный момент он может не с чем-то вроде BadKeyError: Invalid string key "thebadkeystring"=.
Если нет у вас есть действительный ключ
obj = memcache.get(self.request.get("obj"))
на самом деле не поднимет BadKeyError, потому что в этот момент вы просто работаете со строкой, и получаете только None
или значение.
Итак, в этот момент вы знаете, что у вас нет ключа.
Однако вам необходимо использовать memcache.get (self.request.get ("obj")), чтобы получить объект из memcache, поскольку экземпляр db.Key
не является допустимым ключом memcache.
Таким образом, вы будете создавать ключ для проверки ключевой строки в этой точке. Конечно, если memcache не получается, вы можете использовать только что созданный ключ для извлечения объекта с помощью db.get(key)
Что вы подразумеваете под «действительным» ключом? Вы имеете в виду «в правильном формате для ключевой строки», или вы имеете в виду «относится к фактическому объекту в хранилище данных»? –
Я имею в виду правильный формат для ключевой строки, чтобы избежать ошибки 'raise datastore_errors.BadKeyError ('Недопустимый строковый ключ% s.'% Encoded)'. Спасибо за помощь. – user1961