]> git.0d.be Git - django-panik-newsletter.git/commitdiff
rewrote subscribe form
authorFrédéric Péters <fpeters@0d.be>
Sun, 1 Sep 2013 19:24:40 +0000 (21:24 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sun, 1 Sep 2013 19:24:40 +0000 (21:24 +0200)
newsletter/forms.py
newsletter/models.py
newsletter/templates/registration.html
newsletter/templates/subscription_form.html [deleted file]
newsletter/urls.py
newsletter/views.py

index 0e39bde1e085c04a5296f80f4563e79a5d5c0709..79bdfc02ddfbf8b388af3e88fecfa9821e55dc4d 100644 (file)
@@ -1,6 +1,7 @@
-# *-* coding: utf8 -*-
-
 from django import forms
 from django import forms
+from .models import Subscriber
 
 
-class SubscriptionForm(forms.Form):
-    email = forms.EmailField()
+class SubscribeForm(forms.ModelForm):
+    class Meta:
+        model = Subscriber
+        exclude = ('inscription_date', 'is_validated', 'is_registered', 'password')
index ba7972cc2c1d7ddc410089626a88b14270fe0043..2d1236f120b9a01eed834db94c727039cff300fd 100644 (file)
@@ -1,5 +1,8 @@
 # -*- coding: utf8 -*-
 
 # -*- coding: utf8 -*-
 
+import hashlib
+import random
+
 from django.db import models
 
 from django.template import loader, Context 
 from django.db import models
 
 from django.template import loader, Context 
@@ -19,31 +22,17 @@ class Subscriber(models.Model) :
     def __unicode__(self) :
         return self.email
 
     def __unicode__(self) :
         return self.email
 
-
     def save(self, *args, **kwargs):
         super(Subscriber, self).save(*args, **kwargs)
         if self.is_validated is None:
     def save(self, *args, **kwargs):
         super(Subscriber, self).save(*args, **kwargs)
         if self.is_validated is None:
-            self.send_confirmation_email(args[0])
-
-    def send_confirmation_email(self, request):
-        subject = _("%s's newsletter registration." % settings.ORGANIZATION)
-        confirmation_link = ("%s/newsletter/%s" % (request.get_host(), self.password))
-        sender = ("noreplay@%s" % request.get_host().strip("www."))
-        organization = settings.ORGANIZATION
-        organization_url = request.get_host()
-        message = loader.get_template("confirmation_email.txt")
-        message_context = Context({
-            'organization' : organization, 
-            'organization_url' : organization_url, 
-            'confirmation_link' : confirmation_link,
-        })
-        # Susceptible de lever une socket.error ou une SMTPException
-        send_mail(
-            subject,
-            message.render(message_context),
-            sender,
-            [self.email]
-        )
-        self.is_validated=False
+            self.send_confirmation_email()
+
+    def send_confirmation_email(self):
+        self.password = hashlib.sha1(str(random.random())).hexdigest()
+        confirm_subject = loader.get_template('newsletter/confirmation_email_subject.txt')
+        confirm_body = loader.get_template('newsletter/confirmation_email_body.txt')
+        context = Context({})
+        send_mail(confirm_subject.render(context).strip(), confirm_body.render(context),
+                settings.NEWSLETTER_SENDER, [self.email])
+        self.is_validated = False
         self.save()
         self.save()
-
index de954176dd4dfe76fc0d7168648c09b18ba7838b..a4e17accb4a2523c1bd45c9ab71688b0fa237d46 100644 (file)
@@ -1,3 +1,5 @@
+{% extends "base.html" %}
+
 {% block newsletter_confirmation %}
 
     {% if user_exist %}
 {% block newsletter_confirmation %}
 
     {% if user_exist %}
diff --git a/newsletter/templates/subscription_form.html b/newsletter/templates/subscription_form.html
deleted file mode 100644 (file)
index 6dd6e6a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-{% block newsletter_form %}
-    {% if is_sent %}
-        <p>
-            Vous devriez recevoir sous peu un mail de confirmation dans votre boîte mail.
-        </p>
-    {% endif %}
-    {% if custom_errors %}
-        <p>
-        {% for error in custom_errors %}
-            {{ error }} </br>
-        {% endfor %}
-        </p>
-    {% endif %}
-
-    <form action="" method="post" >
-        <ul> 
-            {{ form.as_ul }}
-        </ ul>
-        {% csrf_token %}
-        <input type="submit" value="Soumettre">
-    </form> 
-{% endblock %}   
index 91d9ac56660d9f70c9cd10649b392272f30afed8..e2b8c63f79a3544d651fa52eca2e5bb19f213003 100644 (file)
@@ -1,10 +1,10 @@
 from django.conf.urls import *
 from django.conf import settings
 from django.conf.urls import *
 from django.conf import settings
-from .views import subscription, unsubscription, registration
+from .views import unsubscription, registration
 
 urlpatterns = patterns('',
 
 urlpatterns = patterns('',
-    url(r'^$', subscription),
+    url(r'^$', 'newsletter.views.subscribe', name='newsletter-subscribe'),
+    url(r'^thanks/$', 'newsletter.views.thanks', name='newsletter-thanks'),
     url(r'^unsubscription/$', unsubscription),
     url(r'^(?P<validation_value>[0-9a-f]{40})$', registration), 
 )
     url(r'^unsubscription/$', unsubscription),
     url(r'^(?P<validation_value>[0-9a-f]{40})$', registration), 
 )
-
index c3e90583a006b3eb04598bc60b284df78433ce4d..09fb952b97d392ef1266e63a724ff0da7d44691d 100644 (file)
@@ -9,51 +9,27 @@ import cookielib
 
 from smtplib import SMTPException 
 
 
 from smtplib import SMTPException 
 
-from django.db import models, IntegrityError
 from django.conf import settings
 from django.conf import settings
-
-from django.shortcuts import render
+from django.db import models, IntegrityError
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
+from django.views.generic.base import TemplateView
+from django.views.generic.edit import CreateView
 
 
-from .forms import SubscriptionForm
-from .models import Subscriber 
+from .forms import SubscribeForm
+from .models import Subscriber
 
 
 
 
-def subscription(request) :
-    INTEGRITY_ERROR = _("You're already registered at our newsletter.")
-    SOCKET_ERROR = _("Connexion error. Try later.")
-    SMTP_ERROR = _("Error to sending email.")
-    REVALIDATION_ERROR = _("You've already receipt a confirmation email.")
-    
-    if request.method == 'POST' :
-        form = SubscriptionForm(request.POST)
-        custom_errors = []
-        if form.is_valid() :
-            cd = form.cleaned_data
-            # Va aussi servir pour le lien de validation.
-            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(request)
-                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 :
-        form = SubscriptionForm()
-        return render(request, "subscription_form.html", {'form' : form})
+class SubscribeView(CreateView):
+    form_class = SubscribeForm
+    model = Subscriber
+
+    success_url = 'thanks'
+subscribe = SubscribeView.as_view()
+
 
 
+class ThanksView(TemplateView):
+    template_name = 'newsletter/thanks.html'
+thanks = ThanksView.as_view()
 
 
 def unsubscription(request) :
 
 
 def unsubscription(request) :