ã ãããç§ã¯ãããå°ãªãèœæžãïŒããšããã¢ãããŒã®äžã§ãããžã§ã¯ããå ¬éããŸãã æ¥ãã§ããããã°ããŠãã ããïŒãDjangoã§ã®é«ééçºã®ã»ããã
ãããã¯2ã€ã®ãã¿ãŒã³ã§ãã
- ãããžã§ã¯ãã«å¿ èŠãªãã¹ãŠã®ããã±ãŒãžããã«ã¢ããããŠåéãããã«ãã¢ãŠãæ§æãã³ãã¬ãŒã
- ãããžã§ã¯ããã³ãã¬ãŒããã€ãŸããå¿ èŠãªãã¹ãŠã®ããŒã«ãå«ãèšå®ãããã³éçã»ããïŒHamlããã³Sassã®æ¢è£œãã¡ã€ã«ïŒ
èšçœ®
Djangoã§ãããžã§ã¯ããã¢ããããŒãããŠãããžã§ã¯ããäœæããã«ã¯ã次ã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
$ hg clone sshïŒ//hg@bitbucket.org/siberiano/fastdev-django my_new_project $ cd my_new_project $ rm .hg / hgrc $ python bootstrap.py --distribute $ãã«ãã¢ãŠããã
ïŒ BitBucketã®ãããžã§ã¯ãããŒãžã ïŒ
ãããžã§ã¯ãã®æ§æïŒ
ã¡ã€ã¯ãã¡ã€ã«
ã³ãã³ãã©ã€ã³ã¹ã¯ãªããã®ã»ããã®ä»£ããã«ããããžã§ã¯ãã§Makefileãäœæããã³ãã³ãã®äŸåé¢ä¿ãã³ã³ãã€ã«ããŸãããããšãã°ã å®è¡ã¯buildoutããã³bootstrapã®åŸã«ã®ã¿å®äºã§ããŸãã äœæãã次ã®ã«ãŒãã³æé ãè¿œå ããŸããã
- run-ãµãŒããŒã0.0.0.0:8000ã§èµ·åããŸã
- shell_plus-æ¡åŒµdjangoã³ãã³ãã©ã€ã³ãèµ·åããŸã
- make_messages-htmlããã³hamlãããã±ãŒã«ãã¡ã€ã«ãã³ã³ãã€ã«ããŸã
- ã³ã³ãã€ã«-翻蚳ãã³ã³ãã€ã«ããŸã
ãã«ãã¢ãŠã
zc.buildoutã¯ãZopeãããžã§ã¯ãã§éçºããããããžã§ã¯ããã©ã«ããŒãŸãã¯ãŠãŒã¶ãŒãã©ã«ããŒã§ã/ .buildoutãåéãããããžã§ã¯ãç°å¢ãè¿œå ããã±ãŒãžïŒãµã€ãããã±ãŒãžïŒããåé¢ããããã€ãã®ã¬ã·ããå®è¡ããïŒããšãã°ãã¹ã¯ãªãããã€ã³ã¹ããŒã«ããå¥ã®ãªã³ã¯ãè¿œå ããŸãïŒã
Buildoutã«ã¯ãæè»ãªèšå®ã·ã¹ãã ãšãããŸããŸãªã¹ã¯ãªããã®æ¢è£œã®ã³ã¬ã¯ã·ã§ã³ãäžè¬ã«ãäœæ¥ãããžã§ã¯ããçµã¿ç«ãŠãããã«äœ¿çšã§ããéçºæžã¿ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããããŸãã
è¿œå ã®ããã±ãŒãžãšpyflakeséçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããŠDjangaãã€ã³ã¹ããŒã«ããæãåçŽãªæ§æã®äŸã次ã«ç€ºããŸãã
[ãã«ãã¢ãŠã] ããŒã= ãžã£ã³ãŽ ãã€ãã¬ãŒã¯ [ãžã£ã³ãŽ] ã¬ã·ã=ãžã£ã³ãŽã¬ã·ã åµ= ipython django_extensions [ãã€ãã¬ãŒã¯] ã¬ã·ã= zc.recipe.egg ã¹ã¯ãªãã= pyflakes åµ=ãã€ãã¬ãŒã¯ ãšã³ããªãã€ã³ã= pyflakes = pkg_resourcesïŒrun_script åŒæ°= 'pyflakes'ã 'pyflakes'
Buildoutã¯ãç¹å¥ãªãµã€ãããdjangorecipeãšzc.recipe.eggã¬ã·ããããŠã³ããŒãããŠå®è¡ããŸãã
ç§ãã¡ã«ãšã£ãŠæãèå³æ·±ãã®ã¯djangorecipeã§ãã ãã®ã¬ã·ãã¯ãmanage.pyã¹ã¯ãªãããã©ããããŸãããã®ã¹ã¯ãªããã¯ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããè¿œå ããã±ãŒãžããéé¢ãããã«ãã¢ãŠãæ§æã§æå®ããããšãã°ã®ã¿ãæ¥ç¶ããŸãã
ãã®æ§æã¯ãããã€ãã®é çããç§ãã¡ãæããŸãïŒ
- ã©ããã§å¿ èŠãªåµã瀺ãããšãã§ãããããã¯äŸãã°ãã¹ãã£ã³ã°ãªã©ã®æ°ããã·ã¹ãã ã«èªåçã«ã€ã³ã¹ããŒã«ããã1ã€ã®ïŒïŒïŒã³ãã³ãã§
- ãã¹ãŠã®ã·ã¹ãã ãåãããŒãžã§ã³ã®åµãç£ãããšã確信ããããšãã§ããŸãïŒãããããã£ãšå€ãããåäœããããšãä¿èšŒãããŠããŸãïŒ
ãããžã§ã¯ãã®ã€ã³ã¹ããŒã«ã¯ã2ã€ã®ããŒã ã§è¡ãããŸãã
$ python bootstrap.py --distribute $ bin / buildout
ãããžã§ã¯ãã®æºåãã§ããŠãããéçºè åãã®DjangoãµãŒããŒããã§ã«èµ·åã§ããŸãã manage.py [ã³ãã³ã]ã®ä»£ããã«
$ bin / django runserver 0.0.0.0:8000
é»æ±
ãããã䟿å©ãªãããžã§ã¯ãã¢ã»ã³ããªã·ã¹ãã ã¯ãéçºã®å éã«å¿ èŠãªãã®ãšã¯ã»ã©é ããã®ã§ãã æ¥ãã§æžãããã³ãŒããå®è¡ããªãã§ãã ããã éçã¢ãã©ã€ã¶ãŒãã§ãã¯ãå®è¡ããŸãã å€ãã®ãšã©ãŒãããã«ãã£ãããããŸãã
$ bin / pyflakes my_new_script.py æªå®çŸ©å€æ°ïŒtest_stringã2è¡ç® å®çŸ©åã«äœ¿çšãããå€æ°ïŒanother_varã5è¡ç®
ïŒå®£èšãããŠããªã2ã€ã®å€æ°ãžã®ã¢ã¯ã»ã¹ãã¢ãã©ã€ã¶ãŒããªããã°ããµã€ãã2åèµ·åããŠãã°ã確èªããŸããïŒ
ã¢ãã©ã€ã¶ãŒã®åŸãããã°ã©ããŒã«ã¯ãããã¬ãŒãå¿ èŠã§ãã Pythonã«ã¯ãããããããŸãããããŒã ã§ãã§ãã¯ãããã®ã®äžã§æã䟿å©ãªã®ã¯PuDBã§ã ãããã¯ãããã¹ãã¢ãŒãã®Midnight Commanderã®ããã«æ©èœãã80幎代ã®å€ãè¯ãQBasicãŸãã¯Borlandã¡ãã£ã¢ã«äŒŒãã€ã³ã¿ã©ã¯ãã£ããªç°å¢ã§ãã

