66197
Pythonについて。

只今、『入門 Python3』を読んでPythonを学んでいます。  
OSはwindows10です。  
それでは質問です。

『9.2.4 Bottle』より。

まず、ポート番号9999というテストウェブサーバーを実行しました。  
そして、bottle1.pyというファイルに、  
以下のコードを保存しました。

```

    from bottle import route, run
    @route('/')
    def home() :
        return "It isn't fancy, but it's my home page"
    
    run(host = 'localhost', port = 9999)
    
```

これは、ブラウザで`http://localhost:9999`にアクセスしたときに、  
"It isn't fancy, but it's my home page"と表示させるものです。

そして、

```

    $ python bottle1.py
    
```

と入力し、このサーバースクリプトを実行した上で  
アクセスすると、ブラウザ上では表示されるようでした。

私はこれを実行せずにアクセスし、それでも表示されたので不思議に思いましたが、  
先に進めば分かるかもと思い、次のステップに進みました。

今度は、

```

    My <b>new</b> and <i>improved</i> home page!!!
    
```

という一行が書かれたhtmlファイルと、

```

    from bottle import route, run, static_file
    @route('/')
    def main() :
    return static_file('index.html', root = '.')
    run(host = 'localhost', port = 9999)
    
```

というコードが書かれたbottle2.pyという名前のファイルを作り、  
実行しました。

しかし、サーバーを再起動したりサーバースクリプトを実行したにも関わらず、  
表示されたのは  
It isn't fancy, but it's my home page  
でした。

  1. 最初にbottle1.pyを実行せずにサーバーにアクセスしたときに、なぜ、一見正しく表示することが出来たのでしょう？
  2. bottle2.pyを実行したのに、なぜ、『My new and improved home page!!!』が表示されないのでしょう？

長文でしたが、最後まで読んでいただきありがとうございました。
CC BY-SA 4.0
2020-05-01T17:38:40.080
66189
2020-05-02T05:30:28.730
2020-05-02T02:12:50.500
19110
39908
question
python bottle
Pythonのbottleモジュールについて
>   1. 最初にbottle1.pyを実行せずにサーバーにアクセスしたときに、なぜ、一見正しく表示することが出来たのでしょう？  
>  の回答です。
>

**過去最低１回は、ブラウザでhttp://localhost:9999にアクセスしたときのキャッシュが残っていた。(推測です)**

```

    python bottle1.py
    
```

を実行せずに、ブラウザで`http://localhost:9999`にアクセスしたときに、  
`"It isn't fancy, but it's my home page"`と表示されたのですね。

それまで１回も`python
bottle1.py`を実行せずに、この文言がブラウザに表示されることは考え難いので(偶然の一致が過ぎる)、おそらく１回は`python
bottle1.py`を実行したものと推測します。

となると、以下のケースが考えられます。  
1)過去実行した`python bottle1.py`が生きていた  
2)ブラウザのキャッシュに残っていた  
サーバの再起動でも表示されるとなると「ブラウザのキャッシュに残っていた」ことが有力です。

ChromeやLynxで試してみましたが現象を再現できませんでした。原因は別にあるかもしれません。

* * *

* * *

>   2. bottle2.pyを実行したのに、なぜ、『My new and improved home page!!!』が表示されないのでしょう？
>

**コードにエラーがあり、表示されない**

```

    from bottle import route, run, static_file
    @route('/')
    def main() :
    return static_file('index.html', root = '.')
    run(host = 'localhost', port = 9999)
    
```

を実行すると次のエラーが発生します。

```

      File "bottle2.py", line 4
        return static_file('index.html', root = '.')
        ^
    IndentationError: expected an indented block
    
    
```

こちらの環境で、インデントを正した`bottle2.py`を実行したところ、'index.html'の内容が表示されました。

```

    from bottle import route, run, static_file
    @route('/')
    def main() :
        return static_file('index.html', root = '.')
    run(host = 'localhost', port = 9999)
    
```
CC BY-SA 4.0
2020-05-02T05:30:28.730
66197
2020-05-02T05:30:28.730
35558
66189
answer