【问题标题】:Please help me improve my routing请帮我改进我的路由
【发布时间】:2012-01-06 01:41:23
【问题描述】:

我的路由对我有用,但它是由很长时间构建的,并且由于框架已更新到 webapp2,所以我混合路由并且不知道哪种方式最好。你能帮我改进一下我应该做哪些路由以及如何做路由吗?是让框架让路由为处理程序设置默认值还是直接在处理程序上方设置路由更好?

app = webapp2.WSGIApplication([
    ('/', HomeHandler),
    ('/shop', FileUploadFormHandler),
    ('/mypage', MyPageHandler),
    webapp2.Route(r'/newpassword/', handler=NewPassword, name='newpassword'),
    webapp2.Route(r'/signup/', handler=Signup, name='signup'),
    webapp2.Route(r'/myorg/', handler=Myorg, name='signup'),
    webapp2.Route(r'/register/', handler=Register, name='register'),
  webapp2.Route(r'/education/objectives/index', handler=Objectives, name='objectives'),
    webapp2.Route(r'/newdistributor/', handler=NewDistributor, name='newdistributor'),
    webapp2.Route(r'/emaillogin/', handler=Emaillogin, name='emaillogin'),
   webapp2.Route(r'/paysonreceive/', handler=PaysonReceiveHandler, name='paysonreceivehandler'),
   webapp2.Route(r'/paysonhandler/', handler=PaysonHandler, name='paysonhandler'),
  webapp2.Route('/passwdreset/<token>', handler=PasswordReset, name='passwordreset'),
    ('/shop/articles', ShopHandler),
    ('/info', InfoHandler),
    ('/update', UpdateHandler),
    ('/support', SupportHandler),
    ('/events.*', EventHandler),
    ('/academy', AcademyHandler),
    ('/marketing.*', MarketingHandler),
    ('/dropbox', FileUploadFormHandler),
    ('/upload', FileUploadHandler),
    ('/user/register', UserRegisterHandler),
    ('/tracker', TrackerHandler),
    ('/generate_upload_url', GenerateUploadUrlHandler),
    ('/file/([0-9]+)', FileInfoHandler),
    ('/file/([0-9]+)/download', FileDownloadHandler),
    ('/file/([0-9]+)/success', AjaxSuccessHandler),
    ('/home', Home),
    ('/paypal', Home),
    ('/sell', Sell),
    ('/sell/(.*)/', Sell),
    ('/buy/(.*)/return/(.*)/(.*)/', BuyReturn),
    ('/buy/(.*)/cancel/(.*)/', BuyCancel),
    ('/buy/(.*)/', Buy),
    ('/image/(.*)/', PPImage),
    webapp2.Route(r'/login/', handler=NewLoginHandler, name='login'),
    webapp2.Route(r'/logout/', handler=NewLogoutHandler, name='logout'
                  ),
    webapp2.Route(r'/secure/', handler=SecureRequestHandler,
                  name='secure'),
    webapp2.Route(r'/create/', handler=CreateUserHandler,
                  name='create-user'),
    ], config=config)

所以当添加一个新的 URI 时,我必须同时添加到 app.yaml、路由和处理程序 clas 以及一个不理想的模板,因为这些地方太多了,无法添加东西来获得 WSGI 的响应。所以我想重新编写代码以使其使用更多默认值,例如,如果我添加一个 RequestHandler 类,那么它应该有一个默认路由,因为它已经有一个唯一的名称。框架能做到吗?

感谢您的任何回答或评论

【问题讨论】:

    标签: google-app-engine web-applications python-2.7 webapp2


    【解决方案1】:

    我认为创建默认路由不是一个好主意,但您应该能够创建它。例如:

    import pages1
    import pages2
    
    def route_generator(modules):
        urls = []
        for m in modules:
            for h in dir(m):
                handler = eval("%s.%s"%(m.__name__, h))
                if issubclass(handler, webapp.RequestHandler):                
                    urls.append(('/%s/'%(handler.__name__), handler))
    
        return urls
    
    # list all module contained your handler class.
    # and use a generator to generate the url mapping.
    app = webapp2.WSGIApplication(route_generator([pages1,pages2], config=config)        
    

    【讨论】:

      猜你喜欢
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2016-10-07
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多