diff --git a/config/settings/common.py b/config/settings/common.py index 8cf620b..76f5cee 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 @@ -139,6 +141,7 @@ LOCAL_APPS = ( 'mhackspace.blog', 'mhackspace.core', 'mhackspace.requests', + 'mhackspace.register', 'mhackspace.rfid', ) diff --git a/config/urls.py b/config/urls.py index 605549f..a2c437b 100644 --- a/config/urls.py +++ b/config/urls.py @@ -24,6 +24,7 @@ from mhackspace.feeds.views import FeedViewSet, ArticleViewSet from mhackspace.requests.views import RequestsForm, RequestsList from mhackspace.rfid.views import DeviceViewSet, AuthUserWithDeviceViewSet +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 @@ -95,6 +96,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..beaeeb1 --- /dev/null +++ b/mhackspace/register/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from mhackspace.register.models import RegisteredUser + + +@admin.register(RegisteredUser) +class RegisteredUserAdmin(admin.ModelAdmin): + list_display = ('name', 'user_id', 'created_at') 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..50471d8 --- /dev/null +++ b/mhackspace/register/managers.py @@ -0,0 +1,9 @@ +from django.db import models +import datetime + + +class RegisteredUserManager(models.Manager): + + 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 new file mode 100644 index 0000000..0a62921 --- /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='+', null=True, blank=True) + name = models.CharField(max_length=100, null=False, blank=False) + 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..8fae192 --- /dev/null +++ b/mhackspace/register/views.py @@ -0,0 +1,25 @@ +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): + if request.user.is_authenticated(): + 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() + + return super(RegisterForm, self).form_valid(form) 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' diff --git a/mhackspace/templates/pages/register.html b/mhackspace/templates/pages/register.html new file mode 100644 index 0000000..d8839c7 --- /dev/null +++ b/mhackspace/templates/pages/register.html @@ -0,0 +1,33 @@ +{% 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 %}