commit
5acf72a5fa
|
@ -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
|
||||||
|
@ -139,6 +141,7 @@ LOCAL_APPS = (
|
||||||
'mhackspace.blog',
|
'mhackspace.blog',
|
||||||
'mhackspace.core',
|
'mhackspace.core',
|
||||||
'mhackspace.requests',
|
'mhackspace.requests',
|
||||||
|
'mhackspace.register',
|
||||||
'mhackspace.rfid',
|
'mhackspace.rfid',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ from mhackspace.feeds.views import FeedViewSet, ArticleViewSet
|
||||||
from mhackspace.requests.views import RequestsForm, RequestsList
|
from mhackspace.requests.views import RequestsForm, RequestsList
|
||||||
from mhackspace.rfid.views import DeviceViewSet, AuthUserWithDeviceViewSet
|
from mhackspace.rfid.views import DeviceViewSet, AuthUserWithDeviceViewSet
|
||||||
|
|
||||||
|
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
|
||||||
|
@ -95,6 +96,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 += [
|
||||||
|
|
|
@ -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')
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class RegisterConfig(AppConfig):
|
||||||
|
name = 'register'
|
|
@ -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']
|
|
@ -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()
|
|
@ -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',)
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -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)
|
|
@ -1,5 +1,4 @@
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
from django.core.mail import EmailMessage
|
from django.core.mail import EmailMessage
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from mhackspace.requests.forms import UserRequestForm
|
from mhackspace.requests.forms import UserRequestForm
|
||||||
|
@ -8,8 +7,7 @@ from django.views.generic import ListView
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(login_required, name='dispatch')
|
class RequestsForm(LoginRequiredMixin, FormView):
|
||||||
class RequestsForm(FormView):
|
|
||||||
template_name = 'pages/requests.html'
|
template_name = 'pages/requests.html'
|
||||||
form_class = UserRequestForm
|
form_class = UserRequestForm
|
||||||
success_url = '/requests'
|
success_url = '/requests'
|
||||||
|
@ -30,8 +28,8 @@ class RequestsForm(FormView):
|
||||||
|
|
||||||
return super(FormView, self).form_valid(form)
|
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'
|
template_name = 'pages/requests.html'
|
||||||
model = UserRequests
|
model = UserRequests
|
||||||
context_object_name = 'requests'
|
context_object_name = 'requests'
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
{% 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 %}
|
Loading…
Reference in New Issue