![ç»å](https://habrastorage.org/web/4d8/1e4/1a5/4d81e41a54c74ea18ba69d92abe6bc34.jpg)
å éšã¯Djangoã®ç¥äººã®æ¬ããã®æç²ã§ã
Djangoã®çŽ¹ä»
æè¿ã®Webãµã€ãã¯ãå®éã«ã¯å€æ©èœã¢ããªã±ãŒã·ã§ã³ã§ããããã¹ã¯ãããã·ã¹ãã çšã®æ¬æ Œçãªã¢ããªã±ãŒã·ã§ã³ã«ããªãè¿ããã®ã§ãã Pythonã«ã¯ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®è±å¯ãªããŒã«ã»ãããå«ãŸããŠããŸãã ãã®ç« ã§ã¯ã Djangoã䜿çšããŠãç¹å®ã®ãããã¯ã«é¢ããŠåãåã£ãæ å ±ã远跡ãããªã³ã©ã€ã³ãžã£ãŒãã«ã·ã¹ãã ã§ããLearning Logãããžã§ã¯ããæ§ç¯ããæ¹æ³ãåŠç¿ããŸãã
ãã®ãããžã§ã¯ãã®ä»æ§ãäœæããã¢ããªã±ãŒã·ã§ã³ã䜿çšããããŒã¿ã®ã¢ãã«ãå®çŸ©ããŸãã Django管çã·ã¹ãã ã䜿çšããŠããã€ãã®åæããŒã¿ãå ¥åããDjangoããµã€ãã®ããŒãžãäœæããéã«åºã¥ããŠãã¬ãŒã³ããŒã·ã§ã³ãšãã³ãã¬ãŒããäœæããæ¹æ³ãåŠç¿ããŸãã
Djangoã¯Webã€ã³ãã©ã¹ãã©ã¯ãã£ã§ãããã€ã³ã¿ã©ã¯ãã£ããªWebãµã€ããæ§ç¯ããããã®ããŒã«ã®ã»ããã§ãã Djangoã¯ããŒãžèŠæ±ã«å¿çã§ããããŒã¿ããŒã¹ããŠãŒã¶ãŒç®¡çãããã³ãã®ä»ã®å€ãã®æäœã«å¯Ÿããæ å ±ã®èªã¿åããšæžã蟌ã¿ãç°¡çŽ åããŸãã 第19ç« ãšç¬¬20ç« ã§ã¯ãåŠç¿ãã°ãããžã§ã¯ããæ¹è¯ãããµãŒããŒã«å±éããŠããŠãŒã¶ãŒïŒããã³å人ïŒã䜿çšã§ããããã«ããŸãã
ãããžã§ã¯ãäœæã®æºå
ãããžã§ã¯ãã®äœæ¥ã®éå§æã«ãä»æ§ã§ãããžã§ã¯ããèšè¿°ããå¿ èŠããããŸãã 次ã«ããããžã§ã¯ããæ§ç¯ããããã®ä»®æ³ç°å¢ãäœæããŸãã
ä»æ§æž
å®å šãªä»æ§ã§ã¯ããããžã§ã¯ãã®ç®çãæ©èœãå€èŠ³ããã³ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠèª¬æããŠããŸãã åªãããããžã§ã¯ããäºæ¥èšç»ãšåæ§ã«ãä»æ§ã¯æãéèŠãªåŽé¢ã«çŠç¹ãåœãŠããããžã§ã¯ãã®åæ»ãªéçºãä¿èšŒããå¿ èŠããããŸãã ããã§ã¯ãå®å šãªä»æ§ãèšè¿°ããŸããããéçºããã»ã¹ã®æ¹åãèšå®ããããã€ãã®æ確ãªç®æšãçå®ããŸãã ä»æ§ã¯æ¬¡ã®ããã«ãªããŸãã
Learning LogãšåŒã°ããWebã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããã䜿çšããŠããŠãŒã¶ãŒã¯é¢å¿ã®ãããããã¯ã®ãžã£ãŒãã«ãä¿æããåãããã¯ãåŠç¿ããªãããžã£ãŒãã«ã«ãšã³ããªãäœæã§ããŸãã åŠç¿ãã°ã®ããŒã ããŒãžã«ã¯ããµã€ãã®èª¬æãå«ãŸããŠããããŠãŒã¶ãŒã«è³æ Œæ å ±ã®ç»é²ãŸãã¯å ¥åãä¿ããŸãã ãã°ã€ã³ã«æåãããšããŠãŒã¶ãŒã¯æ°ãããããã¯ãäœæããããæ°ãããšã³ããªãè¿œå ããããæ¢åã®ãšã³ããªãèªãã ãç·šéãããã§ããŸãã
æ°ããè³æãå匷ãããšããåŠãã ããšããžã£ãŒãã«ã«ä¿åããŠãããšäŸ¿å©ã§ããèšé²ã¯ãå¿ èŠãªæ å ±ãç£èŠããŠè¿ãã®ã«åœ¹ç«ã¡ãŸãã é©åãªã¢ããªã±ãŒã·ã§ã³ã䜿çšãããšããã®ããã»ã¹ã®å¹çãåäžããŸãã
ä»®æ³ç°å¢ãäœæãã
Djangoã䜿çšããã«ã¯ããŸãäœæ¥çšã®ä»®æ³ç°å¢ãäœæããå¿ èŠããããŸãã ä»®æ³ç°å¢ãšã¯ãä»ã®ãã¹ãŠã®Pythonããã±ãŒãžããåé¢ããŠããã±ãŒãžãã€ã³ã¹ããŒã«ã§ããã·ã¹ãã ã®ãµãã»ã¯ã·ã§ã³ã§ãã ãããããžã§ã¯ãã®ã©ã€ãã©ãªãä»ã®ãããžã§ã¯ãããåé¢ããããšã¯ã第20ç« ã§ãµãŒããŒã«åŠç¿ãã°ãå±éããããšã§æ©æµãåããŸãã
learning_logãšããååã§ãããžã§ã¯ãã®æ°ãããã£ã¬ã¯ããªãäœæããã¿ãŒããã«ã¢ãŒãã§ãã®ãã£ã¬ã¯ããªã«ç§»åããŠãä»®æ³ç°å¢ãäœæããŸãã Python 3ã䜿çšããŠããå Žåã次ã®ã³ãã³ãã䜿çšããŠä»®æ³ç°å¢ãäœæã§ããŸãã
learning_log$ python -m venv ll_env learning_log$
ãã®ã³ãã³ãã¯venvã¢ãžã¥ãŒã«ãèµ·åããããã䜿çšããŠll_envãšããä»®æ³ç°å¢ãäœæããŸãã ãã®æ¹æ³ãæ©èœããå Žåã¯ããä»®æ³ç°å¢ã®æå¹åãã»ã¯ã·ã§ã³ã«é²ãã§ãã ããã 382.äœããæ©èœããªãå Žåã¯ã次ã®ã»ã¯ã·ã§ã³ãvirtualenvã®ã€ã³ã¹ããŒã«ãããèªã¿ãã ããã
virtualenvãã€ã³ã¹ããŒã«ãã
Pythonã®ä»¥åã®ããŒãžã§ã³ã䜿çšããŠããå ŽåããŸãã¯ã·ã¹ãã ãvenvã¢ãžã¥ãŒã«ãæ£ãã䜿çšããããã«æ§æãããŠããªãå Žåã¯ãvirtualenvããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã virtualenvã®ã€ã³ã¹ããŒã«ã¯ã次ã®ã³ãã³ãã§è¡ããŸãã
$ pip install --user virtualenv
ãã®ã³ãã³ããå°ãå€æŽããããŒãžã§ã³ã䜿çšããå¿ èŠãããå ŽåããããŸãã ïŒãŸã pipã䜿çšããŠããªãå Žåã¯ããpipã䜿çšããPythonããã±ãŒãžã®ã€ã³ã¹ããŒã«ãã»ã¯ã·ã§ã³ïŒ227ããŒãžïŒãåç §ããŠãã ãããïŒ
泚
Linuxã䜿çšããŠãããããã®æ¹æ³ãæ©èœããªãå Žåã¯ãã·ã¹ãã ã®ããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠvirtualenvãã€ã³ã¹ããŒã«ããŸãã ããšãã°ãUbuntuã§ã¯ãsudo apt-get install python-virtualenvã³ãã³ãã䜿çšããŠvirtualenvãã€ã³ã¹ããŒã«ããŸãã
端æ«ãŠã£ã³ããŠã®learning_logãã£ã¬ã¯ããªã«ç§»åãã次ã®ã³ãã³ãã§ä»®æ³ç°å¢ãäœæããŸãã
learning_log$ virtualenv ll_env New python executable in ll_env/bin/python Installing setuptools, pip...done. learning_log$
ã·ã¹ãã ã«è€æ°ã®ããŒãžã§ã³ã®Pythonãã€ã³ã¹ããŒã«ãããŠããå Žåãvirtualenvã䜿çšããããŒãžã§ã³ãæå®ããŸãã ããšãã°ãvirtualenv ll_envã³ãã³ã--python = python3ã¯ãPython 3ã䜿çšããä»®æ³ç°å¢ãäœæããŸãã
ä»®æ³åã¢ã¯ãã£ããŒã·ã§ã³
ä»®æ³ç°å¢ãäœæãããã次ã®ã³ãã³ãã§ã¢ã¯ãã£ãåããå¿ èŠããããŸãã
learning_log$ source ll_env/bin/activate (1) (ll_env)learning_log$
ãã®ã³ãã³ãã¯ãll_env / binãã£ã¬ã¯ããªãŒããã¢ã¯ãã£ãåã¹ã¯ãªãããå®è¡ããŸãã ç°å¢ãã¢ã¯ãã£ãã«ãªããšããã®ååãæ¬åŒ§ïŒ1ïŒã§è¡šç€ºãããŸãã ããã§ãç°å¢ã«ããã±ãŒãžãã€ã³ã¹ããŒã«ãã以åã«ã€ã³ã¹ããŒã«ããããã±ãŒãžã䜿çšã§ããŸãã ll_envã«ã€ã³ã¹ããŒã«ãããããã±ãŒãžã¯ãç°å¢ãã¢ã¯ãã£ããªéã®ã¿å©çšã§ããŸãã
泚
Windowsã·ã¹ãã ã§äœæ¥ããŠããå Žåã¯ãll_env \ Scripts \ activateã³ãã³ãïŒsourceãšããåèªãªãïŒã䜿çšããŠä»®æ³ç°å¢ãã¢ã¯ãã£ãã«ããŸãã
ä»®æ³ç°å¢ã®äœ¿çšãåæ¢ããã«ã¯ãdeactivateã³ãã³ããå ¥åããŸãã
(ll_env)learning_log$ deactivate learning_log$
ç°å¢ã¯ããããæ©èœããã¿ãŒããã«ãŠã£ã³ããŠãéãããšéã¢ã¯ãã£ãã«ãªããŸãã
Djangoã®ã€ã³ã¹ããŒã«
ä»®æ³ç°å¢ãäœæããŠã¢ã¯ãã£ãã«ããããDjangoãã€ã³ã¹ããŒã«ããŸãã
(ll_env)learning_log$ pip install Django Installing collected packages: Django Successfully installed Django Cleaning up... (ll_env)learning_log$
ä»®æ³ç°å¢ã§äœæ¥ããŠããããããã®ã³ãã³ãã¯ãã¹ãŠã®ã·ã¹ãã ã§åãããã«èŠããŸãã --userãã©ã°ã䜿çšããå¿ èŠããpython -m pip install package_nameã®ãããªé·ãã³ãã³ãã䜿çšããå¿ èŠããããŸããã
Djangoã§äœæ¥ã§ããã®ã¯ãç°å¢ãã¢ã¯ãã£ããªéã ãã§ããããšãå¿ããªãã§ãã ããã
Djangoã§ãããžã§ã¯ããäœæãã
ã¢ã¯ãã£ããªä»®æ³ç°å¢ãé¢ããããšãªãïŒll_envã¯æ¬åŒ§å ã«è¡šç€ºãããŸãïŒã次ã®ã³ãã³ããå ¥åããŠæ°ãããããžã§ã¯ããäœæããŸãã
(1) (ll_env)learning_log$ django-admin.py startproject learning_log . (2) (ll_env)learning_log$ ls learning_log ll_env manage.py (3) (ll_env)learning_log$ ls learning_log __init__.py settings.py urls.py wsgi.py
ããŒã ïŒ1ïŒã¯Djangoã«learning_logãšããæ°ãããããžã§ã¯ããäœæããããã«åœä»€ããŸãã ã³ãã³ãã®æåŸã®ãã€ã³ãã¯ãéçºãå®äºããåŸãã¢ããªã±ãŒã·ã§ã³ããµãŒããŒã«ç°¡åã«å±éã§ãããã£ã¬ã¯ããªæ§é ãæã€æ°ãããããžã§ã¯ããäœæããŸãã
泚
éèŠãªç¹ãå¿ããªãã§ãã ããããããªããšãã¢ããªã±ãŒã·ã§ã³ã®ãããã€æã«æ§æã®åé¡ãçºçããå¯èœæ§ããããŸãã ãŸã å¿ããŠããå Žåã¯ãäœæãããã¡ã€ã«ãšãã©ã«ããŒïŒll_envãé€ãïŒãåé€ããŠãã³ãã³ããå床å®è¡ããŠãã ããã
lsã³ãã³ãïŒWindowsã§ã¯dirïŒïŒ2ïŒã¯ãDjangoãlearning_logãšããæ°ãããã£ã¬ã¯ããªãäœæããããšã瀺ããŠããŸãã manage.pyãã¡ã€ã«ãäœæãããŸããããã¯ãã³ãã³ããåãåããããããå®è¡ã®ããã«Djangoã®é©åãªéšåã«æž¡ãçãããã°ã©ã ã§ãã ãããã®ã³ãã³ãã䜿çšããŠãããŒã¿ããŒã¹ã®æäœããµãŒããŒã®å®è¡ãªã©ã®ã¿ã¹ã¯ã管çããŸãã
learning_logãã£ã¬ã¯ããªã«ã¯4ã€ã®ãã¡ã€ã«ïŒ3ïŒãããããã®äžã§æãéèŠãªã®ã¯settings.pyãurls.pyãwsgi.pyãã¡ã€ã«ã§ãã settings.pyãã¡ã€ã«ã¯ãDjangoãã·ã¹ãã ãšå¯Ÿè©±ãããããžã§ã¯ãã管çããæ¹æ³ãå®çŸ©ããŸãã ãããžã§ã¯ãã®éçºäžã«ãæ¢åã®èšå®ã®äžéšãå€æŽããæ°ããèšå®ãè¿œå ããŸãã urls.pyãã¡ã€ã«ã¯ããã©ãŠã¶ã®ãªã¯ãšã¹ãã«å¿ããŠã©ã®ããŒãžãæ§ç¯ããããDjangoã«äŒããŸãã wsgi.pyãã¡ã€ã«ã¯ãDjangoãçæããããã¡ã€ã«ãæäŸããã®ã«åœ¹ç«ã¡ãŸãïŒãã¡ã€ã«åã¯ãWeb Server Gateway Interfaceãã®ç¥ã§ãïŒã
ããŒã¿ããŒã¹äœæ
(ll_env)learning_log$ python manage.py migrate (1)Operations to perform: Synchronize unmigrated apps: messages, staticfiles Apply all migrations: contenttypes, sessions, auth, admin ... Applying sessions.0001_initial... OK (2)(ll_env)learning_log$ ls db.sqlite3 learning_log ll_env manage.py
åããŒã¿ããŒã¹ã®å€æŽã¯ã移è¡ãšåŒã°ããŸãã migrateã³ãã³ããæåã«å®è¡ãããšãDjangoã¯ããŒã¿ããŒã¹ããããžã§ã¯ãã®çŸåšã®ç¶æ ãšäžèŽããããšã確èªããŸãã SQLiteã䜿çšããŠæ°ãããããžã§ã¯ãã§ãã®ã³ãã³ããæåã«å®è¡ãããšãïŒããã«SQLiteã«ã€ããŠè©³ãã説æããŸãïŒãDjangoã¯æ°ããããŒã¿ããŒã¹ãäœæããŸãã ãã€ã³ãïŒ1ïŒã§ãDjangoã¯ãããžã§ã¯ãã§äœ¿çšãããæ å ±ãä¿åããããã«å¿ èŠãªããŒã¿ããŒã¹ããŒãã«ã®äœæãçºè¡šãïŒç§»è¡ãããŠããªãã¢ããªãåæããïŒãããŒã¿ããŒã¹æ§é ãçŸåšã®ã³ãŒããšäžèŽããããšã確èªããŸãïŒãã¹ãŠã®ç§»è¡ãé©çšããŸãïŒã
lsã³ãã³ããå®è¡ãããšãDjangoãdb.sqlite3ïŒ2ïŒãšããå¥ã®ãã¡ã€ã«ãäœæããŠããããšãããããŸãã SQLite-åäžã®ãã¡ã€ã«ã§åäœããããŒã¿ããŒã¹ã ããŒã¿ããŒã¹ç®¡çãç¹ã«ç£èŠããå¿ èŠããªããããåçŽãªã¢ããªã±ãŒã·ã§ã³ã®äœæã«æé©ã§ãã
ãããžã§ã¯ããèŠã
ãããžã§ã¯ããæ£ããäœæãããããšã確èªããŠãã ããã runserverã³ãã³ããå ¥åããŸãã
(ll_env)learning_log$ python manage.py runserver Performing system checks... (1) System check identified no issues (0 silenced). July 15, 2015 - 06:23:51 (2) Django version 1.8.4, using settings 'learning_log.settings' (3) Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Djangoã¯ãµãŒããŒãèµ·åããŠãã·ã¹ãã äžã®ãããžã§ã¯ãã衚瀺ãããã®åäœã確èªã§ããããã«ããŸãã ãã©ãŠã¶ã«URLãå ¥åããŠããŒãžããªã¯ãšã¹ããããšãDjangoãµãŒããŒã¯ãªã¯ãšã¹ãã«å¿çããŸãã ãããè¡ãããã«ã圌ã¯å¯Ÿå¿ããããŒãžãäœæããããŒãžããã©ãŠã¶ã«éä¿¡ããŸãã
ãã€ã³ãïŒ1ïŒã§ãDjangoã¯äœæããããããžã§ã¯ããæ€èšŒããŸãã ãã€ã³ãïŒ2ïŒã§ãDjangoã®ããŒãžã§ã³ãšäœ¿çšãããŠããèšå®ãã¡ã€ã«ã®ååã衚瀺ãããŸãã ãã€ã³ãïŒ3ïŒã§ããããžã§ã¯ããå©çšå¯èœãªURLãè¿ãããŸãã URL 127.0.0.1ïŒ8000 /ã¯ããããžã§ã¯ããããŒã«ã«ãã¹ãïŒlocalhostïŒãã€ãŸãã³ã³ãã¥ãŒã¿ãŒã®ããŒã8000ââã§ãªã¯ãšã¹ãããªãã¹ã³ããããšãæå³ããŸãã ãããŒã«ã«ãã¹ãããšããçšèªã¯ãã·ã¹ãã ããã®èŠæ±ã®ã¿ãåŠçãããµãŒããŒãæããŸãã éçºäžã®ããŒãžãä»ã®äººãé²èŠ§ããããšã¯ã§ããŸããã
ãã©ãŠã¶ãéãã localhost ïŒ8000 /-ãŸãã¯127.0.0.1ïŒ8000 / URLãå ¥åããŸãïŒæåã®ã¢ãã¬ã¹ãæ©èœããªãå ŽåïŒã å³ã«äŒŒããã®ã衚瀺ãããŸãã 18.1ã¯ããããŸã§ãã¹ãŠãæ£åžžã«æ©èœããŠããããšãéç¥ããããã«DjangoãäœæããããŒãžã§ãã ãŸã ãµãŒããŒãã·ã£ããããŠã³ããªãã§ãã ããïŒãã ããäžæãããå Žåã¯ãCtrl + CãæŒããŠã·ã£ããããŠã³ã§ããŸãïŒã
泚
ãããŒãã¯ãã§ã«äœ¿çšãããŠããŸãããšãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããå Žåã¯ãDjangoã«å¥ã®ããŒãã䜿çšããããã«æ瀺ããŠãã ããã ãããè¡ãã«ã¯ãpython manage.py runserver 8001ã³ãã³ããå ¥åããéããŠããããŒããèŠã€ãããŸã§ããŒãçªå·ãæé ã«ç¹°ãè¿ããŸãã
»æ¬ã®è©³çŽ°ã«ã€ããŠã¯ãåºç瀟ã®ãŠã§ããµã€ããã芧ãã ãã
» ã³ã³ãã³ã
» æç²
ãã®ä»ã®é¢é£æžç±ïŒ
ããããã€ã¯Python
èè ïŒC. ReitzãTãSchlusserã ã¬ãã¥ãŒãžã®ãªã³ã¯ã
ã·ã³ãã«ãªPythonã ããã°ã©ãã³ã°ã®çŸä»£ã¹ã¿ã€ã«
èè ïŒB. Lyubanovich ã¬ãã¥ãŒãžã®ãªã³ã¯ã
ããŒã¿ãµã€ãšã³ã¹ãšããã°ããŒã¿ã®åºç€ã PythonãšããŒã¿ãµã€ãšã³ã¹
èè ïŒD.ã·ã¬ãã¹ãAããã€ã¹ãã³ãMãã¢ãªã ã¬ãã¥ãŒãžã®ãªã³ã¯ã
ããŒã«ãŒã®20ïŒ å²åŒã¯ãŒãã³-Python