forked from expo/troggle
171 lines
5.5 KiB
Python
171 lines
5.5 KiB
Python
"""
|
|
Views which allow users to create and activate accounts.
|
|
|
|
"""
|
|
from django.contrib.auth import login
|
|
from django.contrib.auth import authenticate
|
|
|
|
from django.conf import settings
|
|
from django.core.urlresolvers import reverse
|
|
from django.core.context_processors import csrf
|
|
from django.http import HttpResponseRedirect
|
|
from django.shortcuts import render_to_response
|
|
from django.template import RequestContext
|
|
from django.contrib.auth import login
|
|
|
|
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.
|
|
|
|
"""
|
|
|
|
# Generate CSRF token
|
|
c = {}
|
|
c.update(csrf(request))
|
|
|
|
activation_key = activation_key.lower() # Normalize before trying anything with it.
|
|
account = RegistrationProfile.objects.activate_user(activation_key)
|
|
try:
|
|
print account
|
|
except:
|
|
pass
|
|
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,
|
|
c.update({ '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.
|
|
|
|
"""
|
|
# Generate CSRF token
|
|
c = {}
|
|
c.update(csrf(request))
|
|
|
|
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,
|
|
c.update({ 'form': form,'settings':settings }),
|
|
context_instance=context)
|