2012-08-16 4 views
0
안녕하세요 내가 장고 책을 읽고 등록에 관한 장에서 오전되었습니다 초보자 일부 사용자를 등록 할 장고를 사용하려고 해요, http://www.djangobook.com/en/2.0/chapter14/ 나는이

장고 도서가 오래된 CSRF 보호

얻을

금지됨 (403)

CSRF 확인에 실패했습니다. 요청이 중단되었습니다. 실패 주어진 도움말

이유 : 장고의 CSRF 메커니즘이 제대로 사용되지 않은 경우가 진정한 크로스 사이트 요청 위조, 또는 경우에 일반적으로

CSRF token missing or incorrect. 

이 발생할 수 있습니다. 당신이 당신의 장고 설정 파일에 진정한 DEBUG를 =이 있기 때문에

Your browser is accepting cookies. 
The view function uses RequestContext for the template, instead of Context. 
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. 
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data. 

당신은이 페이지의 도움말 섹션을보고있다 : POST 양식의 경우, 확인해야합니다. 이 값을 False로 변경하면 초기 오류 메시지 만 표시됩니다.

CSRF_FAILURE_VIEW 설정을 사용하여이 페이지를 사용자 정의 할 수 있습니다.

{% csrf_token %} 템플릿 태그를 게시 태그 안에 넣었지만 여전히이 오류를 표시합니다. 감사

# views.py 
# 
# Copyright 2012 Talisman <[email protected]> 
from django.shortcuts import render_to_response 
from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.http import HttpResponseRedirect 

def home (request): 
    return render_to_response('FirstTemplate.html',) 

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      return HttpResponseRedirect("/books/") 
    else: 
     form = UserCreationForm() 
    return render_to_response("register.html", { 
     'form': form, 
    }) 

형태

settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware', 
) 

에 미들웨어 설정이 넣어

{% extends "base.html" %} 

{% block title %}Create an account{% endblock %} 

{% block content %} 
    <h1>Create an account</h1> 

    <form action="" method="post"{% csrf_token %}> 
     {{ form.as_p }} 
     <input type="submit" value="Create the account"> 
    </form> 
{% endblock %} 
+0

{%의 csrf_token의 %는} 태그 –

답변

1

Djangobook이 장고의 꽤 이전 버전을 사용하여 도움이되기를 바랍니다 , 당신은 최신 버전에있을 수 있습니다, 나는 정보를 시도하고 csrf 섹션은 확실히 구식 sinc입니다 전자들은이 새로운 버전에서 처리되는 방식에 약간의 수정을했다, 북 버전 (pahko 언급 미들웨어 것 이외에)이 오류의 일부 빈번한 이유와 장고 버전과 일치 있습니다

  1. 하지 템플릿에 csrf_token 태그를 사용하여
  2. RequestContext 클래스를 사용하지 않는 - RequestContext
  3. 로이

    from django.template import RequestContext 
    

    유사한

을 문맥을 대체 렌더링 문에 표시됩니다.

return render_to_response("home/index.html", c, context_instance=RequestContext(request)) 

참고 : 위의 문에는 고유 한 템플릿 경로를 사용하십시오.

+0

그것은 csrf 토큰을 가지고있는 것으로 보이지만 응답 객체에 대한 렌더링에 또 다른 오류가 발생했기 때문에 확실하지 않습니다. 어떻게하면 '양식'이 될 수 있습니까 : 양식, 전역 이름 오류가 발생하지 않습니다. 게다가 다운 그레이드를하고 싶지는 않습니다. 간단한 등록을위한 다른 튜토리얼이나 방법이 있어야합니다. 나는 내가 전자 메일 검증을 아직 할 수 있다고 생각하지 않는다. – Klanestro

+0

위의 코드 (render_to_response 함수의 두 번째 인수)에있는 c는 전달하려는 정보가 포함 된 사전입니다. –

0

시도는

+0

이미이 덕분에 그것을했다 그래서

{%의 csrf_token의 %} {{form.as_p}}이 렌더러를 같이 <입력 유형 = "숨겨진">하지만 – Klanestro

+1

는 당신이 할 수있는 ... 후 입니다 제발 당신이 사용하는 코드를 게시하십시오 .. 내 말은 당신의 양식과보기 .. 덕분에 – pahko

+0

또한 장고 페이지의 링크를 ... – pahko