diff options
-rw-r--r-- | demo/settings.py | 2 | ||||
-rw-r--r-- | demo/urls.py | 7 | ||||
-rw-r--r-- | gstudio/forms.py | 6 | ||||
-rw-r--r-- | gstudio/regbackend.py | 115 |
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', (), {}) |