From bd87789d88056433ff17991d52bff838ba612714 Mon Sep 17 00:00:00 2001 From: brett Date: Wed, 4 Oct 2017 17:31:16 +0100 Subject: [PATCH] Temp commit for register feature --- config/settings/common.py | 3 ++ config/urls.py | 4 +++ mhackspace/register/__init__.py | 0 mhackspace/register/admin.py | 3 ++ mhackspace/register/apps.py | 5 ++++ mhackspace/register/forms.py | 8 +++++ mhackspace/register/managers.py | 12 ++++++++ mhackspace/register/models.py | 15 ++++++++++ mhackspace/register/tests.py | 3 ++ mhackspace/register/views.py | 30 +++++++++++++++++++ mhackspace/templates/pages/register.html | 38 ++++++++++++++++++++++++ 11 files changed, 121 insertions(+) create mode 100644 mhackspace/register/__init__.py create mode 100644 mhackspace/register/admin.py create mode 100644 mhackspace/register/apps.py create mode 100644 mhackspace/register/forms.py create mode 100644 mhackspace/register/managers.py create mode 100644 mhackspace/register/models.py create mode 100644 mhackspace/register/tests.py create mode 100644 mhackspace/register/views.py create mode 100644 mhackspace/templates/pages/register.html diff --git a/config/settings/common.py b/config/settings/common.py index 1ac9c19..35fcc54 100644 --- a/config/settings/common.py +++ b/config/settings/common.py @@ -42,6 +42,8 @@ ST_ALLOWED_URL_PROTOCOLS = { ST_UNICODE_SLUGS = True ST_UNIQUE_EMAILS = True ST_CASE_INSENSITIVE_EMAILS = True +ST_UPLOAD_IMAGE_ENABLED = True +ST_UPLOAD_FILE_ENABLED = True # Tests helpers ST_TESTS_RATELIMIT_NEVER_EXPIRE = False @@ -138,6 +140,7 @@ LOCAL_APPS = ( 'mhackspace.blog', 'mhackspace.core', 'mhackspace.requests', + 'mhackspace.register', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps diff --git a/config/urls.py b/config/urls.py index 4595b9d..ec72a2f 100644 --- a/config/urls.py +++ b/config/urls.py @@ -20,6 +20,7 @@ from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostLi from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap from mhackspace.feeds.views import FeedViewSet, ArticleViewSet from mhackspace.requests.views import RequestsForm, RequestsList +from mhackspace.register.views import RegisterForm from wiki.urls import get_pattern as get_wiki_pattern from django_nyt.urls import get_pattern as get_nyt_pattern @@ -83,6 +84,9 @@ urlpatterns = [ url(r'^admin/password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'), url(r'^reset/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', auth_views.password_reset_confirm, name='password_reset_confirm'), url(r'^reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'), + + url(r'^register/$', RegisterForm.as_view(), name='register_form'), + url(r'^register/success$', TemplateView.as_view(template_name='pages/register.html'), name='register_success'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += [ diff --git a/mhackspace/register/__init__.py b/mhackspace/register/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mhackspace/register/admin.py b/mhackspace/register/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/mhackspace/register/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/mhackspace/register/apps.py b/mhackspace/register/apps.py new file mode 100644 index 0000000..0e94c46 --- /dev/null +++ b/mhackspace/register/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class RegisterConfig(AppConfig): + name = 'register' diff --git a/mhackspace/register/forms.py b/mhackspace/register/forms.py new file mode 100644 index 0000000..0a027cd --- /dev/null +++ b/mhackspace/register/forms.py @@ -0,0 +1,8 @@ +from django import forms +from mhackspace.register.models import RegisteredUser + + +class RegisteredUserForm(forms.ModelForm): + class Meta: + model = RegisteredUser + exclude = ['user', 'created_at'] diff --git a/mhackspace/register/managers.py b/mhackspace/register/managers.py new file mode 100644 index 0000000..1381eb7 --- /dev/null +++ b/mhackspace/register/managers.py @@ -0,0 +1,12 @@ +from django.db import models +import datetime + + +class RegisteredUserManager(models.Manager): + + def is_registered(self, name): + if name is None: + return False + + today = datetime.date.today() - datetime.timedelta(days=1) + return super(RegisteredUserManager, self).get_queryset().filter(name=name, created_at__gt=today).exists() diff --git a/mhackspace/register/models.py b/mhackspace/register/models.py new file mode 100644 index 0000000..8e34356 --- /dev/null +++ b/mhackspace/register/models.py @@ -0,0 +1,15 @@ +from django.db import models +from django.conf import settings +from django.utils import timezone +from mhackspace.register.managers import RegisteredUserManager + + +class RegisteredUser(models.Model): + user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+') + name = models.CharField(max_length=100) + created_at = models.DateTimeField(default=timezone.now) + + objects = RegisteredUserManager() + + class Meta: + ordering = ('-created_at',) diff --git a/mhackspace/register/tests.py b/mhackspace/register/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/mhackspace/register/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/mhackspace/register/views.py b/mhackspace/register/views.py new file mode 100644 index 0000000..102b837 --- /dev/null +++ b/mhackspace/register/views.py @@ -0,0 +1,30 @@ +from django.views.generic.edit import FormView +from mhackspace.register.forms import RegisteredUserForm +from mhackspace.register.models import RegisteredUser + + +class RegisterForm(FormView): + template_name = 'pages/register.html' + form_class = RegisteredUserForm + success_url = '/register/success' + + def get(self, request, *args, **kwargs): + name = request.POST.get('name') + if RegisteredUser.objects.is_registered(name): + return self.form_valid() + + if request.user.is_authenticated(): + form_kwargs = self.get_form_kwargs() + form_kwargs['data'] = { + 'user': request.user, + 'name': request.user.name + } + form = self.get_form_class(**form_kwargs) + return self.form_valid(form) + + return super(RegisterForm, self).get(self, request, *args, **kwargs) + + + # Need to prevent a user registering twice + # Need to think of a way to prevent people registering multiple times with different names + diff --git a/mhackspace/templates/pages/register.html b/mhackspace/templates/pages/register.html new file mode 100644 index 0000000..c75da90 --- /dev/null +++ b/mhackspace/templates/pages/register.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% load recapture %} + + +{% block head-open-graph %} + + + + +{% endblock head-open-graph %} + +{% block content %} +

Register

+ + {% if form %} +
+ {% csrf_token %} + {{ form|crispy }} + {{ google_capture }} + +
+ {% else %} +
+
+ Thanks for registering! +
+
+ {% endif %} +{% endblock content %} + +{% block javascript %} + {{ block.super }} + +{% endblock %}