【发布时间】:2012-05-09 18:41:02
【问题描述】:
当用户尝试访问他们无权访问的内容时,我正在尝试引发 401/403 状态。我使用了Webapp2 Exceptions 示例,它为 404/500“自然”事件生成正确的错误代码。比如去http://localhost:8080/nourl会生成正确的404,弄乱代码会生成500。但是当我使用下面的方法设置代码时,我使用self.error(XXX)我在控制台中看到了代码,但它没有出现在浏览器中。 EG 如果您将 self.error() 留空,它会生成正确的 500 代码。如果你使用 self.error(500) 控制台输出:
INFO 2012-05-09 18:25:29,549 dev_appserver.py:2891] "GET / HTTP/1.1" 500 -
但是浏览器是完全空白的。以下是展示此行为的示例应用程序。只需将 self.error() 行更改为所需的代码并运行。预期的结果是它会根据提供的代码生成对浏览器的正确响应,而不仅仅是在发生“自然”事件(例如 404)时。
main.py
import webapp2
import wsgiref.handlers
import logging
from google.appengine.api import users
class HomeHandler(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
self.response.out.write("Hi :1", user.nickname)
else:
self.error(401)
app = webapp2.WSGIApplication([
(r'/', HomeHandler),
], debug=True)
def handle_401(request, response, exception):
logging.exception(exception)
response.write("401 Error")
response.set_status(401)
def handle_403(request, response, exception):
logging.exception(exception)
response.write("403 Error")
response.set_status(403)
def handle_404(request, response, exception):
logging.exception(exception)
response.write("404 Error")
response.set_status(404)
def handle_500(request, response, exception):
logging.exception(exception)
response.write("500 Error")
response.set_status(500)
app.error_handlers[401] = handle_401
app.error_handlers[403] = handle_403
app.error_handlers[404] = handle_404
app.error_handlers[500] = handle_500
# Run the application
def main():
app.run()
app.yaml
application: 401test
version: 1
runtime: python27
api_version: 1
threadsafe: yes
libraries:
- name: webapp2
version: latest
handlers:
- url: /.*
script: main.app
【问题讨论】:
标签: google-app-engine http-status-codes webapp2