Categories

Links

我的第一篇在app engine上的blog

虽然粗糙,但都是自己一行一行 代码垒起来的,虽然代码也没有几行:), 我的数据是通过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

 

 

[2008-06-13 10:48:12.744533 | Author:jiangjianxiao ] [] 6 comments

Total 1 Display 1 of 1
Powered by Google App Engine