summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demo/settings.py2
-rw-r--r--demo/urls.py7
-rw-r--r--gstudio/forms.py6
-rw-r--r--gstudio/regbackend.py115
4 files changed, 130 insertions, 0 deletions
diff --git a/demo/settings.py b/demo/settings.py
index f184257f..a325258b 100644
--- a/demo/settings.py
+++ b/demo/settings.py
@@ -178,6 +178,8 @@ INSTALLED_APPS = (
)
+if DEBUG:
+ EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
from gstudio.xmlrpc import GSTUDIO_XMLRPC_METHODS
diff --git a/demo/urls.py b/demo/urls.py
index ce2e6230..e74f885b 100644
--- a/demo/urls.py
+++ b/demo/urls.py
@@ -75,6 +75,10 @@ from gstudio.sitemaps import MetatypeSitemap
from gstudio.sitemaps import AuthorSitemap
from objectapp.sitemaps import GbobjectSitemap
+# import gstudio.regbackend
+from gstudio.forms import *
+from registration.views import register
+
admin.autodiscover()
@@ -95,7 +99,10 @@ urlpatterns = patterns(
url(r'^objects/admin/', include(admin.site.urls)),
url(r'^nodetypes/admin/', include(admin.site.urls)),
url(r'^grappelli/', include('grappelli.urls')),
+ url(r'^accounts/register/$', register, {'backend': 'gstudio.regbackend.MyBackend','form_class': UserRegistrationForm}, name='registration_register'),
+
url(r'^accounts/', include('registration.urls')),
+
url(r'^$', 'django.views.generic.simple.redirect_to',
{ 'template': 'index.html' }, 'index'),
)
diff --git a/gstudio/forms.py b/gstudio/forms.py
index c4a1a0dc..eee5ec17 100644
--- a/gstudio/forms.py
+++ b/gstudio/forms.py
@@ -17,7 +17,13 @@
from gstudio.models import *
from django.forms import ModelForm
+from django.forms import *
from django.contrib.admin import widgets
+from registration.forms import *
+
+class UserRegistrationForm(RegistrationForm):
+ first_name = forms.CharField()
+ last_name = forms.CharField()
class MetatypeForm(ModelForm):
diff --git a/gstudio/regbackend.py b/gstudio/regbackend.py
new file mode 100644
index 00000000..d7ed5661
--- /dev/null
+++ b/gstudio/regbackend.py
@@ -0,0 +1,115 @@
+from django.conf import settings
+from django.contrib.sites.models import RequestSite
+from django.contrib.sites.models import Site
+from django.contrib.auth.models import User,Group
+
+from registration import signals
+from registration.forms import RegistrationForm
+from registration.models import RegistrationProfile
+from django.contrib.auth.models import Group
+from gstudio.models import *
+
+
+class MyBackend(object):
+ def register(self, request, **kwargs):
+ """
+ Given a username, email address and password, register a new
+ user account, which will initially be inactive.
+
+ Along with the new ``User`` object, a new
+ ``registration.models.RegistrationProfile`` will be created,
+ tied to that ``User``, containing the activation key which
+ will be used for this account.
+
+ An email will be sent to the supplied email address; this
+ email should contain an activation link. The email will be
+ rendered using two templates. See the documentation for
+ ``RegistrationProfile.send_activation_email()`` for
+ information about these templates and the contexts provided to
+ them.
+
+ After the ``User`` and ``RegistrationProfile`` are created and
+ the activation email is sent, the signal
+ ``registration.signals.user_registered`` will be sent, with
+ the new ``User`` as the keyword argument ``user`` and the
+ class of this backend as the sender.
+
+ """
+ username, email, password, first_name, last_name = kwargs['username'], kwargs['email'], kwargs['password1'], kwargs['first_name'], kwargs['last_name']
+ if Site._meta.installed:
+ site = Site.objects.get_current()
+ else:
+ site = RequestSite(request)
+ new_user = RegistrationProfile.objects.create_inactive_user(username,email,password,site)
+
+
+ signals.user_registered.send(sender=self.__class__,
+ user=new_user,
+ request=request)
+ user = User.objects.get(username=username)
+ user.first_name=kwargs['first_name']
+ user.last_name=kwargs['last_name']
+
+ user.is_staff = True
+ # Add new user to 'non admin' group
+ nonadmin = Group.objects.get(name = 'non_admin_user')
+ user.groups.add(nonadmin)
+ user.save()
+
+ return new_user
+
+ def activate(self, request, activation_key):
+ """
+ Given an an activation key, look up and activate the user
+ account corresponding to that key (if possible).
+
+ After successful activation, the signal
+ ``registration.signals.user_activated`` will be sent, with the
+ newly activated ``User`` as the keyword argument ``user`` and
+ the class of this backend as the sender.
+
+ """
+ activated = RegistrationProfile.objects.activate_user(activation_key)
+ if activated:
+ signals.user_activated.send(sender=self.__class__,
+ user=activated,
+ request=request)
+ return activated
+
+ def registration_allowed(self, request):
+ """
+ Indicate whether account registration is currently permitted,
+ based on the value of the setting ``REGISTRATION_OPEN``. This
+ is determined as follows:
+
+ * If ``REGISTRATION_OPEN`` is not specified in settings, or is
+ set to ``True``, registration is permitted.
+
+ * If ``REGISTRATION_OPEN`` is both specified and set to
+ ``False``, registration is not permitted.
+
+ """
+ return getattr(settings, 'REGISTRATION_OPEN', True)
+
+ def get_form_class(self, request):
+ """
+ Return the default form class used for user registration.
+
+ """
+ return RegistrationForm
+
+ def post_registration_redirect(self, request, user):
+ """
+ Return the name of the URL to redirect to after successful
+ user registration.
+
+ """
+ return ('registration_complete', (), {})
+
+ def post_activation_redirect(self, request, user):
+ """
+ Return the name of the URL to redirect to after successful
+ account activation.
+
+ """
+ return ('registration_activation_complete', (), {})