Ваш Basehandler мог бы просто реализовать get (), который проверяет особый случай и либо перенаправляет, либо вызывает self.view (), и каждый обработчик может реализовать view () (или как вы хотите это называть), а неget ().
На самом деле я не собираюсь писать класс для каждого из моих обработчиков или использовать наследование так явно, поэтому я бы рекомендовал использовать такие декораторы:
routes = []
def get (route):
def makeHandler (handle, *args, **kwargs):
class Handler (webapp.RequestHandler):
def get (self, *args, **kwargs):
shouldRedirectToCompleteProfile = # do your test
if shouldRedirectToCompleteProfile:
self.redirect('/special-case')
else:
handle(self, *args, **kwargs)
routes.append((route, Handler))
return Handler
return makeHandler
def post (route):
def makeHandler (handle, *args, **kwargs):
class Handler (webapp.RequestHandler):
def post (self, *args, **kwargs):
handle(self, *args, **kwargs)
routes.append((route, Handler))
return Handler
return makeHandler
@get('/')
def home (ctx):
# <...>
@get('/whatever/(.*)/(.*)')
def whatever (ctx, whatever0, whatever1):
# <...>
@post('/submit')
def submit (ctx):
# <...>
application = webapp.WSGIApplication(routes)