メガフラスコチュートリアル第1章:Hello World! (2018年版)

blog.miguelgrinberg.com







ミゲル・グリンバーグ






>>>次の章>>>







この記事は、ミゲルグリーンバーグの教科書の新版の翻訳です。 以前の翻訳は、その関連性を長く失いました。







著者は、2018年5月にリリースを完了する予定です。私は、翻訳についていくつもりです。







参考までに、以下はこのシリーズの記事のリストです。









新しいチュートリアルは2017年に作成され、最終的にはPythonバージョン3用に構成されているように見えます。互換性の問題は修正され、フォーカスは以前のバージョンの2012年のPython 2ではなくPython 3に変更されました。教科書。







残念ながら、変更されたのはPython 2または3だけではありません。 2012年には意味のあるいくつかのテクノロジーもありますが、現在は時代遅れです。 これらには以下が含まれます。









この5年間で変化したことの多くは、基本的にすべての章を確認する必要があることを意味し、それらのほとんどは非常に重要な変更を受けています。







ミゲル自身も、この5年間で専門的に成長したと信じており、この新しい経験により、この教科書にもっと価値をもたらすことができると考えています。 最初のチュートリアルがリリースされた後、彼は12を超える会議を開催し、多数のチュートリアルをリリースし、主要な出版社向けに非常に成功したFlask開発書を書き、いくつかの人気のあるオープンソースプロジェクトを作成しました。







さらに、ミゲルはテクニカルブロガーとしてさらに5年の経験があり、長年にわたってブログのコンテンツを作成し続けました。 この経験はすべて、彼が教科書にもたらす更新に反映されます。







Miguelのブログで詳細読む







ビデオ







ようこそ







PythonFlaskマイクロフレームワークを使用してWebアプリケーションを作成する方法を学習する旅に出かけようとしています。 上のビデオでは、このガイドの内容の概要を説明しています。 この最初の章では、Flaskプロジェクトの設定方法を学びます。 この章の最後で、コンピューター上でシンプルなFlask Webアプリケーションが実行されます!







注1:このコースの古いバージョンをお探しの場合は、こちらをご覧ください







注2:突然、このブログの私の(ミゲル)の仕事を支持して声を上げたい場合、または単に記事を1週間待つ忍耐がない場合、私(ミゲルグリーンバーグ)はこのガイドの完全版にパッケージ化された電子書籍またはビデオを提供します。 詳細については、 learn.miguelgrinberg.comをご覧ください







このチュートリアルで提供されるすべてのサンプルコードは、GitHubでホストされています。 GitHubからコードをダウンロードすると時間を節約できますが、少なくとも最初のいくつかの章では、自分でコードを入力することを強くお勧めします。 Flaskに慣れると、入力が面倒になった場合にGitHubから直接コードにアクセスできます。







各章の冒頭で、章の探索に役立つ3つのGitHubリンクを紹介します。 Browseは、将来の章で行われた変更を除き、読んでいる章への変更が収集される場所で、マイクロブログのGitHubリポジトリを開きます。 Zipは、アプリケーションと章の変更を含むzipアーカイブをダウンロードするためのリンクです。 Diff-これから読む章に加えられたすべての変更をグラフィカルに表示します。







この章のGitHubリンク: BrowseZipDiff







Pythonインストール



Pythonがコンピューターにインストールされていない場合 、インストールします。 ご使用のオペレーティングシステムにPythonパッケージがプリインストールされていない場合は、 公式のPython Webサイトからインストーラーをダウンロードできます。 WSLまたはCygwinでMicrosoft Windowsを使用する場合、WindowsのネイティブPythonバージョンは使用せず、Ubuntu(WSLを使用する場合)またはCygwinから取得する必要があるUnix互換バージョンを使用することに注意してください。







Pythonのインストールが機能していることを確認するには、ターミナルウィンドウを開いてpython3と入力するか、それが機能しない場合はpythonのみを入力します。 期待すべきことは次のとおりです。







$ python3 Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> _
      
      





または、cmd(Microsoft Windowsコマンドプロンプトウィンドウ)で:







 c:\cp>c:\python33\python Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
      
      





Pythonインタープリターはユーザー入力を待機しています。 将来の章では、この対話型プロンプトが役立つ理由を見つけるでしょう。 しかし今のところ、Pythonがシステムにインストールされていることを確認しました。 対話型プロンプトを終了するには、 exit()



と入力してEnterを押します。







LinuxおよびMac OS XのPythonバージョンでは、 Ctrl-D



押してインタープリターを終了することもできます。







Windowsでは、終了するキーボードショートカットはCtrl-Z



、次にEnterです。







Flaskをインストールする



次のステップはFlaskをインストールすることですが、これについて話す前に、Pythonパッケージのインストールに関連する最良の方法についてお話したいと思います。







Pythonでは、Flaskなどのパッケージは一般的なリポジトリで入手でき、そこからダウンロードしてインストールできます。 公式のPythonパッケージリポジトリはPyPIと呼ばれ、Pythonパッケージインデックス(「チーズショップ」とも呼ばれます)を意味します。 Pythonにはこの作業を行うpipというツールがあるため、PyPIからパッケージをインストールするのは非常に簡単です(Python 2.7では、 pip



Pythonに含まれておらず、個別にインストールする必要があります)。







パッケージをコンピューターにインストールするには、次のようにpipを使用します。







 $ pip install <package-name>
      
      





興味深いことに、このパッケージのインストール方法はほとんどの場合機能しません。 Pythonインタープリターがコンピューターのすべてのユーザーに対してグローバルにインストールされている場合、通常のユーザーアカウントには変更を加える許可が与えられない可能性が高いため、上記のコマンドを実行する唯一の方法は管理者として実行することです。 ただし、この複雑さはなくても、上記のようにパッケージをインストールすると何が起こるかを理解してください。 pip



ツールはPyPIからパッケージをダウンロードし、Pythonフォルダーに追加します。 これ以降、システム上にあるすべてのPythonスクリプトがこのパッケージにアクセスできるようになります。 起動時のFlaskの最新バージョンであったFlaskのバージョン0.11を使用してWebアプリケーションを終了したが、現在はバージョン0.12に置き換えられている状況を想像してください。 次に、バージョン0.12を使用する2番目のアプリケーションを実行しますが、インストールされているバージョン0.11を置き換えると、古いアプリケーションが破損する危険があります。 問題がありますか? 古いアプリケーションで使用されるFlask 0.11をインストールし、新しいアプリケーション用にFlask 0.12をインストールできると理想的です。







さまざまなアプリケーションに対してさまざまなバージョンのパッケージをサポートするという問題を解決するために、Pythonは仮想環境の概念を使用しています。 仮想環境は、Pythonインタープリターの完全なコピーです。 仮想環境にパッケージをインストールすると、システム全体のPythonインタープリターは影響を受けず、コピーのみが影響を受けます。 したがって、アプリケーションごとに任意のバージョンのパッケージを完全にインストールできるという決定は、アプリケーションごとに異なる仮想環境を使用することです。 仮想環境には、それを作成したユーザーが所有するという追加の利点があるため、管理者アカウントは必要ありません。







まず、プロジェクトが存在するディレクトリを作成します。 これがアプリケーションの名前であるため、このマイクロブログディレクトリに名前を付けます。







 $ mkdir microblog $ cd microblog
      
      





Python 3を使用している場合は、仮想環境のサポートが含まれているため、作成するために必要なことは次のとおりです。







 $ python3 -m venv venv
      
      





このコマンドを使用すると、Pythonはvenv



パッケージを実行し、 venv



という仮想環境を作成します。 コマンドの最初のvenv



はPython仮想環境のパッケージ名であり、2番目はこの特定の環境に使用する仮想環境の名前です。 これがvenv



にくいと思う場合は、2番目のvenv



仮想環境に割り当てる別の名前に置き換えることができます。 一般に、プロジェクトディレクトリにvenv



という仮想環境を作成するため、プロジェクトに接続するたびに、対応する仮想環境が見つかります。







一部のオペレーティングシステムでは、上記のコマンドでpython3



代わりにpython



を使用する必要があることに注意してください。 Python 2.xのリリースではpython



を使用し、3.xのリリースではpython3を使用するインストールもありますが、3.xのリリースでpython



を表示するインストールもあります。







コマンドの最後に、仮想環境ファイルが保存されているvenv



というディレクトリがあります。







3.4より古いバージョンのPython(リリース2.7を含む)を使用する場合、仮想環境はネイティブにサポートされません。 これらのバージョンのPythonでは、仮想環境を作成する前に、サードパーティのvirtualenvツールをダウンロードしてインストールする必要があります。 virtualenv



インストール後、次のコマンドを使用して仮想環境を作成できます。







 $ virtualenv venv
      
      





かそこら







 $ python virtualenv.py venv
      
      





翻訳者注: Pythonのいくつかのバージョンがインストールされています。 Python3.3を使用しています。 私の場合、次のような行を入力する必要がありました。







 C:\microblog>c:\Python33\python.exe c:\Python33\Lib\site-packages\virtualenv.py venv
      
      





