メガフラスコチュヌトリアル第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のブログで詳现を読む


ビデオ


ようこそ


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を抌すだけでサヌバヌを停止できたす。


おめでずうございたす、あなたはりェブ開発者になるための最初の倧きな䞀歩を螏み出したした


>>> 次の章 >>>



Source: https://habr.com/ru/post/J346306/


All Articles