Форум сайта python.su
0
Создана форма:
<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())
Отредактировано (Янв. 29, 2011 14:43:53)
Офлайн
2
Офлайн
0
Сделал вот так:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
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)
Офлайн
2
попробуйте использовать django.middleware.csrf.CsrfResponseMiddleware
это более правильный способ и меньше телодвижений - все само в форме сделается
и отключить если что не долго
Офлайн
0
Добавил ‘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',
)
Exception Location: D:\Python27\lib\socket.py in create_connection, line 567
Отредактировано (Янв. 29, 2011 19:02:55)
Офлайн
0
В доках же написано, что потом в шаблоне в форме нужно добавить
{% csrf_token %}Офлайн
0
{% csrf_token %}Отредактировано (Янв. 30, 2011 22:54:14)
Офлайн