CSRF cookie не установлен django … проверка не выполнена

AoA Я новичок в Django, я пытаюсь получить данные из POST, но ошибка CSRF cookie не установлена, я пытался найти решение в google и stackoverflow через google, но не удалось

вот код

views.py

from django.http import HttpResponse from django.template.loader import get_template from django.template import Context from django.template import RequestContext from django.core.context_processors import csrf from django.shortcuts import render_to_response def search_Post(request): if request.method == 'POST': c = {} c.update(csrf(request)) # ... view code here return render_to_response("search.html", c) def search_Page(request): name='Awais you have visited my website :P' t = get_template('search.html') html = t.render(Context({'name':name})) return HttpResponse(html) 

Файл HTML

 <p> {{ name }} <form method="POST" action="/save/"> {% csrf_token %} <textarea name="content" rows="20" cols="60">{{content}}</textarea><br> <input type="submit" value="Save Page"/> </form> <div> Cant figure out any solution! :( </div> </p> 

url.py

  url(r'^home/$', 'contacts.views.home_Page'), url(r'^save/$', 'contacts.views.search_Post'), url(r'^edit/$', 'contacts.views.edit_Page'), url(r'^search/$', 'contacts.views.search_Page'), 

settings.py

 TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.csrf', 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.core.context_processors.request', 'django.contrib.messages.context_processors.messages' ) 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', # Uncomment the next line for simple clickjacking protection: # 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) 

5 Solutions collect form web for “CSRF cookie не установлен django … проверка не выполнена”

У меня была такая же проблема, и я решил ее, добавив к вашему представлению decor_csrf_cookie decorator :

  from django.views.decorators.csrf import ensure_csrf_cookie @ensure_csrf_cookie def yourView(request): #... 

Он установит csrftoken в cookie браузера, и вы можете сделать ajax как это

 function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } function csrfSafeMethod(method) { // these HTTP methods do not require CSRF protection return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ crossDomain: false, // obviates need for sameOrigin test beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type)) { xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } }); $.ajax({ url: url, type: type, async: async, data: data, error: function (e) {}, success: function (data) { returnFunction(data); } }); 

Вы используете оба способа для передачи токена CSRF в процессор шаблонов

 c = {} c.update(csrf(request)) 

и RequestContext, в то время как одного достаточно, см. документы . Но вы используете его неправильно, для обслуживания запроса «POST». Эти запросы обычно отправляются вашим браузером, когда он заполняет форму и хочет получить результаты.

Ваш браузер делает home.html отправку запроса GET на сервер, который обслуживается

 t = get_template('home.html') html = t.render(ResponseContext({'name':name})) return HttpResponse(html) 

часть вашего кода. И там вы не используете какое-либо средство для передачи токена csrf. Поэтому, когда get_template().render() обработчик шаблона get_template().render() , в его контексте не имеет токена, поэтому просто игнорирует код {% csrf_token%} в шаблоне. Поэтому вам нужно либо использовать RequestContext в t.render (…) части представления, либо передать вам c dict.

Вы можете проверить его на проверку сгенерированной формы в окне браузера.

ОБНОВИТЬ

В seetings.py добавьте запятую после 'django.core.context_processors.csrf' , как это сейчас, она просто конкатенатирует строки.

Должно быть:

 TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.csrf', 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 

Начните с исправления HTML (вы забыли = ):

 <form method="POST" action="/search/save"> {% csrf_token %} <textarea name="content" rows="20" cols="60">{{content}}</textarea><br> <input type="submit" value="Save Page"/> </form> 

Также:

 def home_Page(request): #if request.method == 'GET': name='Awais you have visited my website :P' if request.method == 'POST': #name = request.POST.get('content') return render_to_response("search.html", {}, context_instance=RequestContext(request)) return render_to_response("home.html", {'name':name}, context_instance=RequestContext(request)) 

Кажется, что вы забыли передать запрос на визуализацию

Django поставляется со специальным классом Context, django.template.RequestContext, который действует несколько иначе, чем обычный django.template.Context. Первое отличие состоит в том, что в качестве первого аргумента требуется HttpRequest. Например:

В дополнение к этим, RequestContext всегда использует django.core.context_processors.csrf. Это обработчик контекста, связанный с безопасностью, требуемый администратором и другими приложениями Contrib, и в случае случайной неправильной конфигурации он намеренно жестко закодирован и не может быть отключен установкой TEMPLATE_CONTEXT_PROCESSORS.

Итак, вам нужно следующее

 t = get_template('home.html') c = RequestContext(request, {'name':name}) return HttpResponse(t.render(c)) 

Если вы wold, как вы можете проверить django dock здесь https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.RequestContext

Попробуйте использовать точный IP-адрес с номером порта вместо DNS … Как и вместо localhost, используйте 127.0.0.1 вместе с номером порта.

Interesting Posts

Кривая доходности казначейства, как наложить две кривые доходности, используя matplotlib

«Escaping» $ при выполнении команды удаленного bash из python fabric

регулярное выражение, чтобы исключить тире и подчеркивание в качестве последнего символа

Преобразование строки (с научной нотацией) в int в Python

Просить пользователя вводить только ограниченное количество времени в python

Как выполнить многоуровневую CLI в Python?

Маркировка ящика в морском море со средним значением

pandas DataFrame concat / update ("upsert")?

Как прокрутить страницу до конца страницы, используя селен в python

Google cloud sdk не работает, когда точки python python3

Переименуйте один заголовок столбца в рамке данных pandas

Когда не подходящее время для использования генераторов python?

передача данных между java и python

Загрузите файлы .xls с веб-страницы с помощью Python и BeautifulSoup

линейная интерполяция между двумя точками данных

Python - лучший язык программирования в мире.