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 -*-
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)
......@@ -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>
......
......@@ -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 :
......
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