Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
django-panik-newsletter
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
radiopanik
django-panik-newsletter
Commits
6881bb9c
Commit
6881bb9c
authored
Sep 23, 2013
by
fred
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add model, views and forms for writing newsletters
parent
74608485
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
290 additions
and
6 deletions
+290
-6
newsletter/forms.py
newsletter/forms.py
+7
-1
newsletter/migrations/0001_initial.py
newsletter/migrations/0001_initial.py
+40
-0
newsletter/migrations/0002_auto__add_newsletter.py
newsletter/migrations/0002_auto__add_newsletter.py
+47
-0
newsletter/migrations/0003_auto__del_field_newsletter_expedition_date__add_field_newsletter_exped.py
...newsletter_expedition_date__add_field_newsletter_exped.py
+50
-0
newsletter/migrations/__init__.py
newsletter/migrations/__init__.py
+0
-0
newsletter/models.py
newsletter/models.py
+19
-2
newsletter/templates/newsletter/newsletter_detail.html
newsletter/templates/newsletter/newsletter_detail.html
+20
-0
newsletter/templates/newsletter/newsletter_form.html
newsletter/templates/newsletter/newsletter_form.html
+27
-0
newsletter/templates/newsletter/newsletter_list.html
newsletter/templates/newsletter/newsletter_list.html
+22
-0
newsletter/urls.py
newsletter/urls.py
+7
-0
newsletter/views.py
newsletter/views.py
+51
-3
No files found.
newsletter/forms.py
View file @
6881bb9c
from
django
import
forms
from
.models
import
Subscriber
from
.models
import
Subscriber
,
Newsletter
class
SubscribeForm
(
forms
.
ModelForm
):
class
Meta
:
model
=
Subscriber
exclude
=
(
'inscription_date'
,
'is_validated'
,
'is_registered'
,
'password'
)
class
NewsletterForm
(
forms
.
ModelForm
):
class
Meta
:
model
=
Newsletter
exclude
=
(
'expedition_datetime'
,
)
newsletter/migrations/0001_initial.py
0 → 100644
View file @
6881bb9c
# -*- coding: utf-8 -*-
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Adding model 'Subscriber'
db
.
create_table
(
u'newsletter_subscriber'
,
(
(
u'id'
,
self
.
gf
(
'django.db.models.fields.AutoField'
)(
primary_key
=
True
)),
(
'email'
,
self
.
gf
(
'django.db.models.fields.EmailField'
)(
unique
=
True
,
max_length
=
75
)),
(
'inscription_date'
,
self
.
gf
(
'django.db.models.fields.DateField'
)(
auto_now_add
=
True
,
blank
=
True
)),
(
'is_validated'
,
self
.
gf
(
'django.db.models.fields.NullBooleanField'
)(
null
=
True
,
blank
=
True
)),
(
'is_registered'
,
self
.
gf
(
'django.db.models.fields.NullBooleanField'
)(
null
=
True
,
blank
=
True
)),
(
'password'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
max_length
=
100
)),
))
db
.
send_create_signal
(
u'newsletter'
,
[
'Subscriber'
])
def
backwards
(
self
,
orm
):
# Deleting model 'Subscriber'
db
.
delete_table
(
u'newsletter_subscriber'
)
models
=
{
u'newsletter.subscriber'
:
{
'Meta'
:
{
'object_name'
:
'Subscriber'
},
'email'
:
(
'django.db.models.fields.EmailField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'75'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'inscription_date'
:
(
'django.db.models.fields.DateField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'is_registered'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'is_validated'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
}
}
complete_apps
=
[
'newsletter'
]
\ No newline at end of file
newsletter/migrations/0002_auto__add_newsletter.py
0 → 100644
View file @
6881bb9c
# -*- coding: utf-8 -*-
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Adding model 'Newsletter'
db
.
create_table
(
u'newsletter_newsletter'
,
(
(
u'id'
,
self
.
gf
(
'django.db.models.fields.AutoField'
)(
primary_key
=
True
)),
(
'subject'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
max_length
=
50
)),
(
'date'
,
self
.
gf
(
'django.db.models.fields.DateField'
)()),
(
'text'
,
self
.
gf
(
'ckeditor.fields.RichTextField'
)(
null
=
True
,
blank
=
True
)),
(
'expedition_date'
,
self
.
gf
(
'django.db.models.fields.DateField'
)(
null
=
True
,
blank
=
True
)),
))
db
.
send_create_signal
(
u'newsletter'
,
[
'Newsletter'
])
def
backwards
(
self
,
orm
):
# Deleting model 'Newsletter'
db
.
delete_table
(
u'newsletter_newsletter'
)
models
=
{
u'newsletter.newsletter'
:
{
'Meta'
:
{
'ordering'
:
"['date']"
,
'object_name'
:
'Newsletter'
},
'date'
:
(
'django.db.models.fields.DateField'
,
[],
{}),
'expedition_date'
:
(
'django.db.models.fields.DateField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'subject'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
}),
'text'
:
(
'ckeditor.fields.RichTextField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
})
},
u'newsletter.subscriber'
:
{
'Meta'
:
{
'object_name'
:
'Subscriber'
},
'email'
:
(
'django.db.models.fields.EmailField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'75'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'inscription_date'
:
(
'django.db.models.fields.DateField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'is_registered'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'is_validated'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
}
}
complete_apps
=
[
'newsletter'
]
\ No newline at end of file
newsletter/migrations/0003_auto__del_field_newsletter_expedition_date__add_field_newsletter_exped.py
0 → 100644
View file @
6881bb9c
# -*- coding: utf-8 -*-
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Deleting field 'Newsletter.expedition_date'
db
.
delete_column
(
u'newsletter_newsletter'
,
'expedition_date'
)
# Adding field 'Newsletter.expedition_datetime'
db
.
add_column
(
u'newsletter_newsletter'
,
'expedition_datetime'
,
self
.
gf
(
'django.db.models.fields.DateTimeField'
)(
null
=
True
,
blank
=
True
),
keep_default
=
False
)
def
backwards
(
self
,
orm
):
# Adding field 'Newsletter.expedition_date'
db
.
add_column
(
u'newsletter_newsletter'
,
'expedition_date'
,
self
.
gf
(
'django.db.models.fields.DateField'
)(
null
=
True
,
blank
=
True
),
keep_default
=
False
)
# Deleting field 'Newsletter.expedition_datetime'
db
.
delete_column
(
u'newsletter_newsletter'
,
'expedition_datetime'
)
models
=
{
u'newsletter.newsletter'
:
{
'Meta'
:
{
'ordering'
:
"['date']"
,
'object_name'
:
'Newsletter'
},
'date'
:
(
'django.db.models.fields.DateField'
,
[],
{}),
'expedition_datetime'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'subject'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
}),
'text'
:
(
'ckeditor.fields.RichTextField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
})
},
u'newsletter.subscriber'
:
{
'Meta'
:
{
'object_name'
:
'Subscriber'
},
'email'
:
(
'django.db.models.fields.EmailField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'75'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'inscription_date'
:
(
'django.db.models.fields.DateField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'is_registered'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'is_validated'
:
(
'django.db.models.fields.NullBooleanField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
}
}
complete_apps
=
[
'newsletter'
]
\ No newline at end of file
newsletter/migrations/__init__.py
0 → 100644
View file @
6881bb9c
newsletter/models.py
View file @
6881bb9c
...
...
@@ -9,9 +9,12 @@ from django.db import models
from
django.template
import
loader
,
Context
from
django.conf
import
settings
from
django.utils.translation
import
ugettext
as
_
from
django.utils.translation
import
ugettext
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.core.mail
import
send_mail
# rajout d'un commentaire inutile
from
ckeditor.fields
import
RichTextField
class
Subscriber
(
models
.
Model
)
:
email
=
models
.
EmailField
(
unique
=
True
)
# TODO : informer si déjà inscrit ? Que faire dans ce cas.
...
...
@@ -44,3 +47,17 @@ class Subscriber(models.Model) :
return
self
.
is_registered
=
True
self
.
save
()
class
Newsletter
(
models
.
Model
):
class
Meta
:
verbose_name
=
_
(
'Newsletter'
)
verbose_name_plural
=
_
(
'Newsletters'
)
ordering
=
[
'date'
]
subject
=
models
.
CharField
(
_
(
'Title'
),
max_length
=
50
)
date
=
models
.
DateField
(
_
(
'Date'
))
text
=
RichTextField
(
_
(
'Text'
),
null
=
True
,
blank
=
True
)
expedition_datetime
=
models
.
DateTimeField
(
_
(
'Expedition Date/time'
),
null
=
True
,
blank
=
True
)
newsletter/templates/newsletter/newsletter_detail.html
0 → 100644
View file @
6881bb9c
{% extends "base.html" %}
{% block appbar %}
<h2>
{{ object.date }}
</h2>
{% endblock %}
{% block content %}
{% if perms.newsletter.add_newsletter %}
<p>
<a
class=
"big-friendly-button"
href=
"{% url 'newsletter-edit' pk=object.id %}"
>
Modifier
</a>
<a
class=
"big-friendly-button"
href=
"#"
>
Envoyer
</a>
</p>
{% endif %}
{% if newsletter.text %}
{{ newsletter.text|safe }}
{% endif %}
{% endblock %}
newsletter/templates/newsletter/newsletter_form.html
0 → 100644
View file @
6881bb9c
{% extends "base.html" %}
{% block extrascripts %}
<script
src=
"{{ STATIC_URL }}ckeditor/ckeditor/ckeditor.js"
>
</script>
{% endblock %}
{% block appbar %}
{% if object %}
<h2>
{{ object.date }}
</h2>
{% else %}
<h2>
Nouvelle newsletter
</h2>
{% endif %}
{% endblock %}
{% block content %}
<form
method=
"post"
>
<div
id=
"form-content"
>
{% csrf_token %}
{{ form.as_p }}
</div>
{% block buttons %}
<button
class=
"enable-on-change"
>
Enregistrer
</button>
{% endblock %}
</form>
{% endblock %}
newsletter/templates/newsletter/newsletter_list.html
0 → 100644
View file @
6881bb9c
{% extends "base.html" %}
{% block appbar %}
<h2>
Newsletters
</h2>
</span>
{% endblock %}
{% block content %}
{% if perms.newsletter.add_newsletter %}
<p>
<a
class=
"big-friendly-button"
href=
"{% url 'newsletter-create' %}"
>
Nouvelle
</a>
</p>
{% endif %}
<ul
class=
"emission-list"
>
{% for newsletter in object_list %}
<li><a
href=
"{% url 'newsletter-view' pk=newsletter.id %}/"
>
{{ newsletter.date }}
</a></li>
{% endfor %}
</ul>
{% endblock %}
newsletter/urls.py
View file @
6881bb9c
...
...
@@ -8,3 +8,10 @@ urlpatterns = patterns('',
url
(
r'^(?P<token>[0-9a-f]{40})$'
,
'newsletter.views.confirmation'
,
name
=
'newsletter-confirmation'
),
url
(
r'^unsubscription/$'
,
unsubscription
),
)
management_patterns
=
patterns
(
'newsletter.views'
,
url
(
r'^$'
,
'newsletter_list'
,
name
=
'newsletter-list'
),
url
(
r'^add$'
,
'newsletter_create'
,
name
=
'newsletter-create'
),
url
(
r'^(?P<pk>\d+)/$'
,
'newsletter_view'
,
name
=
'newsletter-view'
),
url
(
r'^(?P<pk>\d+)/edit$'
,
'newsletter_update'
,
name
=
'newsletter-edit'
),
)
newsletter/views.py
View file @
6881bb9c
...
...
@@ -6,18 +6,24 @@ import socket
import
urllib
import
urllib2
import
cookielib
import
datetime
from
smtplib
import
SMTPException
from
django.conf
import
settings
from
django.core.exceptions
import
PermissionDenied
from
django.core.urlresolvers
import
reverse_lazy
from
django.db
import
models
,
IntegrityError
from
django.shortcuts
import
get_object_or_404
from
django.utils.translation
import
ugettext
as
_
from
django.views.generic.base
import
TemplateView
from
django.views.generic.edit
import
CreateView
from
django.views.generic.detail
import
DetailView
from
django.views.generic.list
import
ListView
from
django.views.generic.edit
import
CreateView
,
UpdateView
from
.forms
import
SubscribeForm
from
.models
import
Subscriber
from
.forms
import
SubscribeForm
,
NewsletterForm
from
.models
import
Subscriber
,
Newsletter
class
SubscribeView
(
CreateView
):
...
...
@@ -79,3 +85,45 @@ def unsubscription(request) :
except
Subscriber
.
DoesNotExist
:
error_message
=
_
(
"The entered email address does not exist. Please try another one."
)
return
render
(
request
,
'unsubscription_form.html'
,
{
'form'
:
form
,
'message'
:
error_message
})
class
NewsletterCreateView
(
CreateView
):
form_class
=
NewsletterForm
model
=
Newsletter
success_url
=
reverse_lazy
(
'newsletter-list'
)
def
get_form
(
self
,
*
args
,
**
kwargs
):
if
not
self
.
request
.
user
.
has_perm
(
'newsletter.add_newsletter'
):
raise
PermissionDenied
()
return
super
(
NewsletterCreateView
,
self
).
get_form
(
*
args
,
**
kwargs
)
def
get_initial
(
self
):
initial
=
super
(
NewsletterCreateView
,
self
).
get_initial
()
initial
[
'date'
]
=
datetime
.
datetime
.
today
()
return
initial
newsletter_create
=
NewsletterCreateView
.
as_view
()
class
NewsletterListView
(
ListView
):
model
=
Newsletter
newsletter_list
=
NewsletterListView
.
as_view
()
class
NewsletterDetailView
(
DetailView
):
model
=
Newsletter
newsletter_view
=
NewsletterDetailView
.
as_view
()
class
NewsletterUpdateView
(
UpdateView
):
form_class
=
NewsletterForm
model
=
Newsletter
def
get_form
(
self
,
*
args
,
**
kwargs
):
if
not
self
.
request
.
user
.
has_perm
(
'newsletter.add_newsletter'
):
raise
PermissionDenied
()
return
super
(
NewsletterUpdateView
,
self
).
get_form
(
*
args
,
**
kwargs
)
newsletter_update
=
NewsletterUpdateView
.
as_view
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment