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
Incidents
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
1350dc37
Commit
1350dc37
authored
Jul 09, 2013
by
jean-philippe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Quelques changements dans le modèle et la vue de la souscritpion.
parent
88097e56
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
25 deletions
+29
-25
models.py
models.py
+8
-14
templates/subscription_form.html
templates/subscription_form.html
+3
-3
views.py
views.py
+18
-8
No files found.
models.py
View file @
1350dc37
# -*- coding: utf8 -*-
from
smtplib
import
SMTPException
import
socket
from
django.db
import
models
from
django.core.mail
import
send_mail
class
Subscriber
(
models
.
Model
)
:
email
=
models
.
EmailField
(
unique
=
True
)
# TODO : informer si déjà inscrit ? Que faire dans ce cas.
inscription_date
=
models
.
DateField
(
auto_now_add
=
True
)
is_validated
=
models
.
NullBooleanField
()
# Au click sur le lien de confirmation. Null si erreur à l'envoi au souscripteur.
is_registered
=
models
.
NullBooleanField
()
# À l'inscription après la confirmation Null si erreur à l'envoi à mailman.
password
=
models
.
CharField
(
max_length
=
100
)
# sh1
password
=
models
.
CharField
(
max_length
=
100
)
# sha1
def
__unicode__
(
self
)
:
return
self
.
email
...
...
@@ -22,19 +19,16 @@ class Subscriber(models.Model) :
self
.
send_confirmation_email
()
def
send_confirmation_email
(
self
):
subject
=
'confirmation de votre inscription'
message
=
'blabla, veuillez cliquer sur le lien suivant http://127.0.0.1:8000/newsletter%s'
%
self
.
password
sender
=
'no-reply@panik.org'
try
:
if
(
self
.
is_validated
==
None
):
subject
=
'confirmation de votre inscription'
message
=
'blabla, veuillez cliquer sur le lien suivant http://127.0.0.1:8000/newsletter%s'
%
self
.
password
sender
=
'no-reply@panik.org'
# Susceptible de lever une socket.error ou une SMTPException
send_mail
(
subject
,
message
,
sender
,
[
self
.
email
]
)
except
socket
.
error
as
error
:
raise
error
self
.
is_validated
=
False
Subscriber
.
objects
.
filter
(
email
=
self
.
email
).
update
(
is_validated
=
False
)
Subscriber
.
objects
.
filter
(
email
=
self
.
email
).
update
(
is_validated
=
False
)
templates/subscription_form.html
View file @
1350dc37
...
...
@@ -14,9 +14,9 @@
{% endif %}
<form
action=
""
method=
"post"
>
<
table
>
{{ form.as_
table
}}
</
table
>
<
ul
>
{{ form.as_
ul
}}
</
ul
>
{% csrf_token %}
<input
type=
"submit"
value=
"Soumettre"
>
</form>
...
...
views.py
View file @
1350dc37
...
...
@@ -2,9 +2,10 @@
import
hashlib
import
random
import
socket
from
smtplib
import
SMTPException
from
django.db
import
models
,
IntegrityError
from
django.shortcuts
import
render
from
django.core.mail
import
send_mail
...
...
@@ -12,9 +13,12 @@ from django.core.mail import send_mail
from
.forms
import
SubscriptionForm
from
.models
import
Subscriber
# Create your views here.
def
subscription
(
request
)
:
INTEGRITY_ERROR
=
u
"Vous êtes déjà inscrit à notre newsletter."
SOCKET_ERROR
=
u
"Connexion impossible pour l'instant."
SMTP_ERROR
=
u
"Échec de l'envoi du message"
REVALIDATION_ERROR
=
u
"Vous avez déjà reçu un mail de confirmation pour votre inscription."
if
request
.
method
==
'POST'
:
form
=
SubscriptionForm
(
request
.
POST
)
...
...
@@ -25,14 +29,20 @@ def subscription(request) :
passwd
=
hashlib
.
sha1
(
str
(
random
.
random
())).
hexdigest
()
subscriber
=
Subscriber
(
email
=
cd
[
'email'
],
password
=
passwd
,
is_validated
=
None
,
is_registered
=
False
)
is_sent
=
False
try
:
subscriber
.
save
()
except
IntegrityError
,
validation_error
:
custom_errors
.
append
(
str
(
validation_error
))
except
socket
.
error
:
custom_errors
.
append
(
"Connexion impossible pour l'instant"
)
return
render
(
request
,
'subscription_form.html'
,
{
'form'
:
form
,
'custom_errors'
:
custom_errors
})
is_sent
=
True
except
IntegrityError
:
custom_errors
.
append
(
INTEGRITY_ERROR
)
if
(
Subscriber
.
objects
.
get
(
email
=
subscriber
.
email
).
is_validated
!=
False
)
:
custom_errors
.
append
(
REVALIDATION_ERROR
)
except
socket
.
error
:
custom_errors
.
append
(
SOCKET_ERROR
)
except
SMTPException
:
custom_errors
.
append
(
SMTP_ERROR
)
return
render
(
request
,
'subscription_form.html'
,
{
'form'
:
form
,
'custom_errors'
:
custom_errors
,
'is_sent'
:
is_sent
})
else
:
return
render
(
request
,
'subscription_form.html'
,
{
'form'
:
form
})
else
:
...
...
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