djangoの防止csrfクロスステーション***

2910 ワード

環境は前のdjango記事と同じです.
dajngoのWebサービスを開始するには、次の手順に従います.
]# cd py3/django-test1/test4
]# python manage.py runserver 192.168.255.70:8000

2つのビューを定義します.csrf 1はフォームをコミットし、csrf 2はコミットされたフォームを受信します.
]# vim bookshop/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import *

#csrf
def csrf1(request):
    return render(request, 'bookshop/csrf1.html')
def csrf2(request):
    uname = request.POST['usernmae']
    return HttpResponse(uname)

#     
#def index(request):
#    hero = HeroInfo.objects.get(pk=1) #    (pk)=1   
#    context = {'hero':hero}
#    return render(request,'bookshop/index.html',context)


#     , html     
def index(request):
    #list = HeroInfo.objects.all()
    list = HeroInfo.objects.filter(isDelete=False)
    context = {'list1':list}
    return render(request,'bookshop/index.html',context)
def show(request,id):
    context = {'id':id}
    return render(request,'bookshop/show.html',context)
#    
def index2(request):
    return render(request,'bookshop/index2.html')
def user1(request):
    context = {'username':'python-django'}
    return render(request, 'bookshop/user1.html', context)
def user2(request):
    return render(request, 'bookshop/user2.html')
#html  
def htmlTest(request):
    context = {'key1':'

html 

'}     return render(request, 'bookshop/htmlTest.html',context)

htmlテンプレートの定義:
]# vim templates/bookshop/csrf1.html
html>


    Title


     

urlルーティングの適用を追加するには、次の手順に従います.
]# vim bookshop/urls.py
from django.conf.urls import url
from .  import views
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(\d+)$', views.show, name='show'),
    url(r'^(\d+)/(\d+)$', views.show, name='show'),
    url(r'^index2$', views.index2, name='index2'),
    url(r'^user1', views.user1, name='user1'),
    url(r'^user2', views.user2, name='user2'),
    url(r'^htmlTest',views.htmlTest),
    url(r'^csrf1$',views.csrf1),
    url(r'^csrf2$',views.csrf2),
]

ブラウザへのアクセス:http://192.168.255.70:8000/csrf1
単語を入力し、コミットをクリックすると、htmlテンプレートファイルでcsrfオープン機能が使用されず、403が表示されます.
以下htmlテンプレートファイルでtemplates/bookshop/csrf 1.html csrf防止クロスステーション***を追加するには、formラベル間に{%csrf_token%}を追加します.
]# cat templates/bookshop/csrf1.html
html>


    Title


  {% csrf_token %}       

shift+F 5を使用して、強制的にリフレッシュした後、再度アクセスします.http://192.168.255.70:8000/csrf1
単語の入力、コミット:
正常に表示できます.
転載先:https://blog.51cto.com/linsj/2330953