# -*- 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
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)
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
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)
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 :