diff --git a/app/urls.py b/app/urls.py index 55f7523..b8b2c32 100644 --- a/app/urls.py +++ b/app/urls.py @@ -7,6 +7,7 @@ import core.views.book_search import core.views.chat import core.views.calendar +import core.views.newsletter_signup urlpatterns = [ @@ -17,4 +18,5 @@ path('example/', core.views.example.example, name='example'), path('chat/', core.views.chat.chat, name='chat'), path('calendar/', core.views.calendar.calendar, name="calendar"), + path('newsletter-signup', core.views.newsletter_signup.view, name='newsletter-signup') ] + staticfiles_urlpatterns() diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..d3a0aa0 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2 on 2021-04-25 17:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='NewsletterSubscription', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.EmailField(max_length=254)), + ('name', models.CharField(max_length=256)), + ], + ), + ] diff --git a/core/models.py b/core/models.py index 71a8362..94f28bd 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,6 @@ from django.db import models -# Create your models here. + +class NewsletterSubscription(models.Model): + email = models.EmailField() + name = models.CharField(max_length=256) diff --git a/core/reflexes/newsletter_signup_reflex.py b/core/reflexes/newsletter_signup_reflex.py new file mode 100644 index 0000000..2f78573 --- /dev/null +++ b/core/reflexes/newsletter_signup_reflex.py @@ -0,0 +1,15 @@ +from sockpuppet.reflex import Reflex + +from core.models import NewsletterSubscription + + +class SubscriptionReflex(Reflex): + def add_person(self): + o = NewsletterSubscription.objects.update_or_create( + name=self.params['name'], + email=self.params['email'] + ) + + def remove_person(self): + id = self.element.dataset['id'] + NewsletterSubscription.objects.filter(id=id).delete() diff --git a/core/templates/_newsletter_signup.html b/core/templates/_newsletter_signup.html new file mode 100644 index 0000000..89820fe --- /dev/null +++ b/core/templates/_newsletter_signup.html @@ -0,0 +1,33 @@ +{% load static %} + + + + +

Sign up for newsletter!

+
+ {{ form }} + +
+

Signed:

+ + + + + + + + + + {% for p in people %} + + + + + + {% endfor %} + +
NameEmailRemove
{{ p.name }} {{ p.email }}Remove
+
+
+ diff --git a/core/views/newsletter_signup.py b/core/views/newsletter_signup.py new file mode 100644 index 0000000..2b969be --- /dev/null +++ b/core/views/newsletter_signup.py @@ -0,0 +1,23 @@ +from django.forms import ModelForm +from django.views.generic.edit import FormView + +from core.models import NewsletterSubscription + + +class NewsletterSubscriptionForm(ModelForm): + class Meta: + model = NewsletterSubscription + fields = ['name', 'email'] + + +class YourReflexNameView(FormView): + template_name = '_newsletter_signup.html' + form_class = NewsletterSubscriptionForm + + def get_context_data(self, *args, **kwargs): + context = super().get_context_data(*args, **kwargs) + context['people'] = NewsletterSubscription.objects.all() + return context + + +view = YourReflexNameView.as_view()