ãPythonããã£ãšäœ¿ããããã«ãªãããããšããæ¹ã¯å€ãããšã ããããšã¯èšããåèæžããããèªãã ãšããŠããããã»ã©Pythonã®è ã¯äžãããªããããã°ã©ãã³ã°ãšããã®ã¯ãå®éã«èªåã§äœããäœã£ãŠã¿ãŠåããŠçè§£ãé²ããã®ãªã®ã ãããããæå³ã§ã¯ãä»åã®ãé¡ã®ãTODOã¢ããªãã¯ãæé©ã®é¡æã ãèªäœã®TODOã¢ããªãäœã£ãŠã¬ãã«ã¢ãããç®æããã
TODOã¢ããªãšã¯äœãïŒ
ä»ã§ã¯ãéåžžã«TODOã¢ããªã身è¿ã«ãªã£ãŠãããã¹ããŒããã©ã³ãªã©ã«ãTODOã¢ããªãã¡ã¢ã¢ããªãã€ã³ã¹ããŒã«ããŠããã°ããã€ã§ãã©ãã§ããªã¹ããæã¡éãã§èŠãããšãã§ããããã ãäŸãã°ãè²·ãç©ã«åºããšãã«ãè²·ãã¹ããã®ãTODOã¢ããªã«å ¥åããŠãããããããã°ãå®éã«ãåºã«ã€ããæã«ãããïŒäœãè²·ãã°è¯ãã£ãã®ã ããããšæ©ãããšã¯ãªããªãã
ãã¡ãããTODOã¢ããªã¯ãéèŠãé«ãã®ã§ãèªåã§äœããªããŠããã¢ããªã¹ãã¢ãèŠãã°ãããããã®TODOã¢ããªãèŠã€ããããšãã§ããããšã¯èšããTODOã¢ããªãèªäœãããªããPythonã®è ã磚ãããšãã§ããã®ã§ãè±åå¿è ãç®æããŠãèªäœã®TODOã¢ããªäœæã«ææŠããŠã¿ãããèªäœã¢ããªã§ããã°ãç¬èªæ©èœã远å ããããšãã§ããã®ã§ãèªåã®æ¥åã«ãŽã£ããã«ãªãããè²ãŠãŠããããšãã§ããã
åºæ¬çãªéçºæ¹éãç«ãŠãã
ãšã¯èšãããŒããããã¹ãŠãäœãã®ã¯ããªããªã倧å€ã ãããã§ãæ¬çš¿ã§ã¯äžçªç°¡åãªåºæ¬çãªæ©èœã®äœãæ¹ã玹ä»ãããæåã«TODOã¢ããªãã©ã®ãããªåœ¢æ ã§äœæããã®ãèããŠã¿ãããPythonã䜿ãã°ããã¹ã¯ãããã¢ããªããWebã¢ããªãåå玹ä»ããiOSäžã§åãPythonistaãªã©ãæ§ã ãªã¢ããªãäœãããšãã§ããããã®ãããã©ã®ãããªåœ¢æ ã§åãã®ãè¯ãã®ãèããããããããã®ã¡ãªããã»ãã¡ãªããã¯ä»¥äžã®éãã
ã»ãã¹ã¯ãããã¢ããª
ã»ã»ã¡ãªããïŒWin/Mac/Linuxã§åããæäœæ§ãè¯ã
ã»ã»ãã¡ãªããïŒã¹ããŒããã©ã³ã§ã¯åããªã
ã»Webã¢ããª
ã»ã»ã¡ãªããïŒWebãã©ãŠã¶ãããã°äœ¿ãã(PC/ã¹ããŒããã©ã³ã§åã)
ã»ã»ãã¡ãªããïŒWebãµãŒããŒãå¿
èŠ
ã»iOSã¢ã㪠- Pythonista
ã»ã»ã¡ãªããïŒiPhone/iPadã§åããæã¡éã¹ã
ã»ã»ãã¡ãªããïŒPCã§ã¯åããªãæ©èœããã
ä»åã¯ãããœã³ã³ã»ã¹ããŒããã©ã³ã§ãåãããããã«ãWebã¢ããªã«ããŠã¿ãããšæãã以åã43åç®ã§ç޹ä»ããããã«ãæ100åã®ã¬ã³ã¿ã«ãµãŒããŒãåããŠãããã§åããããšãç®æšã«ããŠã¿ããã
TODOãªã¹ãã®æ©èœãåæããã
ãŸãã¯ãå¿ èŠãªæ©èœãåæããŠã¿ããããããããªã¢ã€ããåºããšæãã®ã§ããšã«ããããæ°ãã§ãããã«ãæ°è»œã«é¢çœãã¢ã€ãã¢ãã©ãã©ãåºããŠãããã
- TODOãç»é²ãåé€ãããšããåºæ¬æ©èœ
- TODOãã¡ãŒã«ã§éç¥ããæ©èœ
- 宿çã«é²æã確èªããŠãããæ©èœ
- TODOãç»é²ããè€ããŠãããæ©èœ
- ç¹å®ã®æ¥ä»ãææ¥ã«ç¹°ãè¿ãTODOãèªåç»é²ããæ©èœ
ã¢ã€ãã¢ãåæããããäœããæ©èœãå®è£ ãããè¯ãã®ããåªå 床ãä»ããŠãããããã¹ãŠã®æ©èœãæåããå šéšå®è£ ããããšãããšã確å®ã«éäžã§ç Žç¶»ããããã®ãããæåã®æ®µéã¯ãå¿ èŠæäœéã®æ©èœã ãããããã§ããããå°ãçºå±çãªæ©èœãšããããã«ã段éçã«éçºããŠãããšè¯ãã
ããã§ãä»åã¯ãäžèšã®ã¢ã€ãã¢ããåºæ¬çãªä»¥äžã®äºã€ã ããéžã³åºããŠå®è£ ããããšã«ããã
- TODOãç»é²ãåé€ãããšããåºæ¬æ©èœ
- TODOãç»é²ããè€ããŠãããæ©èœ
äºã€ç®ã®ãè€ããããšèšãã®ã¯ãã¡ãã»ãŒãžãæžã蟌ãã æã«ããçŽ æŽãããïŒããšã¡ãã»ãŒãžã衚瀺ãããšããã ããªã®ã§å®è£ ã¯ç°¡åã ã
ããã°ã©ã ãäœãã
ããã§ã¯ãåºæ¬çãªTODOã®æ©èœãäœãããä»åã®ããã°ã©ã ã¯ãå°ãé·ãã®ã§ããã°ã©ã å šäœãããã¡ãã«ãã57åç®ã®ããã°ã©ã ãããããŠã³ããŒãããããè§£åãããšã以äžã®ãããªéå±€ã«ãªã£ãŠããã
.
âââ cgi-bin
â  âââ todo.py
âââ data.txt
âââ style.css
ããã°ã©ã ãå®è¡ããã«ã¯ãã³ãã³ãã©ã€ã³ãã以äžã®ã³ãã³ããå®è¡ããã以äžã®ã³ãã³ãã¯ãã«ã¬ã³ããã£ã¬ã¯ããªã§ç°¡æWebãµãŒããŒãèµ·åãããã®ã ã
python -m http.server --cgi
ãããããWebãã©ãŠã¶ã§ãhttp://localhost:8000/cgi-bin/todo.pyãã«ã¢ã¯ã»ã¹ãããããããšãTODOã¢ããªã衚瀺ãããã
ç»é¢äžçªäžã«ãããTODOã®ããã¹ãããã¯ã¹ã«ãã¡ã¢ãå ¥åããŠã远å ããã¿ã³ãæŒããšãTODOé ç®ã远å ãããããããŠãåé ç®ã®å é ã«ãããxãã®ãã¿ã³ãæŒããšãé ç®ãåé€ãããã
ããã°ã©ã ã®ãã€ã³ãã確èªããã
cgi-bin/todo.pyãä»åã®TODOã¢ããªã®ã¡ã€ã³ããã°ã©ã ã ããã®ãã¡ã€ã«ãããã¹ããšãã£ã¿ãªã©ã§éããŠããã°ã©ã ã確èªããŠã¿ããã以äžã¯ãããã°ã©ã ã®åºæ¬çãªåäœãè¡ãåŠçãæãåºãããã®ã ã
ãçç¥ã
# ãã£ãŒã«ãã®å€ãååŸãã --- (*1)
form = cgi.FieldStorage()
# ãã©ã¡ãŒã¿ã確èªããŠåŠçãåå² --- (*2)
def check_param():
m = get_form('m', 'show')
if m == "show":
mode_show() # --- é
ç®äžèЧã衚瀺
elif m == "add":
mode_add() # --- æ°èŠé
ç®ã远å
elif m == "rm":
mode_remove() # --- é
ç®ãåé€
else:
out_html("ãã©ã¡ãŒã¿ã®ééã")
ãçç¥ã
# ãã©ãŒã ã®å€ãååŸããŠè¿ã --- (*3)
def get_form(name, defvalue):
if name in form:
return form[name].value
return defvalue
# ã¡ã€ã³ --- (*4)
if __name__ == '__main__':
check_param()
æåã«ã(ïŒ1)ã®éšåã§WebãµãŒããŒã«éä¿¡ãããããŒã¿ãè§£æããŠãèŸæžåœ¢åŒã§ååŸã§ããããã«ããããããŠã(ïŒ4)ã®ã¡ã€ã³åŠçã®éšåã§ã(ïŒ2)ã®check_param颿°ãåŒã³åºããããã§ã¯ãURLãã©ã¡ãŒã¿ãmãã®å€ã«åºã¥ããŠãåçš®é¢æ°ãåŒã³åºãããã«ãããæåã«ããã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããæã«ã¯ãäœããã©ã¡ãŒã¿ãæå®ãããŠããªãã®ã§ããã®å Žåã«ã¯ãé ç®äžèЧã衚瀺ãããmode_showãåŒã³åºãã(ïŒ3)ã®éšåã§ã¯ãURLãã©ã¡ãŒã¿ã«å€ããããã©ããã確èªããŠããã©ã¡ãŒã¿ããå€ãåãåºããããããã©ã¡ãŒã¿ãèŠåœãããªããã°ãããã©ã«ãå€ãè¿ãããã«ããã
次ã«ãTODOé ç®äžèŠ§è¡šç€ºãšãæ°èŠè¿œå ã®ããã°ã©ã ã確èªããŠã¿ããã
# TODOã®äžèЧã衚瀺ãã --- (*5)
def mode_show():
items = load_items()
t = "<h1>è€ããTODO</h1><div id='items'>"
for no, it in enumerate(items):
k = "todo.py?m=rm&no="+str(no)
a = "<a href='" + k + "'>âïž</a> "
t += "<p>" + a + it + "</p>"
t += "<form><p class='frm'>TODO: "
t += input_tag('text', 'todo', '')
t += input_tag('hidden', 'm', 'add')
t += input_tag('submit', '', '远å ')
t += "</p></form></div>"
out_html(t)
# æ°èŠTODOã远å ãã --- (*6)
def mode_add():
todo = get_form('todo', '')
if todo == '':
out_html('远å ããããã¹ãããããŸãã')
return
items = load_items()
items.append(todo)
save_items(items)
s = "<div id='items'><p>æžã蟌ãŸããã<br/>"
s += "çŽ æŽãããïŒãã€ãé 匵ã£ãŠãŸããïŒ</p>"
s += "<a href='todo.py'>æ»ã</a></div>"
out_html(s)
ããã°ã©ã ã®(ïŒ5)ã®éšåã§ã¯ãTODOã®äžèЧã衚瀺ãã颿°mode_showãå®çŸ©ããŠãããããŒã¿ãã¡ã€ã«ãããé ç®äžèЧãèªã¿åºããåŸãforæ§æã§é 次é ç®ãHTMLãšããŠåºåããŠããããã®éãåé€ãã¿ã³ãæŒããæã«ãåé€ãå®è¡ããURLãäœæããŠãaèŠçŽ ã§å²ãããã«ããã
ãããŠã(ïŒ6)ã§ã¯æ°èŠTODOã远å ããmode_addãå®çŸ©ããŠããããã¡ã€ã«ããé ç®äžèЧãåãåºããŠãæ°èŠé ç®ã远å ããåŸãé ç®ãä¿åããããã®éãè€ãèšèã衚瀺ããããã«ããã
ãŸãšã
以äžãä»åã¯ãTODOã¢ããªã顿ã«ããŠãç°¡åãªWebã¢ããªã®äœãæ¹ã玹ä»ãããã¬ã³ã¿ã«ãµãŒããŒãªã©ã§ãCGIãšããŠããã°ã©ã ãåããéã«ã¯ãããã°ã©ã ã®äžè¡ç®ãPythonã®ã€ã³ã¹ããŒã«ãã¹ã«æžãæããã°è¯ãã
ä»åãTODOã远å ãããšãã«ãè€ãèšèã衚瀺ãããšããã®ãããã®ã¢ããªã®ãŠãªãšãªããšããã ãå®éãããŸãæå³ã¯ãªãã®ã ããã¡ãã»ãŒãžãäžã€å€ããã ãã§ãããªãªãžãã«æãåºãŠæ¥œãããã®ã ãã¢ã€ãã¢ãåºããŠãã©ãã©ãæ¹é ããŠããããšã§ãPythonããã°ã©ãã³ã°ã®è ãäžãã£ãŠãããã¬ãã«ã¢ãããç®èããŠããçãããææŠããŠã¿ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠããã

