Effectivedjango.comããã®Djangoèšäºã®ç¿»èš³ã®ç¶ç¶ã ãã®ãã¬ãŒã ã¯ãŒã¯ãå匷ããŠãããšãã«ãã®ãµã€ãã«åºäŒããŸããã ãã®ãªãœãŒã¹ã«æçš¿ãããæ
å ±ã¯åœ¹ã«ç«ã€ããã«æããŸãããããã·ã¢èªãžã®ç¿»èš³ãã©ãã«ãèŠã€ãããªãã£ãããããã®åè¡ãèªåã§è¡ãããšã«ããŸããã ãã®äžé£ã®èšäºã¯ãDjangoãåŠç¿ããããã®æåã®ã¹ãããã®ã¿ãè¡ãWebéçºè
ã«ãšã£ãŠåœ¹ç«ã€ãšæããŸãã
ç®æ¬¡
- ã¯ããã«
- 广çãªDjangoã ã¬ã€ã
- Djangoã§ã®ãã¹ã
- ããã«ãŠã§ã¢ã«ã€ããŠ
- ããŒã¿ããŒã¹ãšã¢ãã«
- ã¯ã©ã¹ãã¥ãŒïŒCBVïŒ
- ãã©ãŒã
第3ç« ãã¬ãŒã³ããŒã·ã§ã³ã®äœæâ§
3.1ã ãã¬ãŒã³ããŒã·ã§ã³ã®åºæ¬
Djangoãã¥ãŒã¯
HTTPãªã¯ãšã¹ããåä¿¡
ãããŠãŒã¶ãŒã«
HTTPã¬ã¹ãã³ã¹ãè¿ããŸãã
åŒã³åºãããPythonãªããžã§ã¯ãã¯ãã¹ãŠãã¥ãŒã«ã§ããŸãã å¯äžã®
å³ããå¿
èŠãªèŠä»¶ã¯ãåŒã³åºãããPythonãªããžã§ã¯ãã
ãªã¯ãšã¹ããªããžã§ã¯ããæåã®åŒæ°ãšããŠåãå
¥ããå¿
èŠãããããšã§ãïŒéåžžããã®ãã©ã¡ãŒã¿ãŒã¯
request
ãšåŒã°ããŸãïŒã ããã¯ãæå°è¡šçŸãéåžžã«åçŽã§ããããšãæå³ããŸãã
from django.http import HttpResponse def hello_world(request): return HttpResponse("Hello, World")
ãã¡ãããä»ã®ã»ãšãã©ã®ãã¬ãŒã ã¯ãŒã¯ãšåæ§ã«ãDjangoã§ã¯URLãä»ããŠãã¥ãŒã«åŒæ°ãæž¡ãããšãã§ããŸãã ããã«ã€ããŠã¯ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããšãã«èª¬æããŸãã
3.2ã äžè¬ãã¥ãŒãšã¯ã©ã¹ãã¥ãŒ
- äžè¬çãªè¡šçŸã¯åžžã«ããã€ãã®åºæ¬çãªæ©èœãæäŸããŸãïŒãã³ãã¬ãŒãã®èŠèŠå ããªãã€ã¬ã¯ããäœæãã¢ãã«ã®ç·šéãªã©ã
- ããŒãžã§ã³1.3以éãäžè¬çãªè¡šçŸã®ããã«ãDjango ã¯ã¯ã©ã¹è¡šçŸ ïŒCBVïŒãå°å
¥ããŸãã ã
- äžè¬æŠå¿µãšCBVã¯ãããé«ãã¬ãã«ã®æœè±¡åãšæ§æå¯èœæ§ãæäŸããŸãã
- ããã«ãå€ãã®è€éããé ããŠãããããã§ãªããã°åå¿è
ãæ··ä¹±ãããå¯èœæ§ããããŸãã
- 幞ããªããšã«ãDjangoã®æ°ããããŒãžã§ã³ã§ã¯ãããããã¹ãŠã®ããã¥ã¡ã³ããããè¯ããªããŸããã
Django 1.3ã§ã¯ããã®ç« ã§çŠç¹ãåœãŠãã¯ã©ã¹ãã¥ãŒã玹ä»ããŠããŸãã ã¯ã©ã¹ãã¥ãŒããŸãã¯CBVã¯ããã¥ãŒãç¹ã«GETããã³POSTãªã¯ãšã¹ãã«å¯ŸããŠããŸããŸãªã¢ã¯ã·ã§ã³ãå®è¡ãããã®ãç·šéããããã®ãã¥ãŒãããå€ãã®å®åã³ãŒããåé€ã§ããŸãã ãã¬ãŒã³ããŒã·ã§ã³ã¯ã©ã¹ã䜿çšãããšãæ©èœãããŒãã«ãŸãšããããšãã§ããŸãã æ¬ ç¹ã¯ããã®ãã¹ãŠã®ãã¯ãŒãããã«è€éã«ãªãããšã§ãã
3.3ã ã¯ã©ã¹ãã¥ãŒïŒCBVïŒ
CBVãšããŠå®è£
ãããæå°ã®ãã¥ãŒã¯ã
View
docã¯ã©ã¹ã®ç¶æ¿è
ã§ããããµããŒããããŠããHTTPã¡ãœãããå®è£
ããŸãã 以äžã¯ããHelloãWorldãã®éåžžã«å°ããªè¡šçŸã§ããããã¯ä»¥åã«èšè¿°ããŸããããã¯ã©ã¹è¡šçŸãšããŠäœæããŸããã
from django.http import HttpResponse from django.views.generic import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse("Hello, World")
ã¯ã©ã¹ãã¥ãŒã§ã¯ãHTTPã¡ãœããåãã¯ã©ã¹ã¡ãœããã«ããããããŸãã ãã®äŸã§ã¯ã
get
classã¡ãœããã䜿çšããŠGETãªã¯ãšã¹ãã®ãã³ãã©ãŒãå®çŸ©ããŸããã 颿°ã«ãã£ãŠå®è£
ãããå Žåãšåæ§ã«ããã®ã¡ãœããã¯ãªã¯ãšã¹ããªããžã§ã¯ããæåã®ãã©ã¡ãŒã¿ãŒãšããŠåãåããHTTPã¬ã¹ãã³ã¹ãè¿ããŸãã
æ³šïŒ æå¹ãªçœ²å
å
ã»ã©æžãã衚çŸãç¹ã«*args
ãš**kwargs
æ¯ã¹ãŠã颿°ã·ã°ããã£ã«ããã€ãã®è¿œå ã®åŒæ°ããããŸãã CBVã¯ãDjangoã®ãäžè¬çãªããã¥ãŒãããæè»ã«ããããã«æåã«äœæãããŸããã ãããã¯ãURLããæœåºãããæœåšçã«ç°ãªãåŒæ°ã䜿çšããŠãããŸããŸãªç°ãªãã³ã³ããã¹ãã§äœ¿çšããããšãç®çãšããŠããŸããã éå»1幎éã¯ã©ã¹è¡šçŸãæžããŠããã®ã§ãæå¹ãªçœ²åã䜿çšããŠã¯ã©ã¹è¡šçŸãæžãç¶ããŠããŸãããã®ãã³ã«ãäºæããªãç¶æ³ã§åœ¹ç«ã€ããšãããããŸãã
3.4ã é£çµ¡å
ãªã¹ãã®è¡šç€º
ããŒã¿ããŒã¹ã®é£çµ¡å
ã®ãªã¹ãã衚瀺ãããã¥ãŒããå§ããŸãã
ãã¥ãŒã®åºæ¬çãªå®è£
ã¯éåžžã«çãã§ãã ã»ãã®æ°è¡ã§èšè¿°ã§ããŸãã ãããè¡ãã«ã¯ã
contacts
ã¢ããªã±ãŒã·ã§ã³ã®
views.py
ãã¡ã€ã«ã§ã次ã®ã³ãŒããå
¥åããŸãã
from django.views.generic import ListView from contacts.models import Contact class ListContactView(ListView): model = Contact
ListView
ãç¶æ¿ãã
ListView
docã¯ã©ã¹èªäœã¯ãããã€ãã®åäœãå®è£
ããããã€ãã®
äžçŽç©ã§æ§æãããŠããŸãã ããã«ãããå°éã®ã³ãŒãã§å€§ããªåãåŸãããŸãã ãã®äŸã§ã¯ãã¢ãã«ïŒ
model = Contact
ïŒãæå®ããŸãããããã«ããããã®ãã¥ãŒã¯ããŒã¿ããŒã¹ãã
Contact
ã¢ãã«ã®
ãã¹ãŠã®é£çµ¡å
ããªã¹ã
ããŸãã
3.5ã URLã®å®çŸ©
URLæ§æïŒURLconfïŒã¯ããªã¯ãšã¹ãã¢ãã¬ã¹ã§Pythonã³ãŒããèŠã€ããæ¹æ³ãDjangoã«æç€ºããŸãã Djangoã¯ã
urlpatterns
ãã¡ã€ã«ã®
urlpatterns
倿°ã§å®çŸ©ãããŠããURLæ§æã
urlpatterns
ãŸãã
addressbook/urls.py
ãã¡ã€ã«å
ã®é£çµ¡å
ã®ãªã¹ãã衚瀺ããURLãã³ãã¬ãŒãã
addressbook/urls.py
远å ããŸãããã
from django.conf.urls import patterns, include, url import contacts.views urlpatterns = patterns('', url(r'^$', contacts.views.ListContactView.as_view(), name='contacts-list',), )
url()
颿°ã䜿çšããããšã¯å³å¯ã«å¿
é ã§ã¯ãããŸãããã䜿çšããããšã奜ã¿ãŸããURLãã¿ãŒã³ã«ããã«æ
å ±ã远å ãå§ãããšãååä»ããã©ã¡ãŒã¿ãŒã䜿çšã§ããããã«ãªããã³ãŒãããããã«ãªããŸããurl()
åãå
¥ããããæåã®ãã©ã¡ãŒã¿ãŒã¯æ£èŠè¡šçŸã§ãã æ«å°Ÿã®$
æåã«æ³šæããŠãã ããã ãªããããéèŠã ãšæããŸããïŒ- 2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãåŒã³åºããããã¥ãŒã瀺ããŸãã ããã¯ãçŽæ¥åŒã³åºããããªããžã§ã¯ãïŒæåã§ã€ã³ããŒããããïŒãŸãã¯ãããèšè¿°ããè¡ã®ããããã§ãã ãããæååã®å ŽåãURLãã¿ãŒã³ãã¯ãšãªæååãšäžèŽãããšãDjangoã¯å¿
èŠãªã¢ãžã¥ãŒã«ãïŒæåŸã®ãã€ã³ããŸã§ïŒã€ã³ããŒãããè¡ã®æåŸã®ã»ã°ã¡ã³ãïŒæåŸã®ãã€ã³ãã®åŸïŒãåŒã³åºããŸãã
- ã¯ã©ã¹è¡šçŸã䜿çšãããšãã¯ããã®ãªããžã§ã¯ããèšè¿°ããè¡ã§ã¯ãªããå®éã®ãªããžã§ã¯ãã䜿çšããå¿
èŠãããããšã«æ³šæããŠãã ããã
as_view()
ã¯ã©ã¹ã¡ãœãããåŒã³åºãããããããè¡ãå¿
èŠããããŸãã ãã®ã¡ãœããã¯ãDjango URL ManagerãåŒã³åºãããšãã§ããã¯ã©ã¹ã®ã©ãããŒãè¿ããŸãã - URLãã¿ãŒã³ã«ä»ããããååã«ããã éæ€çŽ¢ãå¯èœã«ãªããŸãã
- 1ã€ã®å ŽæããURLã®æ§é ãå¶åŸ¡ã§ãããããURLåã¯ããããã¥ãŒããå¥ã®ãã¥ãŒã«ãªã³ã¯ãããšãããŸãã¯ãªãã€ã¬ã¯ããããšãã«åœ¹ç«ã¡ãŸãã
urlpatterns
倿°ãå®çŸ©
urlpatterns
ããããŸã
urlpatterns
ãDjangoã§ã¯ãäŸå€ã«å¯ŸããŠä»ã®ããã€ãã®å€ïŒ
倿° ïŒãå®çŸ©ããããšãã§ããŸãã ãããã®å€ã«ã¯
handler403
ã
handler404
ã
handler403
å«ãŸããHTTPãšã©ãŒã®å Žåã«äœ¿çšãããã¥ãŒãDjangoã«äŒããŸãã 詳现ã«ã€ããŠã¯ã
Djangoã®URLèšå®
ããã¥ã¡ã³ããåç
§ããŠãã ããã
泚ïŒã€ã³ããŒãURLæ§æãšã©ãŒ
Djangoã¯ãèµ·åæã«URLèšå®ãéåžžã«æ©ãããŒãããå
éšã«ããã¢ãžã¥ãŒã«ãã€ã³ããŒãããããšããŸãã ã€ã³ããŒãæäœã®å°ãªããšã1ã€ã倱æããå Žåããšã©ãŒã¡ãã»ãŒãžã¯å°ãçè§£ã§ããªãå ŽåããããŸãã ã€ã³ããŒããšã©ãŒãåå ã§ãããžã§ã¯ããã¯ã©ãã·ã¥ããå Žåã¯ãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã§URLæ§æãã€ã³ããŒãããŠã¿ãŠãã ããã ããã«ãããã»ãšãã©ã®å Žåãåé¡ãçºçããå Žæãç¹å®ã§ããŸãã
3.6ã ãã³ãã¬ãŒããäœæ
é£çµ¡å
ãªã¹ããã¥ãŒã®URLãå®çŸ©ããã®ã§ã詊ããŠã¿ãŸãããã Djangoã«ã¯ããããžã§ã¯ãã®ãã¹ãã«äœ¿çšã§ããéçºç®çã«é©ãããµãŒããŒãå«ãŸããŠããŸãã
(venv:tutorial)$ python ./manage.py runserver 0.0.0.0:8080 Validating models... 0 errors found November 04, 2014 - 15:25:05 Django version 1.6.7, using settings 'addressbook.settings' Starting development server at http:
ãã©ãŠã¶ã§
httpïŒ// localhostïŒ8080 /ã«ã¢ã¯ã»ã¹ããŠãã
TemplateDoesNotExists
ãšã©ãŒãçºçããŸã
翻蚳è
泚ïŒ
ãµãŒããŒãå®è¡ãããŠãããã¹ããšåããã¹ããããã©ãŠã¶ãèµ·åããå Žåã¯ã localhost
æå®ããŸãã ãµãŒããŒãå¥ã®ãã¹ãïŒç§ã®ãã®ãªã©ïŒã§å®è¡ãããŠããå Žålocalhost
代ããã«ãã®ãã¹ãã®IPã¢ãã¬ã¹ãæå®ããŸãïŒç§ã®å Žåã¯192.168.1.51
ïŒã
æãäžè¬çãªDjangoãã¥ãŒïŒããã«ã¯ç§ãã¡ã䜿çšãã
ListView
å«ãŸããŸãïŒã«ã¯ãäºåã«å®çŸ©ããããã³ãã¬ãŒãåããããŸãã ãã®ãšã©ãŒã¡ãã»ãŒãžã§ã¯ããã¥ãŒãã¢ãã«åããååŸãã
contact_list.html
ãšãããã³ãã¬ãŒããã¡ã€ã«ãèŠã€ããããšãæåŸ
ããŠããããšãããããŸãã ãã®ãããªãã³ãã¬ãŒããäœæããŸãããã
ããã©ã«ãã§ã¯ãDjangoã¯
settings.TEMPLATE_DIRS
æå®ããããã£ã¬ã¯ããªãšåæ§ã«ãã¢ããªã±ãŒã·ã§ã³ã§ãã¿ãŒã³ãæ€çŽ¢ã
settings.TEMPLATE_DIRS
ã äžè¬çãªãã¥ãŒã§ã¯ããã³ãã¬ãŒããã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªïŒãã®å Žåã
contacts
ãã£ã¬ã¯ããªïŒã«ããããšãæåŸ
ããããã¡ã€ã«åã«ã¯ã¢ãã«åïŒãã®å Žåãäºæ³ããããã¡ã€ã«åïŒ
contact_list.html
ïŒãå«ãŸããŸãã ããã¯ãåå©çšããã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«äŸ¿å©ã§ããã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã¯ãããã©ã«ãã®ãã³ãã¬ãŒãããªãŒããŒã©ã€ãããç¬èªã®ãã³ãã¬ãŒããäœæã§ããã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥é¢é£ä»ãããããã£ã¬ã¯ããªã«ä¿åãããŸãã
翻蚳è
泚ïŒ
Djangoã¯ããã³ãã¬ãŒãã_/templates/_/_
ã«ããããšãæåŸ
ããŠã_/templates/_/_
ãã ãããã®ç®çã®ããã«ããã£ã¬ã¯ããªæ§é ãã远å ã®ã¬ã€ã€ãŒãå¿
èŠãšããªãããããã¥ãŒã¯ã©ã¹ã®
template_name
ããããã£ã䜿çšããŠ
template_name
æç€ºçã«å®çŸ©ããŸãã
views.py
1è¡è¿œå ã
views.py
ã
from django.views.generic import ListView from contacts.models import Contact class ListContactView(ListView): model = Contact template_name = 'contact_list.html'
contacts
ãã£ã¬ã¯ããªïŒã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªïŒã«ãµããã£ã¬ã¯ããª
templates
ãäœæãããã®äžã«
contact_list.html
ãã³ãã¬ãŒããã¡ã€ã«ãäœæããŸãã
<h1>Contacts</h1> <ul> {% for contact in object_list %} <li class="contact">{{ contact }}</li> {% endfor %} </ul>
httpïŒ// localhostïŒ8080 /ã§ãã©ãŠã¶ãå床éãïŒãŸãã¯æŽæ°ããïŒãšã以åã«ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã§äœæããé£çµ¡å
ãå°ãªããšã1ã€è¡šç€ºãããŸãã

