2014-02-01 6 views
5

Я знаю, что этот вопрос задан раньше. Я пробовал почти все варианты, заданные людьми, но я не могу их решить. Я полный новичок, поэтому, пожалуйста, дайте мне знать, где я ошибаюсь.Не удалось выполнить проверку подлинности CSRF Django. Запрос прерван .- CSRF cookie не установлен

Я пытаюсь написать простую необработанную форму. Я до сих пор не реализовал механизм аутентификации или сеанса (но из того, что я прочитал, это не имеет значения для этой проблемы. Исправьте меня, если я ошибаюсь).

Когда я пытаюсь представить мою форму, я получаю эту ошибку:

Forbidden (403) 
CSRF verification failed. Request aborted. 

Reason given for failure: 
    CSRF cookie not set. 

Это мой код:

Мой Views.py имеет этот метод:

def submit(request): 
    global alphabet_array 
    dishes = Dish.objects.all().order_by('name') 
    if request.method == "POST": 
     print request.POST['restaurant'] 
     print request.POST['rating'] 
     render_to_response('index.html', {}, context_instance=RequestContext(request)) 
    else: 
     render_to_response('index.html', {}, context_instance=RequestContext(request)) 

Многие из них сказал, что использование RequestContext решает эту проблему, но для меня даже это не работает.

Шаблон выглядит, как показано ниже:

<form role="form" action="/submit/" method="post">{% csrf_token %} 
       <div class="form-group"> 
        <label for="">Restaurant Name</label> 
        <input type="text" name="restaurant" class="form-control" id=""> 
       </div> 
       <div class="form-group"> 
        <label for="">Rating</label> 
        <select class="form-control" name="rating"> 
        <option>--</option> 
        <option>1 (very bad)</option> 
        <option>2 (bad)</option> 
        <option>3 (average)</option> 
        <option>4 (good)</option> 
        <option>5 (excellent)</option> 
        </select> 
       </div> 
       <button type="submit" class="btn btn-primary btn-block"><i class="fa fa-check-circle"></i> Save</button> 
    </form> 

В MIDDLEWARE_CLASSES в settings.py выглядит следующим образом:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

django.middleware.csrf.CsrfViewMiddleware есть и ниже «django.contrib .sessions.middleware.SessionMiddleware '

Мой url.py имеет вложения:

url(r'^admin/', include(admin.site.urls)), 
    url(r'^index/$', 'testapp.views.index'), 

    url(r'^starts_with/(?P<alphabet>.+)/dish/(?P<dish_id>\d+)/$', 'testapp.views.alphabet_dish'), 
    url(r'^starts_with/(?P<alphabet>.+)/$', 'testapp.views.alphabet'), 
    url(r'^submit/$', 'testapp.views.submit'), 

Я действительно не уверен, в чем проблема. Как я уже сказал, я прочитал подобные сообщения здесь и попробовал все, что упоминалось в ответах. Что я пропустил? Мой браузер Chrome, и он принимает файлы cookie.

+0

Check Chrome, Средства разработки> Ресурсы и посмотреть, если есть печенье там. Попробуйте использовать этот декоратор и посмотреть, все ли в порядке. Django.views.decorators.csrf.csrf_exempt. – Tiago

+0

@Tiago Без декоратора, печенья нет. Когда я добавляю декоратор, я вижу, как создается cookie. Но затем он выдает еще одну ошибку: представление testapp.views.submit не вернуло объект HttpResponse. – rishi

ответ

6

Ваша настройка CSRF в порядке. Проблема Вы не возвращаете результат. Помните, что представление является функцией. Вы должны return render_to_response(...) не просто назвать его (который также, почему удалением CSRF вы получили ошибку didn't return an HttpResponse)

Кроме этого, вы делаете несколько общих вещей, которые Джанго-чески неправильно:

Следовательно:

def submit(request): 
    # global alphabet_array 
    dishes = Dish.objects.all().order_by('name') 
    if request.method == "POST": 
     print request.POST['restaurant'] 
     print request.POST['rating'] 

    return render(request, 'index.html', {}) 
+0

Спасибо. Это сработало. – rishi

+0

Как насчет классов? – user83039

Смежные вопросы