Better form handling

main
Jaap Joris Vens 2020-03-29 01:54:56 +01:00
rodzic e9fddf8a2e
commit 4a8c804452
5 zmienionych plików z 31 dodań i 31 usunięć

Wyświetl plik

@ -113,8 +113,7 @@ class ContactForm(forms.Form):
spam_protection = forms.CharField(label=_('Your message'), widget=forms.Textarea())
message = forms.CharField(label=_('Your message'), widget=forms.Textarea(), initial='Hi there!')
def save(self, request):
hostname = request.get_host()
def save(self):
body = self.cleaned_data.get('spam_protection')
if len(body.split()) < 7:
return
@ -125,7 +124,7 @@ class ContactForm(forms.Form):
email = EmailMessage(
to = [settings.DEFAULT_TO_EMAIL],
body = body,
subject = _('Contact form at %(hostname)s.') % {'hostname': hostname},
subject = _('Contact form'),
headers = {'Reply-To': self.cleaned_data.get('sender')},
)
email.send()

Wyświetl plik

@ -11,7 +11,6 @@
{% if form.errors %}
<div class="global_error">
{% trans 'Please correct the error(s) below and save again' %}
{{form.errors}}
</div>
{% endif %}

Wyświetl plik

@ -79,7 +79,7 @@ class IncludeSectionNode(template.Node):
'perms': perms,
}
if hasattr(section, 'invalid_form'):
context['form'] = section.invalid_form
initial_context['form'] = section.invalid_form
section_context = view.get_context_data(**initial_context)
t = context.template.engine.get_template(view.template_name)

Wyświetl plik

@ -15,23 +15,37 @@ class SectionView:
template_name = 'cms/sections/section.html'
def __init__(self, request):
'''Initialize request attribute'''
self.request = request
def get_context_data(self, **kwargs):
'''Override this to customize a section's context'''
return kwargs
class SectionFormView(edit.FormMixin, SectionView):
class SectionFormView(SectionView):
'''Generic section with associated form'''
form_class = None
success_url = None
def post(self, request):
'''Process form'''
form = self.get_form()
if form.is_valid():
form.save(request)
return HttpResponseRedirect(self.get_success_url())
return form
def get_context_data(self, **kwargs):
if 'form' not in kwargs:
kwargs['form'] = self.get_form()
return kwargs
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.success_url)
def get_form_kwargs(self):
return {}
def get_form(self, method='get'):
form_class = self.form_class
kwargs = self.get_form_kwargs()
if method == 'post':
kwargs.update({
'data': self.request.POST,
'files': self.request.FILES,
})
return form_class(**kwargs)
class PageView(detail.DetailView):
'''View of a page with heterogeneous sections'''
@ -51,8 +65,6 @@ class PageView(detail.DetailView):
page = registry.page_class(title='Homepage', slug='')
page.save()
self.object = page
elif self.request.user.has_perm('cms_page_create'):
return redirect('cms:updatepage', self.kwargs['slug'])
else:
raise
context = self.get_context_data(**kwargs)
@ -76,10 +88,10 @@ class PageView(detail.DetailView):
for section in sections:
if section.pk == pk:
view = registry.get_view(section, request)
result = view.post(request)
if isinstance(result, HttpResponse):
return result
section.invalid_form = result
form = view.get_form(method='post')
if form.is_valid():
return view.form_valid(form)
section.invalid_form = form
context.update({
'page': page,

Wyświetl plik

@ -205,16 +205,6 @@ nav {
}
}
div.edit {
position: fixed;
right: 1em;
bottom: 1em;
z-index: 1000;
img {
width: 75px;
}
}
section {
clear: both;
position: relative;