]> git.0d.be Git - django-panik-newsletter.git/commitdiff
Quelques changements dans le modèle et la vue de la souscritpion.
authorjean-philippe <user@server.tld>
Tue, 9 Jul 2013 09:48:56 +0000 (11:48 +0200)
committerjean-philippe <user@server.tld>
Tue, 9 Jul 2013 09:48:56 +0000 (11:48 +0200)
models.py
templates/subscription_form.html
views.py

index 47e394375daaa430ce1fa17727d7b981ee06636b..da6d91dd46c240797b34002ba3c6af2853172cf1 100644 (file)
--- a/models.py
+++ b/models.py
@@ -1,18 +1,15 @@
 # -*- 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)
 
index 69b89bd37d2b2d37f19c0afb29db57f02099e613..6dd6e6a757498aa2b399c26478147ccc41f552be 100644 (file)
@@ -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> 
index b57351d0cbd9bf5cb90aab9ab5247f28616abd27..c1b575104cc247c895d8b61d6eb6f0e1aab7aa4c 100644 (file)
--- a/views.py
+++ b/views.py
@@ -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 :