8 from smtplib import SMTPException
10 from django.db import models, IntegrityError
11 from django.shortcuts import render
12 from django.conf import settings
13 from django.utils.translation import ugettext as _
15 from .forms import SubscriptionForm
16 from .models import Subscriber
19 def subscription(request) :
20 INTEGRITY_ERROR = _("You're already registered at our newsletter.")
21 SOCKET_ERROR = _("Connexion error. Try later.")
22 SMTP_ERROR = _("Error to sending email.")
23 REVALIDATION_ERROR = _("You've already receipt a confirmation email.")
25 if request.method == 'POST' :
26 form = SubscriptionForm(request.POST)
29 cd = form.cleaned_data
30 # Va aussi servir pour le lien de validation.
31 passwd = hashlib.sha1(str(random.random())).hexdigest()
33 subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False)
36 subscriber.save(request)
38 except IntegrityError :
39 custom_errors.append(INTEGRITY_ERROR)
40 if(Subscriber.objects.get(email=subscriber.email).is_validated != False) :
41 custom_errors.append(REVALIDATION_ERROR)
43 custom_errors.append(SOCKET_ERROR)
44 except SMTPException :
45 custom_errors.append(SMTP_ERROR)
47 return render(request, 'subscription_form.html', {'form' : form, 'custom_errors' : custom_errors, 'is_sent' : is_sent})
49 return render(request, 'subscription_form.html', {'form' : form})
51 form = SubscriptionForm()
52 return render(request, "subscription_form.html", {'form' : form})
57 def registration(request, validation_value) :
59 registration_message = ''
61 subscriber = Subscriber.objects.get(password = validation_value)
62 subscriber.is_validated = True
64 if subscriber.is_registered is False :
65 params = urllib.urlencode({'email' : subscriber.email, 'fullname' : '', 'pw' : subscriber.password, 'pw-conf' : subscriber.password, 'digest' : '0'})
66 response = urllib.urlopen(settings.NEWSLETTER_SUBSCRIPTION_URL, params)
67 if response.getcode() == 200 :
68 subscriber.is_registered = True
69 registration_message = _("You subscribed to our newsletter.")
71 subscriber.is_registered = None # TODO : rajouter une méthode niveau table pour gérer les enregistrements qui échouent (pareil pour la souscription proprement dite).
72 elif subscriber.is_registered :
73 error_message = _('You already subscribed to our newsletter.')
75 error_message = _('Your subscription is pending.')
79 return render(request, 'registration.html', {'user_exist' : True, 'error_message' : error_message, 'registration_message' : registration_message })
81 except Subscriber.DoesNotExist :
82 error_message = _('Forbidden page.')
83 return render(request, 'registration.html', {'user_exist' : False, 'error_message' : error_message})