summaryrefslogtreecommitdiffstats
path: root/registration/views.py
diff options
context:
space:
mode:
authorsubstantialnoninfringinguser <substantialnoninfringinguser@gmail.com>2009-05-13 05:48:10 +0100
committersubstantialnoninfringinguser <substantialnoninfringinguser@gmail.com>2009-05-13 05:48:10 +0100
commited345f25760d8927f834a69202c2b9b2cef71ee0 (patch)
tree652dba01640060cc2106af850955728828bcd8f0 /registration/views.py
parentcdd4e685ee95e44b9a599b03cf11723a4ce7b7c6 (diff)
downloadtroggle-ed345f25760d8927f834a69202c2b9b2cef71ee0.tar.gz
troggle-ed345f25760d8927f834a69202c2b9b2cef71ee0.tar.bz2
troggle-ed345f25760d8927f834a69202c2b9b2cef71ee0.zip
[svn] Add user registration and user profiles.
Used modified versions of django-registration and django-profiles , both on bitbucket. The Person model is now set up as the profile for auth.User s. I set up a requestcontext so that settings is automatically passed to every template, no need to repeat ourselves in views. However, this needs to be refined: I will soon change it to only pass a subset of settings. E.G. we do not need to be passing the DB login and password! Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8231 by aaron @ 1/29/2009 11:02 PM
Diffstat (limited to 'registration/views.py')
-rw-r--r--registration/views.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/registration/views.py b/registration/views.py
new file mode 100644
index 0000000..aac17c5
--- /dev/null
+++ b/registration/views.py
@@ -0,0 +1,153 @@
+"""
+Views which allow users to create and activate accounts.
+
+"""
+
+
+from django.conf import settings
+from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+
+from registration.forms import RegistrationForm
+from registration.models import RegistrationProfile
+
+
+def activate(request, activation_key,
+ template_name='registration/activate.html',
+ extra_context=None):
+ """
+ Activate a ``User``'s account from an activation key, if their key
+ is valid and hasn't expired.
+
+ By default, use the template ``registration/activate.html``; to
+ change this, pass the name of a template as the keyword argument
+ ``template_name``.
+
+ **Required arguments**
+
+ ``activation_key``
+ The activation key to validate and use for activating the
+ ``User``.
+
+ **Optional arguments**
+
+ ``extra_context``
+ A dictionary of variables to add to the template context. Any
+ callable object in this dictionary will be called to produce
+ the end result which appears in the context.
+
+ ``template_name``
+ A custom template to use.
+
+ **Context:**
+
+ ``account``
+ The ``User`` object corresponding to the account, if the
+ activation was successful. ``False`` if the activation was not
+ successful.
+
+ ``expiration_days``
+ The number of days for which activation keys stay valid after
+ registration.
+
+ Any extra variables supplied in the ``extra_context`` argument
+ (see above).
+
+ **Template:**
+
+ registration/activate.html or ``template_name`` keyword argument.
+
+ """
+ activation_key = activation_key.lower() # Normalize before trying anything with it.
+ account = RegistrationProfile.objects.activate_user(activation_key)
+ if extra_context is None:
+ extra_context = {}
+ context = RequestContext(request)
+ for key, value in extra_context.items():
+ context[key] = callable(value) and value() or value
+ return render_to_response(template_name,
+ { 'account': account,
+ 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 'settings':settings},
+ context_instance=context)
+
+
+def register(request, success_url=None,
+ form_class=RegistrationForm,
+ template_name='registration/registration_form.html',
+ extra_context=None):
+ """
+ Allow a new user to register an account.
+
+ Following successful registration, issue a redirect; by default,
+ this will be whatever URL corresponds to the named URL pattern
+ ``registration_complete``, which will be
+ ``/accounts/register/complete/`` if using the included URLConf. To
+ change this, point that named pattern at another URL, or pass your
+ preferred URL as the keyword argument ``success_url``.
+
+ By default, ``registration.forms.RegistrationForm`` will be used
+ as the registration form; to change this, pass a different form
+ class as the ``form_class`` keyword argument. The form class you
+ specify must have a method ``save`` which will create and return
+ the new ``User``.
+
+ By default, use the template
+ ``registration/registration_form.html``; to change this, pass the
+ name of a template as the keyword argument ``template_name``.
+
+ **Required arguments**
+
+ None.
+
+ **Optional arguments**
+
+ ``form_class``
+ The form class to use for registration.
+
+ ``extra_context``
+ A dictionary of variables to add to the template context. Any
+ callable object in this dictionary will be called to produce
+ the end result which appears in the context.
+
+ ``success_url``
+ The URL to redirect to on successful registration.
+
+ ``template_name``
+ A custom template to use.
+
+ **Context:**
+
+ ``form``
+ The registration form.
+
+ Any extra variables supplied in the ``extra_context`` argument
+ (see above).
+
+ **Template:**
+
+ registration/registration_form.html or ``template_name`` keyword
+ argument.
+
+ """
+ if request.method == 'POST':
+ form = form_class(data=request.POST, files=request.FILES)
+ if form.is_valid():
+ new_user = form.save()
+ # success_url needs to be dynamically generated here; setting a
+ # a default value using reverse() will cause circular-import
+ # problems with the default URLConf for this application, which
+ # imports this file.
+ return HttpResponseRedirect(success_url or reverse('registration_complete'))
+ else:
+ form = form_class()
+
+ if extra_context is None:
+ extra_context = {}
+ context = RequestContext(request)
+ for key, value in extra_context.items():
+ context[key] = callable(value) and value() or value
+ return render_to_response(template_name,
+ { 'form': form,'settings':settings },
+ context_instance=context)