Temp commit for register feature

This commit is contained in:
brett 2017-10-04 17:31:16 +01:00
parent dae32a0bba
commit bd87789d88
11 changed files with 121 additions and 0 deletions

View File

@ -42,6 +42,8 @@ ST_ALLOWED_URL_PROTOCOLS = {
ST_UNICODE_SLUGS = True ST_UNICODE_SLUGS = True
ST_UNIQUE_EMAILS = True ST_UNIQUE_EMAILS = True
ST_CASE_INSENSITIVE_EMAILS = True ST_CASE_INSENSITIVE_EMAILS = True
ST_UPLOAD_IMAGE_ENABLED = True
ST_UPLOAD_FILE_ENABLED = True
# Tests helpers # Tests helpers
ST_TESTS_RATELIMIT_NEVER_EXPIRE = False ST_TESTS_RATELIMIT_NEVER_EXPIRE = False
@ -138,6 +140,7 @@ LOCAL_APPS = (
'mhackspace.blog', 'mhackspace.blog',
'mhackspace.core', 'mhackspace.core',
'mhackspace.requests', 'mhackspace.requests',
'mhackspace.register',
) )
# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps

View File

@ -20,6 +20,7 @@ from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostLi
from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap
from mhackspace.feeds.views import FeedViewSet, ArticleViewSet from mhackspace.feeds.views import FeedViewSet, ArticleViewSet
from mhackspace.requests.views import RequestsForm, RequestsList from mhackspace.requests.views import RequestsForm, RequestsList
from mhackspace.register.views import RegisterForm
from wiki.urls import get_pattern as get_wiki_pattern from wiki.urls import get_pattern as get_wiki_pattern
from django_nyt.urls import get_pattern as get_nyt_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'^admin/password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', auth_views.password_reset_confirm, name='password_reset_confirm'), url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', auth_views.password_reset_confirm, name='password_reset_confirm'),
url(r'^reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'), 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) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += [ urlpatterns += [

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class RegisterConfig(AppConfig):
name = 'register'

View File

@ -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']

View File

@ -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()

View File

@ -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',)

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -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

View File

@ -0,0 +1,38 @@
{% extends "base.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% load recapture %}
{% block head-open-graph %}
<meta property="og:title" content="Register attendance" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ request.build_absolute_uri }}" />
<meta property="og:image" content="https://maidstone-hackspace.org.uk/static/images/android-chrome-192x192.png" />
{% endblock head-open-graph %}
{% block content %}
<h2>Register</h2>
{% if form %}
<form method="POST" action="{% url 'register_form' %}" class="register_form">
{% csrf_token %}
{{ form|crispy }}
{{ google_capture }}
<button class="btn btn-primary " type="submit" name="action">
<span class="fa fa-submit" ></span>
{% trans "Send" %}</button>
</form>
{% else %}
<div class="row">
<div class="col">
Thanks for registering!
</div>
</div>
{% endif %}
{% endblock content %}
{% block javascript %}
{{ block.super }}
<script src='https://www.google.com/recaptcha/api.js'></script>
{% endblock %}