pythonãšdjangoã«é¢ããããã€ãã®å°ããªã¡ã¢/ãã³ããèç©ãããŠããŸããããããã¯å¥ã
ã®ãããã¯ã«åŒãå¯ããããŠããªããããäžåºŠã«ãã¹ãŠãå
¬éããŸãã
ã«ããã®äžïŒ
- ãã¥ãŒã³ãŒããæ£ç¢ºã«2ååçŽåããæ¹æ³
- ã°ã©ããæãç°¡åãªæ¹æ³
- ã€ã¢ã³ã»ãããã³ã°ããã¯ãŒã«ïŒã
- 5åã§Djangoã§VKontakteã®ã¢ããªã±ãŒã·ã§ã³
- pymorphyã¯è¯ãã§ããïŒ
- pypiã§ã®ããã±ãŒãžã®ã¬ã€ã¢ãŠãã«é¢ããããã€ãã®ããã
- ãã³ã¬ãŒã¿ãšwith-contextãããŒãžã£ã®å
±éç¹ã¯äœã§ããïŒ
- ãžã£ã³ãŽãµã€ãã§æ¯æããåãå
¥ãã
- æå®ãããäœæã®Yandex.Mapã衚瀺ããŸã
DjangoïŒãã¥ãŒã³ãŒãã®ç°¡çŽ å
Djangoã®ããã¥ã¡ã³ããšãã¥ãŒããªã¢ã«ã¯éåžžã次ã®ãããªãã¥ãŒãäœæããŸãã
def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid():
ããã¯ããããæ£ããã§ã-人ãäœãèµ·ãã£ãŠããããããããç解ããããã«èª¬æããã ãããå®éã«ã¯ããã®ã³ãŒãã¯æ£ç¢ºã«2åçãæžãããŠããŸãã
def contact(request): form = ContactForm(request.POST or None) if form.is_valid():
ãããïŒ
- éãã€ã³ããã©ãŒã ã®å Žåãis_validã¯åžžã«Falseãè¿ããŸãã ãã®åŸã
ContactForm(request.POST or None)
ã³ãŒãContactForm(request.POST or None)
ãã©ã®ããã«æ©èœããããããã«ããããªãå Žåã¯ãæŒç¿ãšããŠç解ããŠããã€ã³ãããŸããã ããã¯ã·ã³ãã«ã§äŸ¿å©ãªã€ãã£ãªã ã§ãã - ãªãã€ã¬ã¯ãã«ã¯åžžã«
django.shortcuts.redirect
ã䜿çšããŸãã URLåãéã«ãããget_absolute_urlãåŒã³åºãããŸãã¯åã«URLããªãã€ã¬ã¯ããã -
render_to_response
代ããã«django.views.generic.simple.direct_to_template
ã䜿çšããŸãã ãããã¯ã»ãšãã©åãããšãdirect_to_template
ãŸããã direct_to_template
ã¯ã»ãšãã©ã®å Žådirect_to_template
å¿
èŠã§ããContextã®ä»£ããã«direct_to_template
䜿çšããŸãã direct_to_template
代ããã«ãdjango- direct_to_template
ã®render_toãã³ã¬ãŒã¿ãŒã䜿çšã§ããŸãããããã¯ãã§ã«å¥œã¿ã®åé¡ã§ãã
DjangoïŒã°ã©ãã£ãã¯ã¹ãæã
管çããã«ã«é¢ããèšäºã§
ã圌ã¯ã°ã©ãã£ãã¯ã¹ã«ã€ããŠè©±ãããš
ãçŽæããŸããããããã§ã圌ã®æã¯å±ãããããŸããããŸããã§ããã ã¯ãããããŠç¹å¥ãªããšã¯äœããããŸããããã¹ãŠãåçŽãããŠãæããã§ã-ã°ã©ãã¯ã°ãŒã°ã«ãã£ãŒããéããŠæãããŸãã ãã®å Žåãã©ã€ãã©ãªãªãã§å®è¡ã§ããŸãïŒ
ããã§å³ããã°ã©ããäœæã
ãŸã ïŒããã¯Googleã®åå
¬åŒããŒã«ã§ããapigoogleãã£ãŒãã®ãã«ããããªã³ã¯ããããŸãïŒã次ã«ãçµæã®è¡ããã³ãã¬ãŒãã«è²Œãä»ãããã¹ãå€ã®ä»£ããã«å€æ°ã眮ãæããŸãã
Googleãã£ãŒãã®éåžžã«èãã©ãããŒããããŸãïŒ
django-chart-tools æ¬è³ªã¯åãã§ããã°ã©ããèŠèŠçã«åéããŠå€æ°ã眮ãæããã«ã¯ãdjango-chart-toolsã䜿çšããã ãã§ããã®ãããªã°ã©ããç¶æããæ¹ã䟿å©ã§ãã
ããŒã¿ã®ãµã³ããªã³ã°ã¯ãã¿ã¹ã¯ã«å¿ããŠdjango ORMãä»ããŠããŸãã¯äŸ¿å®äž/é床ã®ããã«
django-qsstats-magicãä»ããŠ
ç°¡åã«å®è¡ã§ããŸãã
ãã®çµæïŒdjango-chart-toolsãšdjango-qsstats-magicã䜿çšïŒããŠãŒã¶ãŒã®æ¥æ¬¡ã°ã©ãã¯æ¬¡ã®ããã«è¡šç€ºã§ããŸãã
次ã«ãå€æ°ã®å€ãšãã£ãã·ã§ã³ããã³ãã¬ãŒãã«æž¡ããããã«ã°ã©ãã次ã®ããã«è¡šç€ºããŸãã
{% load chart_tags %} {% bar_chart values captions «580x100» %}
Googleãã£ãŒãã®ç»åAPIã§ã¯ããããæ°ã«å¶éã¯ãã
ãŸãã ã1æ¥ããã20äžä»¶ãè¶
ããããããè² è·ãåæ£ããå Žåã«ã®ã¿é£çµ¡ããããã«èŠæ±ããŸãã ãã®ããããã®ãããªã°ã©ãã¯ç®¡çããã«ã ãã§ãªã䜿çšã§ããŸãã
DjangoïŒãã¹ã
django-webtestã䜿çšããŠãã¹ããäœæããŸãã ç§ã¯ãã§ã«ãã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠ
æžããŸãããããããã1ã€ã®éåžžã«éèŠãªå€æŽãçºçããŸãããdjango-webtestãïŒæšæºã®dzhangovskyãã¹ãã¯ã©ã€ã¢ã³ãã®ããã«ïŒãã³ãã¬ãŒãã®ã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã GregorMÃŒlleggerã«æè¬ããŸãã ããã§ããã®ã¹ã¿ã€ã«ã§æžãããšãã§ããŸãïŒ
æšæºã®assertTemplateUsedãæ©èœããŸãã
django-webtestã¯ããã€ã«ã®çµ±åãããåªããŠããŸãã ãã³ãã¬ãŒãã®ã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ããããUnicodeãå®å
šã«ãµããŒããããããããšã¯ã§ããããã€ã«ã¯éçºãããŸããã
django-webtestã¯ãæšæºã®ãã¹ãã¯ã©ã€ã¢ã³ããããåªããŠããŸãã ã·ã³ãã«ãªAPIãæäŸããŸãïŒæšæºã®ãã¹ãã¯ã©ã€ã¢ã³ããä»ããŠããã©ã«ãå€ã§ãã©ãŒã ãéä¿¡ããŠã¿ãŠãã ããïŒã ãŸããæšæºã®ãã¹ãã¯ã©ã€ã¢ã³ãã§csrfããŒã¯ã³ïŒãŸãã¯éåžžã«
é»ãã«ãŒãïŒãååšããªãããšããã¹ãããããšã¯ã§ããŸããããdjango-webtestã§ã¯ããã¯ç°¡åã«ïŒããã«ã¯èªåçã«ïŒè¡ãããŸãã django-webtestã䜿çšïŒ
ããã§ã¯ãæ©èœãåãããããã¢ãããã¬ãŒããäœæããŸããdjango-webtestã«ã¯ã©ãã§ãç·è²ã®ãã§ãã¯ããŒã¯ãããããã€ã«ãšæšæºãã¹ãã¯ã©ã€ã¢ã³ãã«ã¯ãã¡ãã¡ã«èµ€ããã®ããããŸãã Ian Bickingã§ãããdjango-webtestã¯ãã¯ãŒã«ãã ãšèããŠããŸãã
DjangoïŒVkontakteçšã®ã¢ããªã±ãŒã·ã§ã³ã®äœæ
åçŽãªã ãã§ãªããéåžžã«åçŽã§ãã éåžžã®ãµã€ããšã®éãã¯ããŠãŒã¶ãŒã®ç»é²æ¹æ³ãšãã°ã€ã³æ¹æ³ã®ã¿ã§ãã django-registrationã®ä»£ããã«ãdjango-
vkontakte-iframeãèšå®ããã³æ§æããŸãã ããã§ããã¹ãŠã®èšªåè
ãç»é²ããã³æ¿èªãããdjangoãŠãŒã¶ãŒã«ãªããŸããããã以å€ã®å Žåã¯ãéåžžã®ãµã€ããéçºã§ããŸãã iframeãµã€ãºãããŒãžãµã€ãºã«åãããããã«jsã®äžè©±ãããªãéãã
Python / DjangoïŒãã·ã¢èªã§ã®äœæ¥
誰ãç¥ããªãã
pymorphyã¯ãã·ã¢èªãæ±ãããã®pythonã©ã€ãã©ãªã§ãã 圢æ
çŽ è§£æãšå€§ç ²ããã¹ãºã¡ãæã€ããšãã§ããŸãïŒããšãã°ãããŒã¹ããåèªãåŸæãããïŒãŸãã¯åçŽãªãã¬ãŒãºïŒdjangoãã³ãã¬ãŒãã«çŽæ¥å
¥åããããæ°ã«å¿ããŠæ£ãã圢åŒã«é
眮ããããã-åè§ã®ãã¹ãŠã®ããªã¢ã³ãã®æ瀺çãªãªã¹ããªã
pymorphyã¯ãã®ãŒã¯éèªã®
èšäºããæé·ããŸãã ç§ã¯èªãããã³ãŒãã¯æåã¯è¯ããªãã£ãããªããªã ããã¯pythonãšnlpïŒèªç¶èšèªåŠçïŒã®äž¡æ¹ã§ã®åããŠã®çµéšã§ããã ãããã圢æ
çŽ è§£æåšã¯æžãããŠããã1幎éæŸæ£ãããŸããã
ä»å¹Žã®åãã«ã圌ã¯pymorphyã®äœæ¥ãåéããããã«ãããã¹ãŠã®ãã®ãæžãçŽããŸããã ãããŠæ¥ã«ã¯ãDialogue 2010ã«ã³ãã¡ã¬ã³ã¹ã§åœ¢æ
çŽ è§£æã®ã競åããè¡ãããŸããã éåžžã«çå£ãª
人ãããã«åå ããçµæã¯ããã®èšèªåŠè
ã«ãã£ãŠãã§ãã¯ãããŸããã Morphologyãã©ãã¯ã®
pymorphyãæåãå°œãããŸããïŒããããããã€ãã³ã§æžãããè€åèªã䜿çšããŠäœæ¥ãå±éããããã§ãïŒã ãŸããpymorphyã¯ããã©ãã¯ã®è§£æããããŒãã£æè©ãã§éä¿¡ããå¯äžã®åå è
ã§ããã ããã¯æ¬åœã«äœã®æå³ããããŸããããçŽ æŽãããã§ãïŒ
PythonïŒpypiã§ããã±ãŒãžãã¬ã€ã¢ãŠãããããã®ããã€ãã®ããªãã¯
1. long_descriptionã®setup.pyã§ã¯ãReSTããŒã¯ã¢ããã䜿çšã§ããŸãã README.rstãã¡ã€ã«ãsetup.pyã®æšªã«é
眮ããŠãããæå®ããã ãã§äŸ¿å©ã§ã
long_description = open('README.rst').read()
ãã®åŸãpypiã®ãããžã§ã¯ãããŒãžã¯ããã«ãã«ãã衚瀺ããŸã-ã·ã³ãã«ã§äŸ¿å©ã§ã90ïŒ
ã®åå¥ã®ããã¥ã¡ã³ãã«é¢ãããã©ãã«ã®å¿
èŠæ§ãæé€ããŸãïŒå¥ã®ãã®ãããªçºèšããããŸã-ããã§ãããã±ãŒãžã«ããã²ãŒã·ã§ã³ãªã©ã®ããã¥ã¡ã³ããå¿
èŠãšæãããå ŽåïŒæ€èšãã䟡å€ããããŸã-ããã±ãŒãžãå€ãããŸããïŒïŒã
2. setup.pyã«ã¯ããŸãç¥ãããŠããªãããã¯ããããŸãã ããŒã¯ã¢ãããæå³ãããšããã«èŠããªãå ŽåããŸãã¯ã¿ã€ããã¹ãåé¡åãä¿®æ£ãããŠããå Žåããããã®ãšã©ãŒãä¿®æ£ããããã«æ°ãããªãªãŒã¹ãäœæããå¿
èŠã¯ãããŸãããåã«
./setup.py register
ãå®è¡ãããšããŒã¿ã
./setup.py register
ãŸãã
PythonïŒãã³ã¬ãŒã¿ãš
ãã³ã¬ãŒã¿ãšpythonã®withæŒç®åã¯ãåãããšã®ããã«ãã䜿çšãããŸããç¹å®ã®ã³ãŒãã®åãŸãã¯åŸã«è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã§ãã ãããŠããã¯ããã³ã¬ãŒã¿ãšããŠãããã³withçšã®ã³ã³ããã¹ããããŒãžã£ãšããŠäœ¿çšã§ãããã®ïŒããšãã°ã
gist.github.com/573536 ïŒãäœæã§ããããšãæå³ããŸãã
DjangoïŒãµã€ãã§æ¯æããåãå
¥ãã
ã©ã¡ãããšããã°ãdjango-robokassaãšdjango-assist-ruãä»ããŠãæ°å件ã®è³Œå
¥ãçç£ã§è¡ããã100äžã«ãŒãã«ãè¶
ããŸããã
誰ãäœã䜿çšãããããªã¹ãã«è¿œå ããŸãã
Python / DjangoïŒãµã€ãã«Yandex.Mapã衚瀺ãã
ãžãªã³ãŒãã£ã³ã°ãšãã£ãã·ã¥ãæ··ä¹±ãããªãããã«ã
yandex-mapsã¢ããªã±ãŒã·ã§ã³ã䜿çšã§ããŸãã
ãããŒãç§ãã¡ã¯ãã¹ãŠãä»®å®ããŸãã