kopia lustrzana https://github.com/rtts/django-simplecms
Ready for the first deployment!
rodzic
2ef844044d
commit
b56bbec534
83
cms/forms.py
83
cms/forms.py
|
@ -7,41 +7,24 @@ from django.utils.translation import gettext_lazy as _
|
|||
Page = swapper.load_model('cms', 'Page')
|
||||
Section = swapper.load_model('cms', 'Section')
|
||||
|
||||
class ConfirmationForm(forms.Form):
|
||||
pass
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
sender = forms.EmailField(label=_('Your email address'))
|
||||
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()
|
||||
body = self.cleaned_data.get('spam_protection')
|
||||
if len(body.split()) < 7:
|
||||
return
|
||||
spamcheck = self.cleaned_data.get('message')
|
||||
if spamcheck != 'Hi there!':
|
||||
return
|
||||
|
||||
email = EmailMessage(
|
||||
to = ['info@' + hostname],
|
||||
from_email = 'noreply@' + hostname,
|
||||
body = body,
|
||||
subject = _('Contact form at %(hostname)s.') % {'hostname': hostname},
|
||||
headers = {'Reply-To': self.cleaned_data.get('sender')},
|
||||
)
|
||||
email.send()
|
||||
|
||||
class PageForm(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.formsets = [SectionFormSet(
|
||||
extra = 1 if self.instance.pk else 2
|
||||
self.formsets = [forms.inlineformset_factory(
|
||||
parent_model = Page,
|
||||
model = Section,
|
||||
form = SectionForm,
|
||||
formset = BaseSectionFormSet,
|
||||
extra=extra,
|
||||
)(
|
||||
data=self.data if self.is_bound else None,
|
||||
files=self.files if self.is_bound else None,
|
||||
instance=self.instance,
|
||||
form_kwargs={'label_suffix': self.label_suffix},
|
||||
)]
|
||||
if not self.instance.pk:
|
||||
self.formsets[0][0].empty_permitted = False
|
||||
|
||||
def is_valid(self):
|
||||
return super().is_valid() and self.formsets[0].is_valid()
|
||||
|
@ -76,9 +59,6 @@ class SectionForm(forms.ModelForm):
|
|||
self.fields['type'].choices = self._meta.model.TYPES
|
||||
self.fields['type'].initial = self._meta.model.TYPES[0][0]
|
||||
|
||||
self.fields['type'].widget.attrs['class'] = 'type'
|
||||
self.fields['type'].widget.attrs['data-form'] = self.prefix
|
||||
|
||||
def delete(self):
|
||||
instance = super().save()
|
||||
instance.delete()
|
||||
|
@ -111,10 +91,6 @@ class SectionForm(forms.ModelForm):
|
|||
# ignored entirely. Workaround to force a ChoiceField anyway:
|
||||
type = forms.ChoiceField()
|
||||
|
||||
|
||||
|
||||
#SectionFormSet = inlineformset_factory(Page, Section, form=SectionForm, extra=1)
|
||||
|
||||
class BaseSectionFormSet(forms.BaseInlineFormSet):
|
||||
'''If a swappable Section model defines one-to-many fields, (i.e. has
|
||||
foreign keys pointing to it) formsets will be generated for the
|
||||
|
@ -136,11 +112,13 @@ class BaseSectionFormSet(forms.BaseInlineFormSet):
|
|||
form.formsets = []
|
||||
for field in section._meta.get_fields():
|
||||
if field.one_to_many:
|
||||
if getattr(section, field.name).exists():
|
||||
extra = 1
|
||||
else:
|
||||
extra = 2
|
||||
formset = forms.inlineformset_factory(Section, field.related_model, fields='__all__', extra=extra)(
|
||||
extra = 1 if getattr(section, field.name).exists() else 2
|
||||
|
||||
formset = forms.inlineformset_factory(
|
||||
Section, field.related_model,
|
||||
fields='__all__',
|
||||
extra=extra,
|
||||
)(
|
||||
instance=section,
|
||||
data=form.data if self.is_bound else None,
|
||||
files=form.files if self.is_bound else None,
|
||||
|
@ -165,10 +143,25 @@ class BaseSectionFormSet(forms.BaseInlineFormSet):
|
|||
formset.save(commit=commit)
|
||||
return result
|
||||
|
||||
SectionFormSet = forms.inlineformset_factory(
|
||||
parent_model = Page,
|
||||
model = Section,
|
||||
form = SectionForm,
|
||||
formset = BaseSectionFormSet,
|
||||
extra=1,
|
||||
class ContactForm(forms.Form):
|
||||
sender = forms.EmailField(label=_('Your email address'))
|
||||
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()
|
||||
body = self.cleaned_data.get('spam_protection')
|
||||
if len(body.split()) < 7:
|
||||
return
|
||||
spamcheck = self.cleaned_data.get('message')
|
||||
if spamcheck != 'Hi there!':
|
||||
return
|
||||
|
||||
email = EmailMessage(
|
||||
to = ['info@' + hostname],
|
||||
from_email = 'noreply@' + hostname,
|
||||
body = body,
|
||||
subject = _('Contact form at %(hostname)s.') % {'hostname': hostname},
|
||||
headers = {'Reply-To': self.cleaned_data.get('sender')},
|
||||
)
|
||||
email.send()
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
$font: Merriweather, sans-serif;
|
||||
|
||||
body {
|
||||
html, body {
|
||||
font-family: $font;
|
||||
line-height: 2;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Form elements */
|
||||
|
@ -12,10 +14,13 @@ form.cms {
|
|||
overflow: hidden;
|
||||
min-height: 100vh;
|
||||
$background: #fff6;
|
||||
padding-bottom: 125px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
div.wrapper {
|
||||
margin: 0 auto;
|
||||
max-width: none;
|
||||
flex: 0 1 640px;
|
||||
padding: 0 0.5em;
|
||||
}
|
||||
|
||||
|
@ -33,7 +38,6 @@ form.cms {
|
|||
clear: both;
|
||||
width: 50px;
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
}
|
||||
|
||||
div.formfield {
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
body {
|
||||
html, body {
|
||||
font-family: Merriweather, sans-serif;
|
||||
line-height: 2; }
|
||||
line-height: 2;
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
|
||||
/* Form elements */
|
||||
form.cms {
|
||||
background: #bfb;
|
||||
overflow: hidden;
|
||||
min-height: 100vh;
|
||||
padding-bottom: 125px; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center; }
|
||||
form.cms div.wrapper {
|
||||
margin: 0 auto;
|
||||
max-width: none;
|
||||
flex: 0 1 640px;
|
||||
padding: 0 0.5em; }
|
||||
form.cms fieldset {
|
||||
background: #fff6;
|
||||
|
@ -22,8 +27,7 @@ form.cms {
|
|||
display: block;
|
||||
clear: both;
|
||||
width: 50px;
|
||||
cursor: pointer;
|
||||
float: right; }
|
||||
cursor: pointer; }
|
||||
form.cms div.formfield {
|
||||
margin-bottom: 10px;
|
||||
clear: both;
|
||||
|
|
|
@ -5,5 +5,5 @@
|
|||
"admin.scss"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "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"
|
||||
"mappings": "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"
|
||||
}
|
|
@ -96,8 +96,9 @@
|
|||
}
|
||||
|
||||
function setEventHandlers() {
|
||||
for (let typefield of document.querySelectorAll('select.type')) {
|
||||
let form = document.getElementById(typefield.dataset.form);
|
||||
for (let typefield of document.querySelectorAll('select[name$=-type]')) {
|
||||
let formId = typefield.name.replace(/-type$/, '');
|
||||
let form = document.getElementById(formId);
|
||||
let type = typefield.value.toLowerCase();
|
||||
showRelevantFields(form, type);
|
||||
typefield.addEventListener('input', function() {
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "admin.html" %}
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block nav %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post" class="cms">
|
||||
{% csrf_token %}
|
||||
|
||||
<section>
|
||||
<form method="post" class="cms" novalidate>
|
||||
<div class="wrapper">
|
||||
{% csrf_token %}
|
||||
<fieldset>
|
||||
{{form.non_field_errors}}
|
||||
<h1>{% trans 'Log in' %}</h1>
|
||||
{% for field in form %}
|
||||
{% include 'cms/formfield.html' with field=field %}
|
||||
{% endfor %}
|
||||
<button class="button">{% trans 'Log in' %}</button>
|
||||
</fieldset>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="edit page">
|
||||
<button><img src="{% static 'cms/save.png' %}"></button>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.contrib.contenttypes.models import ContentType
|
|||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
|
||||
from .decorators import register_view
|
||||
from .forms import PageForm, SectionForm, SectionFormSet
|
||||
from .forms import PageForm
|
||||
|
||||
Page = swapper.load_model('cms', 'Page')
|
||||
Section = swapper.load_model('cms', 'Section')
|
||||
|
|
Ładowanie…
Reference in New Issue