ミゲル・グリンバーグ
この記事は、ミゲルグリーンバーグの教科書の新版の翻訳です。 以前の翻訳は、その関連性を長く失いました。
著者は、2018年5月にリリースを完了する予定です。私は、翻訳についていくつもりです。
参考までに、以下はこのシリーズの記事のリストです。
- 第1章:Hello world! (この記事)
- 第2章:テンプレート
- 第3章:Webフォーム
- 第4章:データベース
- 第5章:ユーザーログイン
- 第6章:プロフィールページとアバター
- 第7章:エラー処理
- 第8章:サブスクライバー、連絡先、およびフレンド
- 第9章:ページネーション
- 第10章:メールサポート
- 第11章:再構成
- 第12章:日付と時刻
- 第13章:I18nおよびL10n
- 第14章:Ajax
- 第15章:アプリケーション構造の改善
- 第16章:全文検索
- 第17章:Linuxの展開
- 第18章:Herokuでの展開
- 第19章:Dockerコンテナーでの展開
- 第20章:JavaScriptマジック
- 第21章:ユーザー通知
- 第22章:バックグラウンドタスク
- 第23章:アプリケーションプログラミングインターフェイス(API)
新しいチュートリアルは2017年に作成され、最終的にはPythonバージョン3用に構成されているように見えます。互換性の問題は修正され、フォーカスは以前のバージョンの2012年のPython 2ではなくPython 3に変更されました。教科書。
残念ながら、変更されたのはPython 2または3だけではありません。 2012年には意味のあるいくつかのテクノロジーもありますが、現在は時代遅れです。 これらには以下が含まれます。
- OpenID認証メカニズム。これは多くのプロバイダーでサポートされなくなりました。
- データベース移行用のsqlalchemy-migrateパッケージは、コミュニティのサポートも失ったようです。 最近では、 SQLAlchemyよりもAlembicのほうが移行に適しています。
- Flaskコマンドラインインターフェイス(Flask Shell)。当時は存在していませんでしたが、現在は開発者にとって不可欠なツールです。
- Miguelがチュートリアルの作業を開始した時点で、 Flaskの設計図は新しすぎたため、この機能を使用しないことにしました。 2017年、Flaskでの使用には設計図が必須です。
- Webページのスタイリングとフォーマット用のBootstrap 2には、2つの主要バージョンがあります。 新しいBootstrapバージョンは、バージョン2と下位互換性がありません。
- Herokuサービスの変更(チュートリアルで説明されている展開手順)は古くなっています。
この5年間で変化したことの多くは、基本的にすべての章を確認する必要があることを意味し、それらのほとんどは非常に重要な変更を受けています。
ミゲル自身も、この5年間で専門的に成長したと信じており、この新しい経験により、この教科書にもっと価値をもたらすことができると考えています。 最初のチュートリアルがリリースされた後、彼は12を超える会議を開催し、多数のチュートリアルをリリースし、主要な出版社向けに非常に成功したFlask開発書を書き、いくつかの人気のあるオープンソースプロジェクトを作成しました。
さらに、ミゲルはテクニカルブロガーとしてさらに5年の経験があり、長年にわたってブログのコンテンツを作成し続けました。 この経験はすべて、彼が教科書にもたらす更新に反映されます。
Miguelのブログで詳細を読む
ようこそ
PythonとFlaskマイクロフレームワークを使用してWebアプリケーションを作成する方法を学習する旅に出かけようとしています。 上のビデオでは、このガイドの内容の概要を説明しています。 この最初の章では、Flaskプロジェクトの設定方法を学びます。 この章の最後で、コンピューター上でシンプルなFlask Webアプリケーションが実行されます!
注1:このコースの古いバージョンをお探しの場合は、こちらをご覧ください 。
注2:突然、このブログの私の(ミゲル)の仕事を支持して声を上げたい場合、または単に記事を1週間待つ忍耐がない場合、私(ミゲルグリーンバーグ)はこのガイドの完全版にパッケージ化された電子書籍またはビデオを提供します。 詳細については、 learn.miguelgrinberg.comをご覧ください 。
このチュートリアルで提供されるすべてのサンプルコードは、GitHubでホストされています。 GitHubからコードをダウンロードすると時間を節約できますが、少なくとも最初のいくつかの章では、自分でコードを入力することを強くお勧めします。 Flaskに慣れると、入力が面倒になった場合にGitHubから直接コードにアクセスできます。
各章の冒頭で、章の探索に役立つ3つのGitHubリンクを紹介します。 Browseは、将来の章で行われた変更を除き、読んでいる章への変更が収集される場所で、マイクロブログのGitHubリポジトリを開きます。 Zipは、アプリケーションと章の変更を含むzipアーカイブをダウンロードするためのリンクです。 Diff-これから読む章に加えられたすべての変更をグラフィカルに表示します。
この章のGitHubリンク: Browse 、 Zip 、 Diff 。
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を押すだけでサーバーを停止できます。
おめでとうございます、あなたはウェブ開発者になるための最初の大きな一歩を踏み出しました!