Commit 1350dc37 authored by jean-philippe's avatar jean-philippe

Quelques changements dans le modèle et la vue de la souscritpion.

parent 88097e56
# -*- coding: utf8 -*- # -*- coding: utf8 -*-
from smtplib import SMTPException
import socket
from django.db import models from django.db import models
from django.core.mail import send_mail from django.core.mail import send_mail
class Subscriber(models.Model) : class Subscriber(models.Model) :
email = models.EmailField(unique = True) # TODO : informer si déjà inscrit ? Que faire dans ce cas. email = models.EmailField(unique = True) # TODO : informer si déjà inscrit ? Que faire dans ce cas.
inscription_date = models.DateField(auto_now_add=True) 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_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. 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) : def __unicode__(self) :
return self.email return self.email
...@@ -22,19 +19,16 @@ class Subscriber(models.Model) : ...@@ -22,19 +19,16 @@ class Subscriber(models.Model) :
self.send_confirmation_email() self.send_confirmation_email()
def send_confirmation_email(self): def send_confirmation_email(self):
subject = 'confirmation de votre inscription' if(self.is_validated==None):
message = 'blabla, veuillez cliquer sur le lien suivant http://127.0.0.1:8000/newsletter%s' % self.password subject = 'confirmation de votre inscription'
sender = 'no-reply@panik.org' message = 'blabla, veuillez cliquer sur le lien suivant http://127.0.0.1:8000/newsletter%s' % self.password
try : sender = 'no-reply@panik.org'
# Susceptible de lever une socket.error ou une SMTPException
send_mail( send_mail(
subject, subject,
message, message,
sender, sender,
[self.email] [self.email]
) )
except socket.error as error : Subscriber.objects.filter(email=self.email).update(is_validated=False)
raise error
self.is_validated=False
Subscriber.objects.filter(email=self.email).update(is_validated=False)
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
{% endif %} {% endif %}
<form action="" method="post" > <form action="" method="post" >
<table> <ul>
{{ form.as_table }} {{ form.as_ul }}
</ table> </ ul>
{% csrf_token %} {% csrf_token %}
<input type="submit" value="Soumettre"> <input type="submit" value="Soumettre">
</form> </form>
......
...@@ -2,9 +2,10 @@ ...@@ -2,9 +2,10 @@
import hashlib import hashlib
import random import random
import socket import socket
from smtplib import SMTPException
from django.db import models, IntegrityError from django.db import models, IntegrityError
from django.shortcuts import render from django.shortcuts import render
from django.core.mail import send_mail from django.core.mail import send_mail
...@@ -12,9 +13,12 @@ from django.core.mail import send_mail ...@@ -12,9 +13,12 @@ from django.core.mail import send_mail
from .forms import SubscriptionForm from .forms import SubscriptionForm
from .models import Subscriber from .models import Subscriber
# Create your views here.
def subscription(request) : 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' : if request.method == 'POST' :
form = SubscriptionForm(request.POST) form = SubscriptionForm(request.POST)
...@@ -25,14 +29,20 @@ def subscription(request) : ...@@ -25,14 +29,20 @@ def subscription(request) :
passwd = hashlib.sha1(str(random.random())).hexdigest() passwd = hashlib.sha1(str(random.random())).hexdigest()
subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False) subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False)
is_sent=False
try : try :
subscriber.save() subscriber.save()
except IntegrityError, validation_error : is_sent=True
custom_errors.append(str(validation_error)) except IntegrityError :
except socket.error: custom_errors.append(INTEGRITY_ERROR)
custom_errors.append("Connexion impossible pour l'instant") if(Subscriber.objects.get(email=subscriber.email).is_validated != False) :
custom_errors.append(REVALIDATION_ERROR)
return render(request, 'subscription_form.html', {'form' : form, 'custom_errors' : custom_errors}) 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 : else :
return render(request, 'subscription_form.html', {'form' : form}) return render(request, 'subscription_form.html', {'form' : form})
else : else :
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment