Djangäžã«ãŒããããµã€ããäœæããå¿
èŠãããå ŽåããããŸãã ãããã¯ã³ã³ã»ãããã¹ããšã·ã³ãã«ãªããŒãžã§ãïŒãããžã§ã¯ãã§ããŸããŸãªåŒ·åãªããŒã«ã䜿çšããå Žåããããã䜿çšããŠååºãµã€ããäœæããæäœæ¥ããèªåãæãã®ã¯ãªãã§ããïŒïŒã
ã ãããç§ã¯ãããå°ãªãèœæžãïŒããšããã¢ãããŒã®äžã§ãããžã§ã¯ããå
¬éããŸãã æ¥ãã§ããããã°ããŠãã ããïŒã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ãããã³ãã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ããã«ãã¢ãŠããã€ã³ã¹ããŒã«ããŸãã