Simplejson是不能直接把Appengine中的db.Model序列化成JSON的,我是这么做的:
Model模块做如下扩展:
def getter(func):
if not func.__name__.startswith("get_"):
raise InvalidMethodName("method name must start with 'get_'")
func.getter = True
return func
class Resource(UserDict.DictMixin):
def exposed_attrs(self):
"""attribute names to be exposed as keys"""
return []
def hidden_keys(self):
"""Keys to hide from iteration. A Key will still be accessible if it is
a getter or if it is listed in exposed_attrs()"""
return []
def child_object(self, name):
"""Called to get a child object if it isn't found as a getter or an attribute"""
raise AttributeError
# Dictionary Methods
def __getitem__(self, key):
"""Called to implement evaluation of self[key]"""
getter = getattr(self, 'get_'+key, None)
if hasattr(getter, 'getter'):
return getter()
if key in self.exposed_attrs():
return getattr(self, key)
return self.child_object(key)
def __setitem__(self, key, value):
"""Called to implement assignment to self[key]"""
setter = getattr(self, 'set_'+key, None)
if hasattr(setter, 'setter'):
return setter(value)
def __delitem__(self, key):
"""Called to implement deletion of self[key]"""
deleter = getattr(self, 'del_'+key, None)
if hasattr(deleter, 'deleter'):
return deleter(value)
def keys(self):
"""List of keys for iteration"""
getter_keys = [name.replace('get_', '', 1) for name in dir(self)
if hasattr(getattr(self, name, None), 'getter')]
exposed_keys = getter_keys + self.exposed_attrs()
return [key for key in exposed_keys if key not in self.hidden_keys()]
当继承db.Model时,同时继承Resource:
class PersonModel(Resource, db.Model):
user_id = db.StringProperty()
user_content = db.TextProperty()
@getter
def get_uid(self):
return self.user_id
@getter
def get_content(self):
return self.user_content
在处理请求的时候,再做如下处理:
class RestHandler(webapp.RequestHandler):
def post(self):
self.dispatch_request()
def dispatch_request(self):
self.response.headers["Content-Type"] = "text/plain"
params = {}
for key in self.request.params:
params[str(key)] = self.request.get(key)
obj = //fetch data from PersonModel.
obj = self.preserialize(obj)
out = simplejson.dumps(obj)
self.response.out.write(out)
def translate(self, obj, depth):
return obj
def preserialize(self, obj, depth=0):
obj = self.translate(obj, depth)
if isinstance(obj, datetime.datetime):
return obj.isoformat()
elif isinstance(obj, db.users.User):
return obj.nickname()
elif isinstance(obj, (db.GeoPt, db.IM, db.Key)):
return str(obj)
elif isinstance(obj, types.ListType):
return [self.preserialize(item, depth+1) for item in obj]
elif isinstance(obj, (types.DictType, Resource)):
copy = {}
for key in obj:
copy[key] = self.preserialize(obj[key], depth+1)
return copy
return obj
这个方法不是太好,还有很大的优化空间...
分享到:
相关推荐
谷歌appengine依赖库,GWT编译需要引入此库,方便好用!
Google App Engine for Java 中文指南,Google App Engine for Java 中文指南
appengine-tools-api.jar中文乱码, 修改appengine-tools-api.jar 以实现以UTF-8文件,编译. 使用方法: 1、用winrar找开eclipse\plugins\...
This practical guide shows intermediate and advanced web and mobile app developers how to build highly scalable Java applications in the cloud with Google App Engine. The flagship of Google's Cloud ...
appengine-json-rest 为现有的AppEngine db.Model类创建一个REST-ful JSON API。 示例实施: 您可以在查看正在运行的可以在本地测试的AppEngine项目 设置功能: 有关详细信息,请参见docs中的create_application...
android app与服务器json交互
在搭建WebRTC(AppRTC)时,我们会遇到需要部署Google App Engine的难题,并且最近墙的厉害,所以我特地把我珍藏的Google App Engine 最新版(2020-7-5)分享出来,希望可以方便想搭建WebRTC(AppRTC)的同学们
A good book to learn Google App Engine.
Google App Engine Documentation
The App Engine SDK for Java includes a local development server as well as the tooling for deploying and managing your applications in App Engine. By downloading, you agree to be bound by the Terms ...
appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)
Google App Engine is a web application hosting service. By “web application,” we mean an application or service accessed over the Web, usually with a web browser: storefronts with shopping carts, ...
Google App Engine文档
Google App Engine is a key component of the Google Cloud Platform and one of the most comprehensive cloud services. Together with Python, the first programming language ever supported by the platform,...
clock.rar 这是我今天做的一个基于google app engine写的一个在该平台上开发app的示例,通过该示例的学习,我们可以很快上手学会怎样在GAE上开发属于你的应用程序了,希望对大家有用!
Google云端的一个重要部分,主要介绍了Google中App Engine的限制。
google app Engine for java中文api,
云应用开发——Google App Engine & Google Web Toolkit入门指南 Google App Engine入门 Google App Engine 开发人员指南
java后台代码传递json格式参数给app移动端demo(Android,IOS),可直接运行
云端代码Google App Engine编程指南 人民邮电出版社 高清带书签