受信したメッセージは、 pip



といくつかのパッケージがインストールされていることを示しています。







 Using base prefix 'c:\\Python33' New python executable in C:\microblog\venv\Scripts\python.exe Installing setuptools, pip, wheel...done.
      
      





作成に使用した方法に関係なく、仮想環境を作成しました。 次に、システムをアクティブにして、使用することをシステムに伝える必要があります。 新しい仮想環境をアクティブにするには、次のコマンドを使用します。







 $ source venv/bin/activate (venv) $ _
      
      





cmd(Microsoft Windowsコマンドプロンプトウィンドウ)を使用する場合、アクティベーションコマンドは少し異なります。







 $ venv\Scripts\activate (venv) $ _
      
      





仮想環境をアクティブにすると、ターミナルセッションの構成が変更され、その中に格納されているPythonインタープリターがpython



入るときに呼び出されるものになります。 さらに、アクティブ化された仮想環境の名前が端末要求に含まれます。 ターミナルセッションに加えられた変更は、このセッションでは一時的かつ非公開であるため、ターミナルウィンドウが閉じられても保存されません。 同時に複数のターミナルウィンドウを操作している場合、それぞれが異なる仮想環境を持っていることが明確にわかります。







仮想環境を作成してアクティブにしたので、Flaskを最終的にインストールできます。







 (venv) C:\microblog>pip install flask Collecting flask Using cached Flask-0.12.2-py2.py3-none-any.whl Requirement already satisfied: click>=2.0 in c:\python33\lib\site-packages (from flask) Requirement already satisfied: Werkzeug>=0.7 in c:\python33\lib\site-packages (from flask) Requirement already satisfied: Jinja2>=2.4 in c:\python33\lib\site-packages (from flask) Requirement already satisfied: itsdangerous>=0.21 in c:\python33\lib\site-packages (from flask) Requirement already satisfied: markupsafe in c:\python33\lib\site-packages (from Jinja2>=2.4->flask) Installing collected packages: flask Successfully installed flask-0.12.2 (venv) C:\microblog>
      
      





Flaskが仮想環境にインストールされていることを確認する場合は、Pythonインタープリターを実行してFlaskをインポートできます。







 (venv) C:\microblog>python Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import flask >>>
      
      





このインポートでエラーが表示されない場合Flask



Flask



インストールされて使用できる状態になっているので、おめでとうございます。







Flask Hello Worldアプリ



Flask Webサイトにアクセスすると、5行のコードを含む非常にシンプルなサンプルアプリケーションが表示されます。 この些細な例を繰り返す代わりに、大規模なアプリケーションを作成するための優れた基本構造を提供するもう少し複雑な例を示します。







アプリケーションはパッケージとして存在します。







翻訳者注:パッケージはモジュールのコレクションです。







Pythonでは、 __init__.py



ファイルを含むサブディレクトリはパッケージと見なされ、インポートできます。 パッケージをインポートすると、 __init__.py



実行され、パッケージが外部に提供する文字が決定されます。







app



をホストするapp



というパッケージを作成しましょう。 microblog



ディレクトリにいることを確認してから、次のコマンドを実行します。







 (venv) $ mkdir app
      
      





アプリケーションパッケージの__init__.py



には、次のコードが含まれます。







 from flask import Flask app = Flask(__name__) from app import routes
      
      





上記のスクリプトは、flaskパッケージからインポートされたFlaskクラスのインスタンスとしてアプリケーションオブジェクトを作成するだけです。 Flaskクラスに渡される__name__



変数は、使用されるモジュールの名前で指定される事前定義されたPython変数です。 Flaskは、 第2章で説明するテンプレートファイルなどの関連リソースをロードする必要がある場合、ここで渡されたモジュールの場所を開始点として使用します。 すべての実用的な目的のために、 __name__



渡す__name__



ほとんど常にフラスコが正しい方向に設定されます。 次に、アプリケーションはまだ存在しないroutes



モジュールをインポートします。







最初は混乱しているように見えるかもしれない1つの側面は、 appという2つのオブジェクトがあることです 。 アプリケーションパッケージは、アプリケーションディレクトリと__init__.py



スクリプトによって定義され、アプリケーションインポートのroutes



ステートメントで指定されます。 app変数は、 __init__.py



スクリプトでFlaskクラスのインスタンスとして定義され、アプリケーションパッケージの一部になります。







もう1つの機能は、 routes



