kopia lustrzana https://github.com/rtts/django-simplecms
Better form handling
rodzic
e9fddf8a2e
commit
4a8c804452
|
@ -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()
|
||||
|
|
|
@ -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 %}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
44
cms/views.py
44
cms/views.py
|
@ -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,
|
||||
|
|
|
@ -205,16 +205,6 @@ nav {
|
|||
}
|
||||
}
|
||||
|
||||
div.edit {
|
||||
position: fixed;
|
||||
right: 1em;
|
||||
bottom: 1em;
|
||||
z-index: 1000;
|
||||
img {
|
||||
width: 75px;
|
||||
}
|
||||
}
|
||||
|
||||
section {
|
||||
clear: both;
|
||||
position: relative;
|
||||
|
|
Ładowanie…
Reference in New Issue