Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2015 10:46:10

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

проблема такова:
Есть форма(заполняет пользователь) которую получаю, обрабатываю, перевожу на другую страницу.
В форме есть csrf token, при обработки запроса делаю апдейт csrf и возвращаю его в аргументах.
Но выдает ошибку 403 ошибка проверки csrf. В сеттингс все включено. Пишарм/Питон 3.4/Джанго1.8
html формы

{% extends 'base.html' %}
{% load staticfiles %}
{% block code %}
<form action="/do/" method="POST">{% csrf_token %}
<textarea name="ur" cols="60" rows="30"></textarea><br>
<input type="submit" value="code">
</form>
{% endblock %}
html куда возвращаю {% csrf_token %} прихал уже везде (написал пока что без токена)
{% extends 'base.html' %}
{% load staticfiles %}
{% block code_res %}
<form>
    <textarea>{{ new }}</textarea>
</form>
<form>
    <textarea>{{ so }}</textarea>
</form>
{% endblock %}

вот вьюха
def do_code(request):
d = {}
args = {}
args.update(csrf(request))
if request.method == 'POST':
if 'ur' in request.POST:
args['new'] = request.POST['ur']
sres = [d.get(l) for l in args['new']]
args['so'] = ''.join(sres)
return render_to_response('code_prog_res.html', args)
else:
reutrn redirect('/')
код рабочий, но с протектом csrf летит от нее ошибка. Где я не прав?

Отредактировано Xa_xoo (Сен. 25, 2015 10:48:37)

Офлайн

#2 Сен. 25, 2015 10:53:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

Xa_xoo
при обработки запроса делаю апдейт csrf и возвращаю его в аргументах
зачем?



Офлайн

#3 Сен. 25, 2015 11:14:52

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

FishHook
таким образом я авторитизацию во вьюхе описывал (я про csrf)
думал идентично и здесь csrf будет работать…
Попробовал убрать апдейт, но всеравно та же ошибка … может в синтаксисе ошибся..
если можно, как правильно в моем коде нужно написать?

Офлайн

#4 Сен. 25, 2015 11:25:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

Ошибка у вас возникает потому что вы не передаёте в шаблон контекст реквеста. То есть токена там тупо нет, а идиотски тупой джанговский шаблонизатор никак на эту ошибку не реагирует.



Офлайн

#5 Сен. 25, 2015 11:47:36

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

мне казалось вот таким образом:

args = {}
args.update(csrf(request))
и
return render_to_response('code_prog_res.html', args)
я как раз и передаю токен?
как мне написать верно то?

Офлайн

#6 Сен. 25, 2015 11:51:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

Наверно и так можно, а ваш код без отступов не читал



Офлайн

#7 Сен. 25, 2015 13:15:06

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

в cmd пишет:
UserWarning: A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.
“A csrf_token was used in a template, but the context”

перевод я знаю, но не пойму где я ошибся..

Офлайн

#8 Сен. 25, 2015 13:51:42

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

подключил RequestContext и переделал на

[code python]return render_to_response('my_template.html',
my_context,
context_instance=RequestContext(request))[/code]

В cmd перестал ругаться, но в браузере всеравно возвращает ошибку ругаясь на проверку CSRF (запрос отклонен)

Офлайн

#9 Сен. 27, 2015 12:01:59

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

csrf не найден или не совпадает

ни у кого еще мыслей нет?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version