-
-
Save kmlebedev/38f401d7c68fb74a58cb to your computer and use it in GitHub Desktop.
Mezzanine Form ajax processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# template tag | |
from mezzanine import template | |
from mezzanine.forms.forms import FormForForm | |
from mezzanine.pages.models import Page | |
register = template.Library() | |
@register.as_tag | |
def form_from_page(slug): | |
try: | |
page = Page.objects.get(slug=slug) | |
except Page.DoesNotExist: | |
return None | |
return FormForForm(page.form, None, None) | |
# page processor: | |
from django.http import HttpResponse | |
from django.shortcuts import redirect | |
from django.utils import simplejson | |
from mezzanine.conf import settings | |
from mezzanine.forms.forms import FormForForm | |
from mezzanine.forms.models import Form | |
from mezzanine.forms.page_processors import format_value | |
from mezzanine.forms.signals import form_invalid, form_valid | |
from mezzanine.pages.page_processors import processor_for | |
from mezzanine.utils.email import send_mail_template | |
from mezzanine.utils.views import is_spam | |
@processor_for(Form) | |
def ajax_form_processor(request, page): | |
""" | |
Handle a Mezzanine form submissions if and only if the request | |
is ajax, otherwise the default processor will run. | |
""" | |
if request.is_ajax(): | |
form = FormForForm(page.form, request.POST or None, request.FILES or None) | |
if form.is_valid(): | |
url = page.get_absolute_url() + "?sent=1" | |
if is_spam(request, form, url): | |
return redirect(url) | |
entry = form.save() | |
subject = page.form.email_subject | |
if not subject: | |
subject = "%s - %s" % (page.form.title, entry.entry_time) | |
fields = [(v.label, format_value(form.cleaned_data[k])) | |
for (k, v) in form.fields.items()] | |
context = { | |
"fields": fields, | |
"message": page.form.email_message, | |
"request": request, | |
} | |
email_from = page.form.email_from or settings.DEFAULT_FROM_EMAIL | |
email_to = form.email_to() | |
if email_to and page.form.send_email: | |
send_mail_template(subject, "email/form_response", email_from, | |
email_to, context, fail_silently=settings.DEBUG) | |
if not settings.FORMS_DISABLE_SEND_FROM_EMAIL_FIELD: | |
# Send from the email entered, | |
# unless FORMS_DISABLE_SEND_FROM_EMAIL_FIELD is True. | |
email_from = email_to or email_from | |
email_copies = page.form.email_copies.split(",") | |
email_copies = [e.strip() for e in email_copies if e.strip()] | |
if email_copies: | |
attachments = [] | |
for f in form.files.values(): | |
f.seek(0) | |
attachments.append((f.name, f.read())) | |
send_mail_template(subject, "email/form_response", email_from, | |
email_copies, context, attachments=attachments, | |
fail_silently=settings.DEBUG) | |
form_valid.send(sender=request, form=form, entry=entry) | |
return HttpResponse(simplejson.dumps({'error': False, 'message': page.form.response}), | |
mimetype='application/json') | |
form_invalid.send(sender=request, form=form) | |
return HttpResponse(simplejson.dumps({'error': True, 'message': '<p>Please submit valid data</p>' }), | |
mimetype='application/json') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment