Google app engine 在requesthandler类方法中而不是在函数中处理webapp2 404错误
我正在谷歌应用程序引擎(Python)中使用webapp2框架。在中,描述了如何处理函数中的404错误:Google app engine 在requesthandler类方法中而不是在函数中处理webapp2 404错误,google-app-engine,webapp2,Google App Engine,Webapp2,我正在谷歌应用程序引擎(Python)中使用webapp2框架。在中,描述了如何处理函数中的404错误: import logging import webapp2 def handle_404(request, response, exception): logging.exception(exception) response.write('Oops! I could swear this page was here!') response.set_status(4
import logging
import webapp2
def handle_404(request, response, exception):
logging.exception(exception)
response.write('Oops! I could swear this page was here!')
response.set_status(404)
def handle_500(request, response, exception):
logging.exception(exception)
response.write('A server error occurred!')
response.set_status(500)
app = webapp2.WSGIApplication([
webapp2.Route('/', handler='handlers.HomeHandler', name='home')
])
app.error_handlers[404] = handle_404
app.error_handlers[500] = handle_500
如何在该类的.get()
方法中处理webapp2.RequestHandler
类中的404错误
编辑:
class Webapp2HandlerAdapter(webapp2.BaseHandlerAdapter):
def __call__(self, request, response, exception):
request.route_args = {}
request.route_args['exception'] = exception
handler = self.handler(request, response)
return handler.get()
class Handle404(MyBaseHandler):
def get(self):
self.render(filename="404.html",
page_title="404",
exception=self.request.route_args['exception']
)
app = webapp2.WSGIApplication(urls, debug=True, config=config)
app.error_handlers[404] = Webapp2HandlerAdapter(Handle404)
我想调用RequestHandler
的原因是为了访问会话(request.session
)。否则,我无法将当前用户传递到404错误页面的模板。i、 e.在屏幕上,您可以看到您的用户名。我想在我的网站的404错误页面上显示当前用户的用户名。这在函数中是可能的还是必须是RequestHandler
根据@proppy的答案更正代码:
class Webapp2HandlerAdapter(webapp2.BaseHandlerAdapter):
def __call__(self, request, response, exception):
request.route_args = {}
request.route_args['exception'] = exception
handler = self.handler(request, response)
return handler.get()
class Handle404(MyBaseHandler):
def get(self):
self.render(filename="404.html",
page_title="404",
exception=self.request.route_args['exception']
)
app = webapp2.WSGIApplication(urls, debug=True, config=config)
app.error_handlers[404] = Webapp2HandlerAdapter(Handle404)
错误处理程序和请求处理程序可调用项的调用约定不同:
执行错误\u处理程序
(请求、响应、异常)
接受RequestHandler
(请求、响应)
webapp2.RequestHandler
改编为可调用的
class Webapp2HandlerAdapter(BaseHandlerAdapter):
"""An adapter to dispatch a ``webapp2.RequestHandler``.
The handler is constructed then ``dispatch()`` is called.
"""
def __call__(self, request, response):
handler = self.handler(request, response)
return handler.dispatch()
但是您必须在request
route_args
中隐藏额外的异常参数。您能否给出一个RequestHandler
类的示例,该类派生自webapp2handleAdapter
,并处理404错误,我的应用程序中的每个RequestHandler
都是从BaseRequestHandler
派生的。如果错误处理程序类是从这两个类(BaseRequestHandler
和webapp2handleAdapter
)派生的,那么您可以使用callable=webapp2handleAdapter(handlers.HomeHandler)
转换可调用文件中的处理程序。但是您需要调整Webapp2HandlerAdapter.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。根据你的回答,你可以在问题中看到我的代码。知道为什么会抛出异常吗?