Привет всем! Нашел рецепт создания формы обратной связи на замечательном блоге http://www.acman.ru/blog/87. Форма работает отлично, но понадобилось мне ее через темплейттег передать на другую страницу и появились ошибки которые никак разрешить не могу, а именно CSRF token missing or incorrect.
views.py
from django.conf import settings
from django.views.generic import CreateView
from django.core.mail import send_mail
#
from feedback_app.models import Contact, ContactForm
#
#
class ContactCreateView(CreateView):
form_class = ContactForm
template_name = 'feedback_app/form.html'
success_url = '/thanks/'
#
def form_valid(self, form):
message = '{name} / {phone} написал: '.format(
name=form.cleaned_data.get('name').encode('utf-8'),
phone=form.cleaned_data.get('phone').encode('utf-8')
)
message += "\n\n{0}".format(form.cleaned_data.get('text').encode('utf-8'))
send_mail(
subject=form.cleaned_data.get('title').encode('utf-8').strip(),
message=message,
from_email='contact-form@myapp.com',
recipient_list=settings.LIST_OF_EMAIL_RECIPIENTS
)
return super(ContactCreateView, self).form_valid(form)
темплейттег:
from django import template
from feedback_app.models import ContactForm
register = template.Library()
@register.inclusion_tag('feedback_app/form.html', takes_context=True)
def showfeedback(context):
form = ContactForm()
return {"form": form}
models.py
#! coding: utf-8
from django.db import models
from django.forms import ModelForm, Textarea, TextInput
from captcha.fields import CaptchaField
#
#
class Contact(models.Model):
title = models.CharField('Тема:', max_length=100)
name = models.CharField('Имя:', max_length=100)
phone = models.CharField('Номер телефона:', max_length=100)
text = models.TextField('Сообщение:')
#
class Meta:
verbose_name = 'Сообщение'
verbose_name_plural = 'Сообщения'
#
def __unicode__(self):
return '%s' % self.title
#
#
class ContactForm(ModelForm):
captcha = CaptchaField(label='Проверочный код:')
#
class Meta:
model = Contact
exclude = []
widgets = {
'text': Textarea(attrs={
'cols': 80, 'rows': 10, 'id': 'messagestyle','placeholder' : 'Текст'}),
'name': TextInput(attrs={
'id': 'namestyle', 'placeholder' : 'Имя'}),
'title': TextInput(attrs={
'id': 'subjectstyle','placeholder' : 'Тема сообщения'}),
'phone': TextInput(attrs={
'id': 'tellstyle', 'placeholder' : 'Номер телефона'})
}
сама форма:
{% block form %}
<form method="POST" action="" class="default-form" id="contactform">
<div class="row">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="col-lg-12">
{{ form.title.errors }}
{{ form.title }}
</div>
<div class="col-lg-6 col-md-6">
{{ form.name.errors }}
{{ form.name }}
</div>
<div class="col-lg-6 col-md-6">
{{ form.phone.errors }}
{{ form.phone }}
</div>
<div class="col-lg-12">
{{ form.text.errors }}
{{ form.text }}
</div>
<div class="col-lg-12">
<label for="id_captcha">Введите код с картинки</label>
{{ form.captcha }}
</div>
<div class="col-lg-12 text-right" id="button-form">
<button class="btn btn-contact" id="button-contact">Отправить</button>
<div class="box" id="messenger"></div>
</div>
<div class="box" id="messenger"></div>
</div>
</form>
{% endblock %}
Updated 15 Feb. 2016, 10:30 by pathfinder_rrrrr.