Bottleで404ページを強制的に表示したくて調べた時のメモです。
環境
- Windows10 x64
- Python 2.x
- Bottle 0.12.9
調べたこと
どうやって実装するのが良いのか調べたところ、stackoverflowでabort()
を使っている回答がありました。
python - Bottle.py error routing - Stack Overflow
回答では500ページでしたが、404ページでも使えそうでした。
ただ、公式ドキュメントのAPIリファレンスでabort()
に関する情報がなかったため、ソースコードを読んだところ、例外HTTPError
を発生させるためのショートカットでした。
bottle/bottle.py at 0.12.9 · bottlepy/bottle
次に、HTTPErrorを見ると、ステータスコードのデフォルトは500でしたが、引数として任意の値を渡せそうなため、404でもいけそうでした。
bottle/bottle.py at 0.12.9 · bottlepy/bottle
一方、Bottleのエラーをハンドリングする方法については、公式ドキュメントに記載がありました。
- HTTP ERRORS AND REDIRECTS | Tutorial — Bottle 0.13-dev documentation
- ERROR PAGES | Tutorial — Bottle 0.13-dev documentation
- exception HTTPError | API Reference — Bottle 0.13-dev documentation
実装
force404.py
# -*- coding:utf-8 -*- from bottle import route, run, abort, error @route("/") def top(): abort(404, "go to 404") return "Hello world!" @error(404) def error404(error): return "Not Found!" run(host="0.0.0.0", port=8080, debug=True, reloader=True)
と書いてpython force404.py
と実行し、ブラウザでアクセスしたところ、Not Found!
が表示されました。
ソースコード
GitHubに上げました。リポジトリのforce404.py
が今回のファイルです。
thinkAmi-sandbox/Bottle-sample: Bottle (python web framework) : sample codes