3.7ã é£çµ¡å
ãäœæãã
察話åã·ã§ã«ãä»ããŠããŒã¿ããŒã¹ã«æ
å ±ã远å ããã«ã¯æéãããããããããããã¥ãŒãäœæããŠæ°ããé£çµ¡å
ã远å ããŸãããã
é£çµ¡å
ãªã¹ãã®åºåãšåæ§ã«ãäžè¬çãªDjangoãã¥ãŒã®1ã€ã䜿çšããŸãã
views.py
ãã¡ã€ã«ã«ãããã€ãã®è¡ã远å ããŸãã
from django.core.urlresolvers import reverse from django.views.generic import ListView from django.views.generic import CreateView from contacts.models import Contact class ListContactView(ListView): model = Contact template_name = 'contact_list.html' class CreateContactView(CreateView): model = Contact template_name = 'edit_contact.html' def get_success_url(self): return reverse('contacts-list')
翻蚳è
泚ïŒ
DjangoããŒãžã§ã³> = 1.7ã䜿çšããŠããå Žåã CreateContactView
ã¯ã©ã¹ã«è¿œå ãã£ãŒã«ãã远å ã§ãCreateContactView
ã
fields = ['first_name', 'last_name', 'email']
ããã¯å¿
é ã§ã¯ãããŸããããDjangoããŒãžã§ã³1.7以éããã©ãŒã ã®èªåçæãè¡ãã¯ã©ã¹ã§ãã®ãã£ãŒã«ãã䜿çšããªãããšã¯æšå¥šãããŠããŸããïŒãã¹ãäžã«éç¥ãããŸãïŒã æå®ããªãå Žåããã¹ãŠã®ãã£ãŒã«ããç·šéãã©ãŒã ã§äœ¿çšãããŸããããã®åäœã¯Django 1.8ããåé€ãããŸãã
ãã©ãŒã ã§æ©èœããã»ãšãã©ã®äžè¬çãªãã¥ãŒã«ã¯ããé©åãªURLããšããæŠå¿µããããŸããããã¯ããã©ãŒã ãæ£åžžã«åŠçãããåŸã«ãŠãŒã¶ãŒããªãã€ã¬ã¯ããããURLã§ãã ãã©ãŒã ãåŠçãããã¹ãŠã®éä¿¡ã¯ã倿Žãåãå
¥ããããã®
POST-redirect-GETãã©ã¯ãã£ã¹ã«æºæ ããŠãããããæçµããŒãžãæŽæ°ããŠããã©ãŒã ã¯åéä¿¡ãããŸããã ãã®æŠå¿µãã¯ã©ã¹ã®ããããã£ãšããŠå®è£
ããããšãã
get_success_url()
ã¡ãœããããªãŒããŒã©ã€ãããããšãã§ããŸãã ãã®å Žåã
reverse
颿°ã䜿çšããŠé£çµ¡å
ãªã¹ãã®URLãèšç®ããŸãã
泚ïŒã¯ã©ã¹ãã¥ãŒã®ã³ã³ããã¹ã倿°
ãã³ãã¬ãŒãã衚瀺ããããšãã«ãã³ãã¬ãŒãã§äœ¿çšã§ãã倿°ã®ã»ããã¯ã ContextãšåŒã°ããŸãã ã³ã³ããã¹ãã¯ããã¥ãŒããã®ããŒã¿ãšã³ã³ããã¹ãããã»ããµããã®æ
å ±ã®çµã¿åããã§ã ã
çµã¿èŸŒã¿ã®äžè¬çãªãã¥ãŒã䜿çšããå Žåãã³ã³ããã¹ãã§äœ¿çšã§ãã倿°ã¯æç¢ºã§ã¯ãããŸããã æéãçµã€ã«ã€ããŠããããã®ååïŒãã³ãã¬ãŒãã³ã³ããã¹ãã®äžè¬çãªè¡šçŸã«ãã£ãŠæäŸãããïŒãããªãäžè²«ããŠããããšãobject_list
object
form
ã object
ãããã³object_list
ããã䜿çšãããŸãïŒã 幞ããªããšã«ãããã«é¢ããããã¥ã¡ã³ãã¯Django 1.5以ééåžžã«ãããã«ãªããŸããã
ã¯ã©ã¹get_context_data()
ã¡ãœããã䜿çšããŠã³ã³ããã¹ãã«æ
å ±ã远å ããŸãã ãã®ã¡ãœããããªãŒããŒããŒãããå Žåã¯ã **kwargs
ãæå¹ã«ããŠã¹ãŒããŒã¯ã©ã¹ãåŒã³åºãå¿
èŠããããŸãã
é£çµ¡å
ã®è¿œå ãã³ãã¬ãŒãã¯ãé£çµ¡å
ãªã¹ãã®ãã³ãã¬ãŒããããå°ãè€éã§ãããããŸãè€éã§ã¯ãããŸããã
contacts/templates/edit_contact.html
ã¯æ¬¡ã®ããã«ãªããŸãã
<h1>Add Contact</h1> <form action="{% url "contacts-new" %}" method="POST"> {% csrf_token %} <ul> {{ form.as_ul }} </ul> <input id="save_contact" type="submit" value="Save" /> </form> <a href="{% url "contacts-list" %}">back to list</a>
泚æãã¹ãããã€ãã®æ°ããéšåïŒ
- ã³ã³ããã¹ãããã®ãã©ãŒã ã¯ãã¢ãã«ã®Djangoãã©ãŒã ã§ãã ç¬èªã®ãã®ãæå®ããªãã£ããããDjangoãäœæããŸããã æããã
{{ form }}
ã{{ form }}
ã°ããã®å ŽåãããŒãã«ã®è¡ãååŸããŸãã ãã ãã .as_ul
ã远å ã.as_ul
ãããã«ãããå
¥åãã£ãŒã«ããé åºä»ããããŠããªããªã¹ãã®èŠçŽ ãšããŠè¡šç€ºãããŸãã .as_p
ã䜿çšããŠã¿ãŠãäœãèµ·ããããèŠãŠãã ããã- ãã©ãŒã ã衚瀺ãããšãïŒ äŸïŒèªåçæ ïŒããã£ãŒã«ãã®ã¿ã衚瀺ãããŸãããã¿ã°
/> , ;
ãã©ãŒã ããã¬ãŒãã³ã°ããªã />
, ;
ãã³ãã¬ãŒãã¿ã°{% csrf_token %}
ãDjangoããããžã§ã¯ãããã®ãªã¯ãšã¹ãã§ãããã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒ CSRF ïŒã§ã¯ãªããšå€æããããã®é ããã£ãŒã«ããæ¿å
¥ããŸãã ãã³ãã¬ãŒãã«å«ããªãããã«ããŠãã ãããããŒãžã«ã¯åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸããããã©ãŒã ãéä¿¡ããããšãããšãšã©ãŒãçºçããŸãã
url
ãã³ãã¬ãŒãã¿ã°ã䜿çšããŠãé£çµ¡å
ãªã¹ããžã®ãªã³ã¯ãçæããŸãã contacts-list
ã¯ãURLèšå®ã§æå®ãããã¥ãŒã®ååã§ããããšã«æ³šæããŠãã ããã å®å
šãªãã¹ã®ä»£ããã«url
ã䜿çšãããšããªã³ã¯åããå¿é
ããå¿
èŠããããŸããã ãã³ãã¬ãŒãurl
ã¯ãPythonã³ãŒãã®reverse
ãšåçã§ãã