モジュールが常に行われるように、スクリプトの上部ではなく下部にインポートされることです。 ボトムインポートは、ループインポートの回避策です。これは、Flaskアプリケーションを使用する場合の一般的な問題です。 routes



モジュールはこのスクリプトで定義されたアプリケーション変数をインポートする必要があることがわかります。したがって、相互インポートのいずれかを下部に配置することにより、2つのファイル間の相互リンクから生じるエラーを回避できます。







それでは、 routes



モジュールには何が含まれてroutes



ますか? routes



は、アプリケーションが実装するさまざまなURLです。 Flaskでは、アプリケーションルートハンドラーは、ビュー関数と呼ばれるPython関数として記述されます。 ブラウズ機能は1つ以上のルートURLにマップされるため、Flaskは、クライアントがこのURLを要求したときに従うロジックを認識しています。







app/routes.py



という新しいモジュールで記述する必要がある最初のビュー関数は次のとおりapp/routes.py









 from app import app @app.route('/') @app.route('/index') def index(): return "Hello, World!"
      
      





このビュー関数は実際には非常にシンプルで、グリーティングを文字列として返すだけです。 関数の上の2つの奇妙な@app.route



は、Python言語のユニークな機能であるデコレーターです。 デコレータは、それに続く関数を変更します。 デコレータの一般的なパターンは、デコレータを使用して特定のイベントのコールバックとして関数を登録することです。 この場合、 @app.route



デコレーターは、引数として指定されたURLと関数の間のリンクを作成します。 この例では、URL /



および/index



をこの関数に関連付ける2つのデコレーターがあります。 つまり、Webブラウザーがこれら2つのURLのいずれかを要求すると、Flaskはこの関数を呼び出し、戻り値をブラウザーに応答として返します。 これがまだ理にかなっていないように思われる場合は、このアプリケーションを起動するまで長くありません。







アプリケーションを完了するには、Flaskアプリケーションインスタンスを定義するトップレベルのPythonスクリプトを作成する必要があります。 このスクリプトをmicroblog.pyと呼び、アプリケーションインスタンスをインポートする1​​行として定義してみましょう。







 from app import app
      
      





2つのapp



オブジェクトを覚えていますか? ここでは、両方を1つの文で見ることができます。 Flaskアプリケーションインスタンスはapp



と呼ばれ、 アプリパッケージの一部です 。 app import appは、 アプリパッケージに含まれるアプリ変数をインポートします。 これがわかりにくい場合は、パッケージまたは変数を別の名前に変更できます。







すべてが正しく行われていることを確認するために、プロジェクト構造の図を以下に示します。







 microblog/ venv/ app/ __init__.py routes.py microblog.py
      
      





信じられないかもしれませんが、アプリケーションの最初のバージョンは完成です! 起動する前に、Flaskは環境変数FLASK_APP



設定してインポートする方法を指示する必要があります。







 (venv) $ export FLASK_APP=microblog.py
      
      





Microsoft Windowsを使用している場合は、上記のコマンドで「エクスポート」の代わりに「セット」コマンドを使用します。







ショックを受ける準備はできていますか? 次のコマンドを使用して、最初のWebアプリケーションを起動できます。







 (venv) $ flask run * Serving Flask app "microblog" * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
      
      





翻訳者注:エンコードエラーを受け取ったため、ショックを受けました。 3.6より古いバージョンのPythonを使用している場合は、驚くかもしれません。 タイプ:







 Syntax Error: (unicode error) 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte:
      
      





私の場合、コンピューター名に含まれるPCのキリル文字が原因です。 PKに置き換えられ、すべて機能しました。 ソケットモジュールのせいです







 (venv) C:\microblog>python Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from socket import gethostbyaddr >>> gethostbyaddr('127.0.0.1') ('Acer-PK', [], ['127.0.0.1']) >>>
      
      





本当にうまくいきました:







 (venv) C:\microblog>set FLASK_APP=microblog.py (venv) C:\microblog>flask run * Serving Flask app "microblog" * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
      
      











ロシア語で「Hello World!」と書く 調整する必要があります

routes.pyモジュール







# -*- coding: utf-8 -*-



を追加# -*- coding: utf-8 -*-









 # -*- coding: utf-8 -*- from app import app @app.route('/') @app.route('/index') def index(): return ", !"
      
      











サーバーでのプレイが終了したら、Ctrl-Cを押すだけでサーバーを停止できます。







おめでとうございます、あなたはウェブ開発者になるための最初の大きな一歩を踏み出しました!







>>> 次の章 >>>








All Articles