gpt4 book ai didi

google-app-engine - 在 requesthandler 类方法而不是函数中处理 webapp2 404 错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:38 24 4
gpt4 key购买 nike

我在 Google App Engine (Python) 中使用 webapp2 框架。在 webapp2 exception handling: exceptions in the WSGI app它描述了如何处理函数中的 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(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

如何在 webapp2.RequestHandler 类的 .get() 方法中处理该类的 404 错误?

编辑:

我想调用 RequestHandler 的原因是为了访问 session (request.session)。否则我无法将当前用户传递给 404 错误页面的模板。即在 StackOverflow 404 error page 上你可以看到你的用户名。我也想在我网站的 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)

最佳答案

错误处理程序和请求处理程序可调用项的调用约定不同:

  • error_handlers 接受(请求、响应、异常)
  • RequestHandler 接受(request, response)

您可以使用类似于 Webapp2HandlerAdapter 的内容使 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()

但是您必须在请求 route_args 中隐藏额外的异常参数。

关于google-app-engine - 在 requesthandler 类方法而不是函数中处理 webapp2 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com