週末文書

とりあえず、まぁ、週末です。

Flask Tutorialの冒頭"Application Setup"の例が動かないで弱った話

Python用軽量WebフレームワークであるFlaskのチュートリアルをやっています。

チュートリアルの一番最初の”Applicaton Setup”という章にHello, World的なアプリケーションを動かす例が載っているのですが、これが動かず、少々焦りました。

f:id:medihen:20210723152943p:plain
Flaskのアイコン

この例ではflaskrというチュートリアルディレクトリを作ったあと、その中にアプリケーションを定義して生成する__init__.pyというファイルを作ると書かれています。このファイルをパラメータにしてFlaskを起動して、ブラウザで http://127.0.0.1:5000/hello にアクセスすると、”Hello, World!”と表示される、というシンプルな例です。

ところが、書かれている通りに__iniit__.pyを作成してflaskを起動しても、404 Not Foundエラーが出て、Hello, Worldが表示されません。

どうしたものかと悩みましたが、ブラウザの挙動の挙動とコードが合っていないことに気づき解決できました。

__init__.pyの最後部、ブラウザのアクセスを受け付けてメッセージを表示する部分は、Flask TutorialのWebページでは下記のように記載されています。

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

この中の、

@app.route('/hello')

がアクセス先のURLを規定しており、このソースだと http://127.0.0.1:5000/hello になるわけです。

で、ブラウザ( Chrome, MacOS)で上記URLにアクセスすると……Chromeが勝手にURLを補完し、最後に’/’を追加して、接続先URLが http://127.0.0.1:5000/hello/ になっていました。

こういうときにどうすればいいか、まだよくわかっていないのですが、とりあず、

@app.route('/hello')

の’/hello’を’/hello/’に修正し、下記のコードに直したら無事にHello, Worldが表示されるようになりました。

    # a simple page that says hello
    @app.route('/hello/')
    def hello():
        return 'Hello, World!'

こういう、ブラウザの挙動で接続先URLが曖昧になるような場合、どのようにコードを書くのが正解なのでしょうか……