From dae32a0bbadf8d4dd8cdf90a7f9a2452d7df38b5 Mon Sep 17 00:00:00 2001 From: brett Date: Wed, 4 Oct 2017 17:26:11 +0100 Subject: [PATCH 1/4] Swapped login required decorator for login required mixin --- mhackspace/requests/views.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mhackspace/requests/views.py b/mhackspace/requests/views.py index 6b8bd4a..0864759 100644 --- a/mhackspace/requests/views.py +++ b/mhackspace/requests/views.py @@ -1,5 +1,4 @@ -from django.contrib.auth.decorators import login_required -from django.utils.decorators import method_decorator +from django.contrib.auth.mixins import LoginRequiredMixin from django.core.mail import EmailMessage from django.contrib import messages from mhackspace.requests.forms import UserRequestForm @@ -8,8 +7,7 @@ from django.views.generic import ListView from django.views.generic.edit import FormView -@method_decorator(login_required, name='dispatch') -class RequestsForm(FormView): +class RequestsForm(LoginRequiredMixin, FormView): template_name = 'pages/requests.html' form_class = UserRequestForm success_url = '/requests' @@ -30,8 +28,8 @@ class RequestsForm(FormView): return super(FormView, self).form_valid(form) -@method_decorator(login_required, name='dispatch') -class RequestsList(ListView): + +class RequestsList(LoginRequiredMixin, ListView): template_name = 'pages/requests.html' model = UserRequests context_object_name = 'requests' From bd87789d88056433ff17991d52bff838ba612714 Mon Sep 17 00:00:00 2001 From: brett Date: Wed, 4 Oct 2017 17:31:16 +0100 Subject: [PATCH 2/4] 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 %} From d80138e4ed7c2dbc2d13235e9bc690f9422284b0 Mon Sep 17 00:00:00 2001 From: brett Date: Fri, 6 Oct 2017 20:16:34 +0100 Subject: [PATCH 3/4] Completed register app --- config/settings/common.py | 1 + mhackspace/register/admin.py | 6 +++++- mhackspace/register/managers.py | 9 +++------ mhackspace/register/models.py | 4 ++-- mhackspace/register/views.py | 23 +++++++++-------------- 5 files changed, 20 insertions(+), 23 deletions(-) diff --git a/config/settings/common.py b/config/settings/common.py index a6121a7..67361ea 100644 --- a/config/settings/common.py +++ b/config/settings/common.py @@ -141,6 +141,7 @@ LOCAL_APPS = ( 'mhackspace.blog', 'mhackspace.core', 'mhackspace.requests', + 'mhackspace.register', 'mhackspace.rfid', ) diff --git a/mhackspace/register/admin.py b/mhackspace/register/admin.py index 8c38f3f..beaeeb1 100644 --- a/mhackspace/register/admin.py +++ b/mhackspace/register/admin.py @@ -1,3 +1,7 @@ from django.contrib import admin +from mhackspace.register.models import RegisteredUser -# Register your models here. + +@admin.register(RegisteredUser) +class RegisteredUserAdmin(admin.ModelAdmin): + list_display = ('name', 'user_id', 'created_at') diff --git a/mhackspace/register/managers.py b/mhackspace/register/managers.py index 1381eb7..50471d8 100644 --- a/mhackspace/register/managers.py +++ b/mhackspace/register/managers.py @@ -4,9 +4,6 @@ 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() + def is_registered(self, user): + today = datetime.date.today() + return super(RegisteredUserManager, self).get_queryset().filter(user=user, created_at__gte=today).exists() diff --git a/mhackspace/register/models.py b/mhackspace/register/models.py index 8e34356..0a62921 100644 --- a/mhackspace/register/models.py +++ b/mhackspace/register/models.py @@ -5,8 +5,8 @@ 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) + user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+', null=True, blank=True) + name = models.CharField(max_length=100, null=False, blank=False) created_at = models.DateTimeField(default=timezone.now) objects = RegisteredUserManager() diff --git a/mhackspace/register/views.py b/mhackspace/register/views.py index 102b837..8fae192 100644 --- a/mhackspace/register/views.py +++ b/mhackspace/register/views.py @@ -1,4 +1,5 @@ from django.views.generic.edit import FormView + from mhackspace.register.forms import RegisteredUserForm from mhackspace.register.models import RegisteredUser @@ -9,22 +10,16 @@ class RegisterForm(FormView): 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) + if not RegisteredUser.objects.is_registered(request.user): + registered_user = RegisteredUser.objects.create(user=request.user, name=request.user.username) + registered_user.save() + return super(RegisterForm, self).form_valid(None) return super(RegisterForm, self).get(self, request, *args, **kwargs) + def form_valid(self, form): + if form.is_valid(): + form.save() - # Need to prevent a user registering twice - # Need to think of a way to prevent people registering multiple times with different names - + return super(RegisterForm, self).form_valid(form) From ac133ab67a4a9f2b4332b65923c17e117d1275f0 Mon Sep 17 00:00:00 2001 From: brett Date: Fri, 6 Oct 2017 20:26:20 +0100 Subject: [PATCH 4/4] Removed unnecessary js script --- mhackspace/templates/pages/register.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mhackspace/templates/pages/register.html b/mhackspace/templates/pages/register.html index c75da90..d8839c7 100644 --- a/mhackspace/templates/pages/register.html +++ b/mhackspace/templates/pages/register.html @@ -31,8 +31,3 @@ {% endif %} {% endblock content %} - -{% block javascript %} - {{ block.super }} - -{% endblock %}