66294


Pythonについて。

只今、『入門 Python3』を読みながら、  
JupyterLabを使ってPythonを学んでいます。  
OSはwindows10です。

この業界は初心者です。  
言葉や言葉の使い方が正確ではないことがあります。  
質問文で気になったことがあれば、何なりとご指摘くださいませ。  
私はそれを揚げ足取りとは感じません。  
自身の成長のために必要なことだと思っています。

* * *

では、質問です。  
Bottleモジュールを使ったウェブサーバの実行について。  
まずは、以下のコードをご覧ください。  
『入門 Python3』に書かれていたコードです。

[code]

    from bottle import route, run, static_file
    
    @route('/')
    def home() :
        return static_file('index.html', root='.')
    
    @route('/echo/<thing>')
    def echo(thing) :
        return "Say hello to my little friend : %s!" % thing
    
    
    run(host='localhost', port=9999)
    
[/code]

そして、このプログラムを実行し、 `http://localhost:9999/echo/Mothra` にアクセスすると、

[code]

    Say hello to my little friend : Mothra
    
[/code]

と表示されます。

私はこれを実行するのにとても時間を費やしましたが、ようやく様々な回答者のおかげで解決できました。

* * *

次に、私はこのコードを自分で書けるようになりたいと思い、理解するためにコードを眺めていましたが、3つ、気になったことがあります。

1つ、 `@route('/')` の、『`/`』というのはホームページという意味になるらしいのですが、  
このホームページというのは、 `http://localhost:9999` のことでしょうか？

2つ、`return static_file("index.html",root=".")` より、 `static_file()` 関数は、
`index.html` というファイルを、カレントディレクトリ(同じフォルダ内)から探して返しているということでしょうか？

3つ、`Say hello to my little friend : Mothra` と表示させるのに、そもそも

[code]

    @route('/')
    def home() :
        return static_file('index.html', root='.')
    
[/code]

は必要なのでしょうか？

是非、回答をお願いいたします。


CC BY-SA 4.0
2020-05-04T09:30:23.870
66281
2020-05-04T21:57:21.203
2020-05-04T10:22:44.763
32986
39908
question
python bottle
Bottleモジュールの各関数の使い方について


> 1つ、 @route('/') の、『/』というのはホームページという意味になるらしいのですが、  
>  このホームページというのは、 <http://localhost:9999> のことでしょうか？

ホームページという表現が適切かはわかりませんが。。。

[code]

    @route('/')
    
[/code]

公式のマニュアルに記載が見つけられなかったので、ずれているかもですが、その理解で問題ないです。  
つまりhttp://<待ち受けホストのIPアドレス>:<待ち受けアドレス>/が呼ばれたときに、その関数を呼び出すという意味です。

> 2つ、return static_file("index.html",root=".") より、 static_file() 関数は、
> index.html というファイルを、カレントディレクトリ(同じフォルダ内)から探して返しているということでしょうか？

マニュアルに

> Be careful when specifying a relative root-path such as
> root='./static/files'. The working directory (./)  
>  and the project directory are not always the same.

とあるように、開発ディレクトリの「カレント」とサーバ動作時の「カレント」は異なる場合があります。つまり、サーバ起動時に「カレント」としたディレクトリから「相対パスで」静的なファイルを特定し返却することになります。

> は必要なのでしょうか？

以下の記載にあるように静的なhtmlを表示する場合に推奨されています。（Fileオブジェクトを返却することもできるようですね。)。Mimeタイプのハンドリングと403/404のケアをしてくれるようです。

> You can directly return file objects, but static_file() is the recommended
> way to serve static files. It automatically guesses a mime-type, adds a
> Last-Modified header, restricts paths to a root directory for security  
>  reasons and generates appropriate error responses (403 on permission
> errors, 404 on missing files).


CC BY-SA 4.0
2020-05-04T21:46:49.587
66294
2020-05-04T21:57:21.203
2020-05-04T21:57:21.203
10174
10174
66281
answer