2011-11-13 2 views
2

궁금한 점이 있습니다. 장고에서 csrf 보호의 두 가지 방법이 있습니다. {% csrf_token %}은 템플릿이고 @csrf_protect은보기입니다.Django {% csrf_token %} 또는 @csrf_protect

그래서 질문은 : 교환 할 수 있습니까? 내 말은 내가 예를 들어 @csrf_protect 내 그림을 {% csrf_token %} 태그없이 사용할 수 있다는 뜻이고 효과는 동일할까요?

내가 최근 장고 프로젝트에 마코를 사용하여 이러한 태그 {% csrf_token %}으로이 없기 때문에 내가 그 부탁 해요 ...

감사합니다!

+0

1. 템플릿에'{% csrf_token %} '가 있어야합니다. 2. 뷰는'@ csrf_protect' 또는'CSRF middleware'에 의해 보호되어야합니다. 다른 템플릿 엔진 또는 AJAX를 사용하는 경우 템플릿 컨텍스트에서 csrf 토큰을 제공해야합니다. 방법을 읽어보십시오 : https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#other-template-engines – Medorator

답변

2

둘 다 필요합니다. {% csrf_token %}POST 요청에 포함 된 숨김 필드를 추가합니다. @csrf_protect{% csrf_token %}에서 사용하는 컨텍스트 변수를 추가합니다.

+2

설명서 : 1) 또는 특정보기에 데코레이터 csrf_protect()를 사용할 수 있습니다. 보호하고 싶습니다 (아래 참조). 2) CsrfViewMiddleware를 담요 보호로 추가하는 대신 보호가 필요한 특정보기에서 정확히 동일한 기능을 가진 csrf_protect 데코레이터를 사용할 수 있습니다. CSRF 토큰을 출력에 삽입하는보기와 POST 양식 데이터를 승인하는보기 모두에서 사용해야합니다. –

+1

@VitaliPonomar 폼 내에 항상 {{% csrf_token %}}이 필요하며 뷰는 필요한 컨텍스트 변수를 추가해야합니다. 컨텍스트 변수가 데코레이터, 미들웨어 또는 수동 추가를 통해 추가 된 경우에는 쌍으로 제공됩니다. –