]> git.0d.be Git - django-panik-newsletter.git/blob - views.py
c1b575104cc247c895d8b61d6eb6f0e1aab7aa4c
[django-panik-newsletter.git] / views.py
1 # -*- coding: utf8 -*-
2
3 import hashlib
4 import random
5 import socket
6
7 from smtplib import SMTPException 
8
9 from django.db import models, IntegrityError
10 from django.shortcuts import render
11 from django.core.mail import send_mail
12
13 from .forms import SubscriptionForm
14 from .models import Subscriber 
15
16
17 def subscription(request) :
18     INTEGRITY_ERROR = u"Vous êtes déjà inscrit à notre newsletter."
19     SOCKET_ERROR = u"Connexion impossible pour l'instant."
20     SMTP_ERROR = u"Échec de l'envoi du message"
21     REVALIDATION_ERROR = u"Vous avez déjà reçu un mail de confirmation pour votre inscription."
22     
23     if request.method == 'POST' :
24         form = SubscriptionForm(request.POST)
25         custom_errors = []
26         if form.is_valid() :
27             cd = form.cleaned_data
28             # Va aussi servir pour le lien de validation.
29             passwd = hashlib.sha1(str(random.random())).hexdigest()
30             
31             subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False)
32             is_sent=False
33             try :
34                 subscriber.save()
35                 is_sent=True
36             except IntegrityError :
37                 custom_errors.append(INTEGRITY_ERROR)
38                 if(Subscriber.objects.get(email=subscriber.email).is_validated != False) :
39                     custom_errors.append(REVALIDATION_ERROR)
40             except socket.error :
41                 custom_errors.append(SOCKET_ERROR)
42             except SMTPException :
43                 custom_errors.append(SMTP_ERROR)
44
45             return render(request, 'subscription_form.html', {'form' : form, 'custom_errors' : custom_errors, 'is_sent' : is_sent})
46         else :
47             return render(request, 'subscription_form.html', {'form' : form})
48     else :
49         form = SubscriptionForm()
50         return render(request, "subscription_form.html", {'form' : form})
51
52