前提ディレクトリ構造
今回は以下ディレクトリ構造を想定します。
(dev001)kitabat@clientX% tree work work ├── hello.py └── static ├── css │ └── default.css └── img └── city.jpg 3 directories, 3 files
hello.pyを実行するディレクトリ(/home/kitabat/dev001/work)が、'/' でアクセスされた際のディレクトリになります。
この状態で、http://192.168.56.103:8080/static/img/city.jpg にアクセスしても、、、エラーになるのです。もちろん、前述の通り、静的ファイルへのルーティングが無いからですね。
静的ファイルへのルーティングコード追加
こんな感じです。
from bottle import route, run, static_file @route('/') @route('/<hoge>') def hello(hoge="root"): return "Hello World!<br> path is " + hoge @route('/file/<filename:path>') def static(filename): return static_file(filename, root="/home/kitabat/dev001/work/static") run(host='0.0.0.0', port=8080, debug=True, reloader=True)
まず1行目。static_fileというbottleの機能を使うので読み込みます。3〜6行目は今までに書いた部分。8〜10行目が今回追記したルーティング用コードです。
8行目の file/<filename:path> について。< >は前回説明した通り、アクセスされたURLを以後の関数内で使うための書き方です。:pathはfilenameに、パスを含んで良い事を意味します。単純に<filename>だけだった場合、/file/img/city.jpg へのアクセスは上手く行かず404になります。filenameに格納される部分が "img/city.jpg" と、パスを含むからですね。
10行目でstatic_file()関数を使います。第1引数が静的ファイル名、第2引数が、root=サーバのローカルパスです。
では、http://192.168.56.103:8080/file/img/city.jpg にアクセスしてみると、、、
やった〜!
注意すべき点として、アクセスするURLと、サーバ側のローカルパスは一致させる必要が無いので、混乱しないように、くらいですかね。今回はあえて、アクセスURL側を "file"、実際のディレクトリ側を "staic" としておりました。
ではまた。
0 件のコメント:
コメントを投稿