Пожалуйста, помогите мне улучшить мою маршрутизацию - PullRequest
0 голосов
/ 06 января 2012

Моя маршрутизация работает на меня, но она построена с давних времен и с тех пор, как фреймворк был обновлен до 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, маршрутизация и класс обработчика, а также шаблон, который не идеален, так как это слишком много мест, чтобы добавить что-то, чтобы просто получить ответ от WSGI.Поэтому я хотел бы переработать код, чтобы он работал с большим количеством значений по умолчанию, например, если я добавлю класс RequestHandler, тогда у него должна быть маршрутизация по умолчанию, поскольку у него уже есть уникальное имя.Может ли фреймворк сделать это?

Спасибо за любой ответ или комментарий

1 Ответ

1 голос
/ 07 января 2012

Я не думаю, что создание маршрутизации по умолчанию - хорошая идея, но вы должны быть в состоянии создать ее.Например:

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)        
...