Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2016 15:52:48

Mahabharata871
Зарегистрирован: 2013-12-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Добрый день, уважаемые форумчане.

Решил попробовать поработать с Django и тут-же наткнулся на проблему, которую никак не могу разрешить.
Хочу сделать простую форму. Делаю один в один по официальному мануалу - http://djbook.ru/rel1.7/topics/forms/
Но при запуске получаю 403 - CSRF token missing or incorrect.

В интернетах нашёл массу инфы с примерами, но ни один из них не подошёл(

Прошу, помогите кто чем может, дайте реально работающий кусок кода или совет былого наставника.
Заранее спасибо.

Офлайн

#2 Июль 8, 2016 18:01:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Во-первых, это НЕ официальный мануал. Это русскоязычный перевод документации.
Во-вторых, Откуда мы можем догадаться что у вас там не правильно? Вы не предоставили ничего из того что сделали. Те примеры кода которые есть вполне рабочие.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июль 8, 2016 18:59:57

Mahabharata871
Зарегистрирован: 2013-12-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

views.py

# encoding: utf-8
from django.shortcuts import render, render_to_response, redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.core.context_processors import csrf
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext
class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)
def get_name(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = NameForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            return HttpResponseRedirect('/thanks/')
    # if a GET (or any other method) we'll create a blank form
    else:
        form = NameForm()
    return render(request, 'blog/name.html', {'form': form})

name.html

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>


Appl_1/urls.py

urlpatterns = [
    url(r'^$', 'Appl_1.views.get_name'),
]


Вот такая картина.

Офлайн

#4 Июль 8, 2016 19:37:57

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Подробнее про CSRF
В вашем случае вы не передаете csrf, поэтому вам вполне резонно говорят что он пропущен. Вот один из примеров

def my_view(request):
    c = {}
    c.update(csrf(request))
    # ... view code here
    return render_to_response("a_template.html", c)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июль 8, 2016 20:18:52

Mahabharata871
Зарегистрирован: 2013-12-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Вот видите, пример приведенный в переводе документации? из коробки таки не работает.
Данный Вами пример я пробовал применять, но как и много других он не дал результата, к сожалению.
Тем более он не подходит для моих нужд, т.к. мне нужно передать - {'form': form}.

Также не сработал вариант с RequestContext.

Офлайн

#6 Июль 8, 2016 20:46:50

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Mahabharata871
. мне нужно передать - {'form': form}.
def my_view(request):
    c = {}
    c.update(csrf(request))
    # ... view code here
    c['form'] = form
    return render_to_response("a_template.html", c)
Mahabharata871
из коробки таки не работает.
ТАм ниже есть заметка об этом. Но согласен, выглядит странно для примера. Тем не менее разобраться вполне можно.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Июль 8, 2016 20:48:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

я счаз смотрю на рабочий код одного проекта, который написан по документации. И все там работает.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Июль 8, 2016 21:01:11

Mahabharata871
Зарегистрирован: 2013-12-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Видите-ли в чем загадка: когда в форме прописан {% csrf_token %} - то проект не запускается вообще, т.е. сразу выдает ошибку, а когда я сношу токен, то я вижу форму, ввожу данные, нажимаю сабмит и только тогда вижу ошибку - Forbidden (CSRF token missing or incorrect.): /your-name/

И, кстати, урл уже другой страницы, куда у меня перенаправление идёт:

def name(request):
    my_name = request.POST
    message = "<p>hello, %s!</p>" %my_name
    return HttpResponse(message)


Т.е. получается мне на каждую страницу надо токен лепить? Но там же нет никаких форм.

Офлайн

#9 Июль 8, 2016 22:26:47

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

нет это только для форм которые отправлены через POST.
Mahabharata871

Mahabharata871
сразу выдает ошибку,
Ну вот эту ошибку надо и показать.
settings.py настроен как следует?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#10 Июль 8, 2016 23:58:43

Mahabharata871
Зарегистрирован: 2013-12-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

CSRF token missing or incorrect.

Прошу прощения, не привык на форумах писать, поэтому забываюсь)
Вот что получаю, когда токен прописан:

KeyError at /
u'% csrf_token %'

settings.py настроен как следует? - ну там всё из коробки, ничего не менял, но согласно всё тех-же рекомендаций на русском, всё подключено как надо. Хотя понимаю, что могут и ошибаться))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version