blog.miguelgrinberg.com
ãã²ã«ã»ã°ãªã³ããŒã°
>>>次ã®ç« >>>
ãã®èšäºã¯ããã²ã«ã°ãªãŒã³ããŒã°ã®æç§æžã®æ°çã®ç¿»èš³ã§ãã 以åã®ç¿»èš³ã¯ããã®é¢é£æ§ãé·ã倱ããŸããã
èè
ã¯ã2018幎5æã«ãªãªãŒã¹ãå®äºããäºå®ã§ããç§ã¯ã翻蚳ã«ã€ããŠããã€ããã§ãã
åèãŸã§ã«ã以äžã¯ãã®ã·ãªãŒãºã®èšäºã®ãªã¹ãã§ãã
æ°ãããã¥ãŒããªã¢ã«ã¯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ãæŒãã ãã§ãµãŒããŒã忢ã§ããŸãã
ããã§ãšãããããŸããããªãã¯ãŠã§ãéçºè
ã«ãªãããã®æåã®å€§ããªäžæ©ãèžã¿åºããŸããïŒ
>>> 次ã®ç« >>>