Django의 csrf 처리 사용

1848 단어
Django의 중간부품django.middleware.csrf.CsrfViewMiddleware은 전역적인 csrf 검사를 제공합니다.그것의 원리는 탭에 숨겨진 탭을 생성하여 폼을 제출할 때 숨겨진 를 함께 제출하고 서버에서 이 필드가 정확한지 확인하는 것이다.
공식적으로 제시된 csrf의 조작 절차는 다음과 같다.
  • MIDDLEWARE_CLASSESdjango.middleware.csrf.CsrfViewMiddleware를 추가하여 전역 csrf 보호를 시작합니다.
  • POST에서 사이트 내의 폼에 대해 템플릿의 탭에 {% csrf_token %} 템플릿 탭을 추가합니다.
  • 대응하는 보기 함수에서 django.template.context_processors.csrfContext 프로세서를 사용해야 합니다.실현 방식은 두 가지가 있다. (1).RequestContext를 사용하거나 일반 보기를 직접 사용하면 템플릿 상하문에 자동으로 csrf_token를 추가합니다.return render_to_response("xxx.html", context_instance=RequestContext(request)) (2). CSRF token을 생성하기 위해 프로세서를 수동으로 가져와 템플릿 컨텍스트에 추가합니다.예: from django.shortcuts import render_to_response from django.template.context_processors import csrf def my_view(request): c = {} c.update(csrf(request)) # ... view code here return render_to_response("a_template.html", c)

  • 그러나 수동으로 가져오는 것은 번거롭고 코드를 유지하기 어려워지며 사용RequestContext도 나아지지 않고 Django 1.8의 문서에 설명context_instance1.8 이후 폐기된다.그럼 우리는 어떻게 처리해야 합니까csrf_token?사실 Django는 이 문제를 처리할 수 있는 빠른 함수를 제공했다.django.shortcuts.render 내부 설정context_instance에서 부족한 것은 RequestContext의 실례이다.render를 호출하면 자동으로 csrf_token를 상하문에 추가할 수 있습니다.
    인터넷상에서 일부 블로그는 settings에 설정TEMPLATE_CONTEXT_PROCESSORS을 해서 전역적인csrf_token을 상하문에 채울 수 있다고 말한다.하지만 실험을 해보니 잘 안 돼요. 그 이유를 아는 친구가 있다면 알려주세요.settings에서는 다음과 같이 설정합니다.
    TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (    
        'django.core.context_processors.csrf',
    )

    좋은 웹페이지 즐겨찾기