虽然粗糙,但都是自己一行一行 代码垒起来的,虽然代码也没有几行:), 我的数据是通过urllib post上来的,结果是没有作者字段。 app engine缺少一种通过email 获取user对象的方法。 为了将user字段补充完成。 我写了这样一个方法
@check_login def update_author(request): for blog in Blog.all(): blog.user=users.get_current_user() blog.put() return HttpResponse("Update author finish!")
结果如何,超时错误,然后换成这样
@check_login def update_author(request): user=users.get_current_user() for blog in Blog.all(): blog.user=user blog.put() return HttpResponse("Update author finish!")
pass
最近的blog都没有技术含量,呵呵 ,datastore没有一种批量更新的方法吗? 我现在没有发现,类似 update Blog set user=:1,倒是删除有针对集合的操作 ,另外,像这样的场合,使用事务处理应该会快些吧
这东西一开始用app engine自身的RequestHandler机制写的,我写了一个简单的mvc类来简化开发,记录在这里,备忘吧
main.py
application=webapp.WSGIApplication( [ ('/(?P<app>\w+?)/(?P<controller>\w+?)(?:/(?P<action>\w+?))?(?:/(?P<id>\d+?))?(?:\?\w*)?',contrib.mvc.DispatchRequestHandler)
class DispatchRequestHandler(webapp.RequestHandler): def __init__(self): super(DispatchRequestHandler,self).__init__() def dispatch(self,app,controller,action=None,id=None): module="%s.%s_controller" %(app.lower(),controller.lower()) m = __import__(module) for i in module.split(".")[1:]: m = getattr(m, i) path=os.path.dirname(m.__file__) Controller=getattr(m,"%sController" % controller.capitalize()) c=Controller(self,path) if action is None: action='index' func=getattr(c,action) if id is None: func() else: func(id) def get(self,app,controller,action=None,id=None): self.dispatch(app,controller,action,id) def post(self,app,controller,action=None,id=None): self.dispatch(app,controller,action,id)
Controller基类
class Controller(object): def __init__(self,handler,path):
self.handler=handler self.request=handler.request self.response=handler.response self.path=path self.flush=Flush() @property def method(self): return self.request.method def redirect(self,uri,t=False): self.handler.redirect(uri,t)
def error(self,code): self.response.set_status(code) self.response.clear()
def render_to_response(self,file,values=None): path=os.path.join(self.path,"templates",file)
self.response.out.write(template.render(path,values)) #new,GET请求,返回一个用于创建资源的表单 def new(self): pass #show,处理针对单个资源的GET请求 def show(self,id): pass #create,处理POST请求,并将创建一个新资源 def create(self): pass #edit,GET请求,返回一个用于更新资源的表单 def edit(self,id): pass #update,处理PUT请求,并更新指定的资源 def index(self): pass #update,处理PUT请求,并更新指定的资源 def update(self,id): pass #destroy,处理DELETE请求,销毁一个资源 def destroy(self,id): pass
|