éå§ããã«ã¯ããããã°ãå¿ èŠãªå Žæã«ã³ãã³ããæ¿å ¥ããå¿ èŠããããŸãã
pudbãã€ã³ããŒãããŸãã pudb.set_traceïŒïŒ
ãããã¬ãŒå ã¯éåžžã«æ§æå¯èœïŒCtrl + PïŒã§ãããããIPythonã®ãããã°ã³ã³ãœãŒã«ã«ç§»åããããšãã§ããŸãã ããã¯åŒ·åãªPythonã³ã³ãœãŒã«ã§ãããå¯èœãªãã¹ãŠã®ãªãŒãã³ã³ããªãŒããšããããã°ã¢ãžã¥ãŒã«ãªã©ã®ã¢ã¯ã·ã§ã³ãèšé²ããŠç¹°ãè¿ããã¯ããåããŠããŸãã
ãã1ã€ã®éåžžã«äŸ¿å©ãªããŒã«ã¯ããããã°ããŒã«ããŒããŸãã¯Djangoãããã°ããŒã«ããŒã§ãã çºè¡ãããããŒãžã«çŽæ¥ãªã³ã¯ããããšã«ããããã¹ãŠã®ããŒãžæ§ç¯ãã©ã¡ãŒã¿ãŒããã¹ãŠã®ã³ã³ããã¹ãã®ãã³ãã¬ãŒããšå€æ°ã®ãªã¹ããå«ãããã«ããããŸãã ããŒãžããèœã¡ãªããããäœãééã£ããã®ã衚瀺ããå Žåãã³ãŒããç·šéããå¿ èŠã¯ãããŸãããã³ã³ããã¹ããèŠãã ãã§ãã
ããŒãžãã¯ã©ãã·ã¥ããå Žåã¯ã©ããªããŸããïŒ éåžžãäžæçãªãšã©ãŒãçºçããå Žåã次ã®ããšãè¡ãå¿ èŠããããŸãã
- ãšãã£ã¿ãŒã§ããã°ã©ã ãã¡ã€ã«ãéããpudbè¡ãæ¿å ¥ããŸã
- ãµãŒããŒãåèµ·åããã®ãåŸ ã¡ãŸãïŒååããããžã§ã¯ãã§ã¯æéããããå ŽåããããŸãïŒ
- ãã©ãŠã¶ãéããæŽæ°ãã¯ãªãã¯ããŸã
- ã³ã³ãœãŒã«ã«ç§»åããåæ¹èšå ¥ãéå§ããŸã
- ãšã©ãŒãèŠã€ãããããã¡ã€ã«ã«æ»ã£ãŠãããã°è¡ãåé€ããå¿ èŠããããŸã
5ã€ã®ã¢ã¯ã·ã§ã³ã®ä»£ããã«Werkzeugããããžã§ã¯ãã«ã€ã³ã¹ããŒã«ãããŠããå Žåããã®ã¢ããªã±ãŒã·ã§ã³ã¯æ»åŸã®ãããã°ã³ã³ãœãŒã«ããã©ãŠã¶ãŒãŠã£ã³ããŠã«çŽæ¥è¡šç€ºããããã1ã€ã®ããšãè¡ãå¿ èŠããããŸãã ããã«ãåŒã³åºãã¹ã¿ãã¯ã®ã©ã®ã¬ãã«ã§ãïŒ å€ãã®åé¡ã§ã¯ãããã§ååã§ãã
ã³ãŒããæ£åžžã«æ©èœããå Žåã¯ãèªã¿ãããããããã«ã³ãŒã ããŸãã
$ bin / pep8 my_new_script.py ãã€ã³ããŒã*ãã¯éåžžã«æªãã¹ã¿ã€ã«ã§ãã è¡2 2è¡ã®ç©ºçœè¡ãäºæ³ããã1è¡ç®ãèŠã€ãããŸããã5è¡ç®ã
HAMLãSassãOOCSS
ã³ãŒããæäœããå Žåãã»ãšãã©ã®å Žåãã³ãŒããèšè¿°ããã«èªã¿åããŸãã ãããã£ãŠãè¿ éã«èšè¿°ã§ããããŒã¯ã¢ããèšèªã§ã¯ãªããè¿ éã«èªã¿åãããšãã§ããIDEã§ã¯è¿ éã«èšè¿°ã§ããŸãããäœæ¥ãå€§å¹ ã«å éãããŸãã
HAMLã¯æ¬è³ªçã«XMLèšèªã§ãããæååãã解æ¶ãããŠãããéèŠãªã¿ãããããŸãã Djangoã§ããã°ã©ãã³ã°ããå ŽåãPythonãšãã®ã¿ããç¥ã£ãŠããŸãã ã¿ã°å±æ§ã¯JSONãšããŠèšè¿°ãããDjangoã¿ã°ããµããŒããããäžéšã¯èªåçã«éããããŸãïŒ
-åœéåå§çž®ãããŒã ïŒ html ïŒ é ïŒ ã¿ã€ãã« -ãããã¯ã¿ã€ãã« Djangoã®éçºé床 ïŒ äœ ïŒmenu.page.oldSchool -ãããã¯ã¡ãã¥ãŒ .line.title_bar .unit.size1of2 ïŒ a.site_logo {'href'ïŒ "/"} Djangoã§ã®é«ééçº .unit.size1of2.lastUnit -ãlanguage_selector.hamlããå«ãã #body -ãããã¯æ¬äœ
次ã®ããã¥ã¡ã³ãã«å€æãããŸãã
{ïŒ load i18n compressïŒ } <html> <head> <ã¿ã€ãã«> {ïŒ block titleïŒ } Djangoã®éçºé床 {ïŒ endblockïŒ } </ title> </ head> <æ¬äœ> <div id = "menu" class = "page oldSchool"> {ïŒ block menuïŒ } <div class = "line title_bar"> <div class = "unit size1of2"> <a class="site_logo" href="/"> Djangoã§ã®é«ééçº</a> </ div> <div class = "unit size1of2 lastUnit"> {ïŒ include 'language_selector.haml'ïŒ } </ div> </ div> {ïŒ endblockïŒ } </ div> <div id = "body"> {ïŒ block bodyïŒ } {ïŒ endblockïŒ } </ div> </ body> </ html>
éããããã¿ã°ãåå ã§ã¬ã€ã¢ãŠããäœåã°ãã°ãã«ãªããŸãããïŒ HAMLèšèªã«ã¯çµäºã¿ã°ã¯ãããŸããã ã¿ã°ã¯ãã¿ããåæ¢ããå Žæã§éããŸãã ãã®ãããªããã¥ã¡ã³ãã¯ããã¹ãã¬ãã«ãç·šéããã³è¿œå ãããããèªã¿ããããªããŸã-è¡æ°ã1.5åãæåæ°ã1/4å°ãªããªããŸãã æåã®æ倱ã¯å±æ§ã®JSONã®ã¿ã§ãããããã¯å€§ããªæ倱ã§ã¯ãããŸããã
ãã®ãããžã§ã¯ãã¯HamlPyã䜿çšããŸãããªã¹ããããããããã«ã HamlPy㯠ãHamlãååã§ãªãå Žåã«Djangoã¿ã°ãšãã¬ãŒã³HTMLããµããŒãããŸãã次ã«äŸã瀺ããŸãã
<option {ïŒ if option.selectedïŒ } selected {ïŒ endifïŒ }> {{option.value}} </ option>
åçã®Haml CSSã¯Sassã§ãã Sassãããžã§ã¯ãã¯ã2çš®é¡ã®ããŒã¯ã¢ããããµããŒãããŸããSCSSïŒäžæ¬åŒ§ä»ãã®CSSã®ã¢ããã°ïŒãšSASSïŒã¿ãä»ãã®HamlãšPythonã®ã¢ããã°ïŒã§ãã ç§ã¯åŸè ãããç°¡æœã«ããããšã奜ã¿ãŸãã Sassã®æ倧ã®å©ç¹ã¯ã* -linear-gradientãªã©ã®ãã¹ãŠã®ç¬èªã«ãŒã«ã1ã€ã®åŒã³åºãã«å§çž®ããããšã§ãã
@importããŒãã³ .action +ç·åœ¢åŸé ïŒäžãïŒ6db3f2 0ïŒ ãïŒ54a3ee 50ïŒ ãïŒ3690f0 51ïŒ ãïŒ1e69de 100ïŒ ïŒ
ãã¹ãŠã®ã°ã©ããŒã·ã§ã³å®è£ ïŒ-moz -...ã-o -...ã-webkit- ...ãªã©ïŒãå«ã倧ããªãªã¹ãã«å±éãããŸãã ããã§ã¯äŸãæããŸããããSassèšèªã¯ã«ãŒããšæ¡ä»¶ãããã¯@ if ... elseããµããŒãããŠãããšã ãèšããŸã ã åæ§ã®Less-CSSãããžã§ã¯ãããããå¿ èŠã«å¿ããŠdjango-compressorã«æ¥ç¶ããããšãã§ããŸãããã«ãŒããåŒæ°ã®åé 眮ãªã©ã®æäœã¯èš±å¯ãããŸããã
ã¹ã¿ã€ã«ã¯ãäºãã«å ¥ãåã«ããããšãã§ããŸãã
.class1 ãã©ã³ãã®å€ªãïŒå€ªå > .class2 ãã©ã³ãã¹ã¿ã€ã«ïŒæäœ
çµæïŒ
.class1 { ãã©ã³ãã®å€ªãïŒå€ªåã } .class1> .class2 { ãã©ã³ãã¹ã¿ã€ã«ïŒæäœã }
Object Oriented CSSã¯ã Nicole Sullivanã«ããçŽ æŽããããããžã§ã¯ãã§ãããã®ãããžã§ã¯ãã§ã¯ãã«ãã®ããã«æé·ããã«ãŒã«ãæå¶ããããã€ãã®åºæ¬çãªãã¯ããã¯ãçµã¿åãããŠäžè¬åããéåžžã«ã³ã³ãã¯ããªã¬ã€ã¢ãŠããåŸãŸããã OOCSSã«æ £ããŠããªãå Žåã¯ããããžã§ã¯ãã®Webãµã€ãã§åœŒå¥³ã®ã¹ããŒã ïŒè±èªïŒãšã³ãŒãäŸãåç §ããŠãã ããã
æã人æ°ã®ããã¯ãŒã¯ã以äžã«ç€ºããŸãã ããŒãã«ïŒHAMLããŒã¯ã¢ããå ïŒïŒ
.line .unit.size1of3å·Šã®å .unit.size1of3äžå€®ã®å .unit.size1of3.lastUnitå³å
ãã¡ãã£ã¢ãããã¯ããã€ãŸããå·ŠåŽã®ç»åãšå³åŽã®ç»åã®åšããæµããªãããã¹ãïŒ
.media ïŒ img.img {'src'ïŒ '{{message.author.picture.url}}'} / .bd = message.text
ãŸãã空çœã®ããŒãžãã³ãã¬ãŒããã³ã³ãã³ããããã¯ïŒããããŒãæ¬æãããã³ããŒã¹ãæã€é·æ¹åœ¢ïŒããããŸãã ç§ã®ãããžã§ã¯ãã§ã¯ãOOCSSã¯ãµããªããžããªãšããŠçµã¿èŸŒãŸããŠãããGitHubããå®æçã«æŽæ°ã§ããŸãã
è¿œå ãããã®
ãããŸã§ã®ãšããããããžã§ã¯ãã¯Mercurialãªããžããªã§ãããæ°ãããããžã§ã¯ãã¯ç§ã®ãªããžããªã«é¢é£ä»ããããŸãã hgrcãåé€ããããšããå§ãããŸãã ããããããã䟿å©ãªã€ã³ã¹ããŒã©ãŒãäœæããå¿ èŠããããŸãã ãã®æ¬ é¥ãä¿®æ£ããã«ã¯ããããžã§ã¯ãã®ã¯ããŒã³ãäœæããããŒãžãªã¯ãšã¹ããéä¿¡ããŸãã
è¿ãå°æ¥ïŒ
- JavaScriptã©ã€ãã©ãªãéçãã¡ã€ã«ã«è¿œå ããŸãïŒRequireJSãjQueryãããã³BackboneïŒããã³ãµããªããžããªã®åœ¢åŒïŒ
- ããŒã¿ããŒã¹ãæŽæ°ããããã£ã¯ã¹ãã£ããããŠã³ããŒãããRebuild Dbã¢ããªã±ãŒã·ã§ã³ãè¿œå ããŸããsyncdbã§ã¯ã§ããŸãã
- TemplateFlakesã¢ããªã±ãŒã·ã§ã³ããã³ãã¬ãŒãã®éçã¢ãã©ã€ã¶ãŒãããŒãæžã¿ã¿ã°ããã³äœ¿çšæžã¿ã¿ã°
- ãµã³ãã«ãã³ãã¬ãŒã
- è£éº ïŒèšäºã®å ¬éåã®å·çãã1é±éãbin / buildout webfactionã³ãã³ããè¿œå ãããŸãããããã«ãããWSGIã¹ã¯ãªãããã€ã³ã¹ããŒã«ããããããžã§ã¯ããåãååã®ãã¹ãã£ã³ã°ã§åäœããããã«ãªããŸãã
ã¬ãã¥ãŒã ãããžã§ã¯ãã®åå²ãããŒãžã®ãªã¯ãšã¹ãã®éä¿¡ãæè¿ããŸãã
è£éºïŒ BucketBitã§ããµãŒãããŒãã£ã®ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããããã®æ瀺ãè¿œå ããããã«æ±ããŸããã ç§ã¯çããŸãïŒãµãŒãããŒãã£ã®ã³ã³ããŒãã³ããæåã§ã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã SASSãPyflakesãããã³ãã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ããã«ãã¢ãŠããã€ã³ã¹ããŒã«ããŸãã