Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2011 14:42:39

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

CsrfViewMiddleware

Создана форма:

<form action = "/contact/" method="post">{% csrf_token %}
<p>Subject: <input type="text" name="subject"></p>
<p>Email: <input type="text" name="email"></p>
<p>Message: <textarea name='message' rows='10' cols='42'></textarea></p>
<input type='submit' value='send'>
</form>
И представление:
from django.views.decorators.csrf import csrf_protect # Это попытка подключить csrf
from django.template import RequestContext

def contact(request):
c = {}# Это попытка подключить csrf
errors=[]
if request.method =='POST':
if not request.POST.get('subject', ''):
errors.append('Enter a subject,')
if not request.POST.get('message', ''):
errors.append('Enter a message,')
if request.POST.get('email') and '@' not in request.POST['email']:
errors.append('Enter a valid email.')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', 'exemple@gmail.com'), ['exemple_to@gmail.com']
)
return render_to_response('/contact/thanks/', c, context_instance = RequestContext(request))# Это попытка подключить csrf
return render_to_response('contact_form.html', locals())
Сервер вызывает ошибку 403: CSRF verification failed. Request aborted. Подскажите пожалуйста, как правильно подключить csrf к форме и представлению?



Отредактировано (Янв. 29, 2011 14:43:53)

Офлайн

#2 Янв. 29, 2011 15:05:39

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Офлайн

#3 Янв. 29, 2011 15:59:52

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

CsrfViewMiddleware

Сделал вот так:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
Вызывает ошибку 10061, текст ошибки взялся кракозяблами.
Traceback:
File “D:\Python27\lib\site-packages\django\core\handlers\base.py” in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File “D:\Python27\lib\site-packages\django\views\decorators\csrf.py” in wrapped_view
39. resp = view_func(*args, **kwargs)
File “D:\Python27\lib\site-packages\django\views\decorators\csrf.py” in wrapped_view
52. return view_func(*args, **kwargs)
File “D:\home\oneproject\..\oneproject\oneapp\views.py” in contact
39. request.POST.get('email', ‘ex@gmail.com’),
File “D:\Python27\lib\site-packages\django\core\mail\__init__.py” in send_mail
61. connection=connection).send()
File “D:\Python27\lib\site-packages\django\core\mail\message.py” in send
179. return self.get_connection(fail_silently).send_messages()
File “D:\Python27\lib\site-packages\django\core\mail\backends\smtp.py” in send_messages
78. new_conn_created = self.open()
File “D:\Python27\lib\site-packages\django\core\mail\backends\smtp.py” in open
41. local_hostname=DNS_NAME.get_fqdn())
File “D:\Python27\lib\smtplib.py” in __init__
239. (code, msg) = self.connect(host, port)
File “D:\Python27\lib\smtplib.py” in connect
295. self.sock = self._get_socket(host, port, self.timeout)
File “D:\Python27\lib\smtplib.py” in _get_socket
273. return socket.create_connection((port, host), timeout)
File “D:\Python27\lib\socket.py” in create_connection
567. raise error, msg
В чем причина ошибки?



Отредактировано (Янв. 29, 2011 16:01:32)

Офлайн

#4 Янв. 29, 2011 16:53:53

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

CsrfViewMiddleware

попробуйте использовать django.middleware.csrf.CsrfResponseMiddleware
это более правильный способ и меньше телодвижений - все само в форме сделается
и отключить если что не долго



Офлайн

#5 Янв. 29, 2011 19:01:37

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

CsrfViewMiddleware

Добавил ‘django.middleware.csrf.CsrfResponseMiddleware’ в MIDDLEWARE_CLASSES. И убрал декоратор из представления.

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Но ошибка та же. zheromo, как правильно подключить django.middleware.csrf.CsrfResponseMiddleware? Причина ошибки не правильное использования csrf?
Да, к стати:
Exception Location: D:\Python27\lib\socket.py in create_connection, line 567



Отредактировано (Янв. 29, 2011 19:02:55)

Офлайн

#6 Янв. 30, 2011 20:23:27

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

CsrfViewMiddleware

В доках же написано, что потом в шаблоне в форме нужно добавить

{% csrf_token %}
Разве нет?



Офлайн

#7 Янв. 30, 2011 22:53:39

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

CsrfViewMiddleware

{% csrf_token %}
в форме есть. Причина ошибки настройках smtp сервера.



Отредактировано (Янв. 30, 2011 22:54:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version