django-registration-1.0/0000755000076700007670000000000012157545727015601 5ustar jamesjames00000000000000django-registration-1.0/AUTHORS0000644000076700007670000000255411733405241016640 0ustar jamesjames00000000000000The primary author of django-registration is James Bennett , who may be found online at . Others who have contributed to the application: * Samuel Adam (French translation) * Jannis Leidel (German translation) * Rapahel Hertzog (helpful suggestions on packaging and distribution) * Panos Laganakos (Greek translation) * Ilya Filippov and Andy Mikhailenko (Russian translation) * Jarek Zgoda (Polish translation) * Meir Kriheli (Hebrew translation) * Italo Maia (Brazilian Portuguese translation) * Shinya Okano (Japanese translation) * A. Al-Ibrahim (Arabic translation) * Ernesto Rico Schmidt (Spanish translation) * Vladislav Mitov (Bulgarian translation) * Leonardo Manuel Rocha (Argentinean Spanish translation) * Emil Stenström (Swedish translation) * Liang Feng (Chinese translations) * Nebojsa Djordjevic (Serbian translation) * Nicola Larosa (Italian translation) * Joost Cassee (Dutch translation) * Björn Kristinsson (Icelandic translation) * Rune Bromer (Danish translation) * Domen Kožar (Slovenian translation) * Young Gyu Park (Korean translation) * Flavio Curella (updated Italian translation) * Jon Lønne (Bokmål translation) * Carles Barrobés (Catalan translation) * Nuno Mariz (Portuguese translation) * Patrick Samson (French translation) * Recep Kirmizi (Turkish translation) * Mohsen Mansouryar (Persian translation)django-registration-1.0/CHANGELOG0000644000076700007670000001551111733413040016773 0ustar jamesjames00000000000000============================= django-registration changelog ============================= Version 0.8, 24 March 2012: --------------------------- * Backend-based rewrite. See docs/upgrade.rst for details. * Compatibility through Django 1.4. Version 0.7, 6 November 2008: ----------------------------- * Project hosting moved from Google Code to Bitbucket, and from a Subversion repository to Mercurial. * Added test suite. * Full Django 1.0 compatibility. * Registration and activation views now accept an ``extra_context`` argument, identical to the way that argument works in Django's generic views. * Added a custom management command for cleaning up expired registrations; you can now run ``manage.py cleanupregistration`` to handle this. * BACKWARDS-INCOMPATIBLE CHANGE: The "username" field in ``RegistrationForm`` is now a ``RegexField``. * BACKWARDS-INCOMPATIBLE CHANGE: Removed the standalone script for deleting expired user registrations; use the new management command instead. Version 0.6, 29 July 2008: -------------------------- * Packaged from revision 166 in Subversion. * Fixed a multiple-objects exception in ``RegistrationFormUniqueEmail`` when multiple users already have the same email address. * Changed the ``success_url`` of the ``register()`` view to use reverse URL resolution. * Added an ``extra_context`` argument to the ``register`` and ``activate`` views, mimicking its functionality in Django's generic views. * BACKWARDS-INCOMPATIBLE CHANGE: Switched the admin declaration to be compliant with the newforms-admin refactor; the admin declaration now lives in ``registration/admin.py``. * BACKWARDS-INCOMPATIBLE CHANGE: Switched form imports from using ``django.newforms`` to using ``django.forms``; the old style now raises a deprecation warning on Django trunk and on Django 1.0 alpha. Version 0.5, 4 June 2008: ------------------------- * Packaged from revision 155 in Subversion. * Added Serbian translation. * Added Italian translation. * Username/email uniqueness checks are now case-insensitive. This is potentially backwards-incompatible if you relied on them being case-sensitive, but I don't know of any reason why you'd be doing that. * Included forms now use lazy translations. * The ``register`` view can now handle files submitted for use in form processing. * Reactivation of a manually-deactivated account is now prevented by changing the activation key, on successful activation, to a dummy string which will fail on subsequent activation attempts. Version 0.4p2, 10 Feburary 2008: -------------------------------- * Added Brazilian Portuguese translation. * Added Japanese translation. * Added Hebrew translation. * Minor documentation fixes. Version 0.4p1, 16 December 2007: -------------------------------- * Packaged from revision 129 in Subversion. * Added Polish translation. Version 0.4, 8 December 2007: ----------------------------- * Packaged from revision 122 in Subversion. * Added Greek translation. * Added Russian translation. * Changed ``maxlength`` to ``max_length`` now that Django issues a deprecation warning for it. * BACKWARDS-INCOMPATIBLE CHANGE: Changed the password validation to be on ``clean()`` instead of ``clean_password2()``. This means that errors from this must be accessed via ``non_field_errors()``. Version 0.3p5, 6 October 2007: ------------------------------ * Packaged from revision 112 in Subversion. * Added German translation. * Fixed a mismatch between the default ``RegistrationForm``'s maximum length on email addresses and the actual maximum length on Django's ``User`` model. * Fixed a situation where bad input for the ``password1`` field on ``RegistrationForm`` could cause validation of ``password2`` to fail with an exception. Version 0.3p4, 4 October 2007: ------------------------------ * Packaged from revision 101 in Subversion. * BACKWARDS-INCOMPATIBLE CHANGE: In response to larger numbers of complaints from people trying to use the example templates as-is, the example templates have been removed. Version 0.3p2, 23 September 2007: --------------------------------- * Packaged from revision 100 in Subversion. * Fixed ``activate`` view to actually take the ``template_name`` argument. Version 0.3p1, 22 September 2007: --------------------------------- * Packaged from revision 99 in Subversion. * Fixed a typo in docs/overview.txt. * Fixed a typo in bin/delete_expired_users.py. * Added French translation. Version 0.3, 19 September 2007: ------------------------------- Packaged from revision 89 in Subversion; download at http://django-registration.googlecode.com/files/registration-0.3.tar.gz * Changed ``register`` and ``activate`` views to accept ``template_name`` keyword argument for selecting a custom template. * Changed ``register`` view to accept ``form_class`` keyword argument specifying the form to use. * BACKWARDS-INCOMPATIBLE CHANGE: Changed ``RegistrationManager.create_inactive_user`` to use a template for the subject of the activation email. * BACKWARDS-INCOMPATIBLE CHANGE: Removed the ``tos`` field from ``RegistrationForm``; if you were relying on it, switch to using ``RegistrationFormTermsOfService`` instead. * BACKWARDS-INCOMPATIBLE CHANGE: The activation email template now receives the current ``Site`` object as the context variable ``site``, and the ``current_site`` variable, which only held the domain, is no longer available. * Added script ``bin/delete_expired_users.py`` with instructions on how to use it as a cron job to clean up expired/inactive accounts. * Marked strings for translation and added ``locale`` directory so that translations can be added. * Updated to deal with merge of Django's Unicode branch into trunk; now using Unicode-aware functions everywhere. Version 0.2, 29 May 2007: ------------------------- Packaged from revision 76 in Subversion; download at http://django-registration.googlecode.com/files/registration-0.2.tar.gz * Added ability to specify a callback in ``RegistrationManager.create_inactive_user`` or in the ``register`` view to enable creation of site-specific user profile. * Separated out the logic of creating the profile into a new method on ``RegistrationManager``: ``create_profile``. * Added URLConf support for various useful views in ``django.contrib.auth``. * BACKWARDS-INCOMPATIBLE CHANGE: removed the ``key_generated`` field from ``RegistrationProfile``; activation key expiration is now calculated based on the ``date_joined`` field in the ``User`` model. Drop the ``key_generated`` column from your database when upgrading from 0.1. Version 0.1, 23 May 2007: ------------------------- Packaged from revision 56 in Subversion; download at http://django-registration.googlecode.com/files/registration-0.1.tar.gz * First packaged version using distutils. * Added docs/ directory and overview. django-registration-1.0/docs/0000755000076700007670000000000012157545727016531 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/0000755000076700007670000000000012157545727017767 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/doctrees/0000755000076700007670000000000012157545727021577 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/doctrees/backend-api.doctree0000644000076700007670000014447211733412407025303 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(X httprequestqKX)post_registration_redirect(request, user)qNXregistration_allowed(request)qNXuser registration backendsq NX'post_activation_redirect(request, user)q NXget_form_class(request)q NX backend-apiq KXregister(request, **kwargs)q NX!pluggable authentication backendsqKX backend apiqNXactivate(request, **kwargs)qNXspecifying the backend to useqNXdjango's "redirect" shortcutqKuUsubstitution_defsq}qUparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhh)q}q (hUhh)q!}q"(hUhhUsourceq#cdocutils.nodes reprunicode q$XE/Users/james/dev/hg/personal/django-registration/docs/backend-api.rstq%q&}q'bUexpect_referenced_by_nameq(}q)h cdocutils.nodes target q*)q+}q,(hX.. _backend-api:hhh#h&Utagnameq-Utargetq.U attributesq/}q0(Uidsq1]Ubackrefsq2]Udupnamesq3]Uclassesq4]Unamesq5]Urefidq6U backend-apiq7uUlineq8KUdocumentq9hUchildrenq:]ubsh-Usectionq;h/}q<(h3]h4]h2]h1]q=(Uuser-registration-backendsq>h7eh5]q?(h h euh8Kh9hUexpect_referenced_by_idq@}qAh7h+sh:]qB(cdocutils.nodes title qC)qD}qE(hXUser registration backendsqFhh!h#h&h-UtitleqGh/}qH(h3]h4]h2]h1]h5]uh8Kh9hh:]qIcdocutils.nodes Text qJXUser registration backendsqKqL}qM(hhFhhDubaubcdocutils.nodes paragraph qN)qO}qP(hXZAt its core, django-registration is built around the idea of pluggable backends which can implement different workflows for user registration. Although :ref:`the default backend ` uses a common two-phase system (registration followed by activation), backends are generally free to implement any workflow desired by their authors.hh!h#h&h-U paragraphqQh/}qR(h3]h4]h2]h1]h5]uh8Kh9hh:]qS(hJXAt its core, django-registration is built around the idea of pluggable backends which can implement different workflows for user registration. Although qTqU}qV(hXAt its core, django-registration is built around the idea of pluggable backends which can implement different workflows for user registration. Although hhOubcsphinx.addnodes pending_xref qW)qX}qY(hX,:ref:`the default backend `qZhhOh#h&h-U pending_xrefq[h/}q\(UreftypeXrefUrefwarnq]U reftargetq^Xdefault-backendU refdomainXstdq_h1]h2]U refexplicith3]h4]h5]Urefdocq`U backend-apiqauh8Kh:]qbcdocutils.nodes emphasis qc)qd}qe(hhZh/}qf(h3]h4]qg(Uxrefqhh_Xstd-refqieh2]h1]h5]uhhXh:]qjhJXthe default backendqkql}qm(hUhhdubah-UemphasisqnubaubhJX uses a common two-phase system (registration followed by activation), backends are generally free to implement any workflow desired by their authors.qoqp}qq(hX uses a common two-phase system (registration followed by activation), backends are generally free to implement any workflow desired by their authors.hhOubeubhN)qr}qs(hXThis is deliberately meant to be complementary to Django's own `pluggable authentication backends `_; a site which uses an OpenID authentication backend, for example, can and should make use of a registration backend which handles signups via OpenID. And, like a Django authentication backend, a registration backend is simply a class which implements a particular standard API (described below).hh!h#h&h-hQh/}qt(h3]h4]h2]h1]h5]uh8K h9hh:]qu(hJX?This is deliberately meant to be complementary to Django's own qvqw}qx(hX?This is deliberately meant to be complementary to Django's own hhrubcdocutils.nodes reference qy)qz}q{(hXu`pluggable authentication backends `_h/}q|(UnameX!pluggable authentication backendsUrefuriq}XNhttp://docs.djangoproject.com/en/dev/topics/auth/#other-authentication-sourcesq~h1]h2]h3]h4]h5]uhhrh:]qhJX!pluggable authentication backendsqq}q(hUhhzubah-U referencequbh*)q}q(hXQ h/}q(Urefurih~h1]qU!pluggable-authentication-backendsqah2]h3]h4]h5]qhauhhrh:]h-h.ubhJX(; a site which uses an OpenID authentication backend, for example, can and should make use of a registration backend which handles signups via OpenID. And, like a Django authentication backend, a registration backend is simply a class which implements a particular standard API (described below).qq}q(hX(; a site which uses an OpenID authentication backend, for example, can and should make use of a registration backend which handles signups via OpenID. And, like a Django authentication backend, a registration backend is simply a class which implements a particular standard API (described below).hhrubeubhN)q}q(hXThis allows for a great deal of flexibility in the actual workflow of registration; backends can, for example, implement any of the following (not an exhaustive list):qhh!h#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh9hh:]qhJXThis allows for a great deal of flexibility in the actual workflow of registration; backends can, for example, implement any of the following (not an exhaustive list):qq}q(hhhhubaubcdocutils.nodes bullet_list q)q}q(hUhh!h#h&h-U bullet_listqh/}q(UbulletqX*h1]h2]h3]h4]h5]uh8Kh9hh:]q(cdocutils.nodes list_item q)q}q(hXLOne-step (register, and done) or multi-step (register and activate) signup. hhh#h&h-U list_itemqh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hXKOne-step (register, and done) or multi-step (register and activate) signup.qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh:]qhJXKOne-step (register, and done) or multi-step (register and activate) signup.qq}q(hhhhubaubaubh)q}q(hXInvitation-based registration. hhh#h&h-hh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hXInvitation-based registration.qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh:]qhJXInvitation-based registration.qq}q(hhhhubaubaubh)q}q(hXjSelectively allowing or disallowing registration (e.g., by requiring particular credentials to register). hhh#h&h-hh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hXiSelectively allowing or disallowing registration (e.g., by requiring particular credentials to register).qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh:]qhJXiSelectively allowing or disallowing registration (e.g., by requiring particular credentials to register).qq}q(hhhhubaubaubh)q}q(hX*Enabling/disabling registration entirely. hhh#h&h-hh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hX)Enabling/disabling registration entirely.qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8K"h:]qhJX)Enabling/disabling registration entirely.q˅q}q(hhhhubaubaubh)q}q(hXQRegistering via sources other than a standard username/password, such as OpenID. hhh#h&h-hh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hXPRegistering via sources other than a standard username/password, such as OpenID.qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8K$h:]qhJXPRegistering via sources other than a standard username/password, such as OpenID.qׅq}q(hhhhubaubaubh)q}q(hXSelective customization of the registration process (e.g., using different forms or imposing different requirements for different types of users). hhh#h&h-hh/}q(h3]h4]h2]h1]h5]uh8Nh9hh:]qhN)q}q(hXSelective customization of the registration process (e.g., using different forms or imposing different requirements for different types of users).qhhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8K'h:]qhJXSelective customization of the registration process (e.g., using different forms or imposing different requirements for different types of users).qㅁq}q(hhhhubaubaubeubh)q}q(hUhh!h#h&h-h;h/}q(h3]h4]h2]h1]qUspecifying-the-backend-to-useqah5]qhauh8K-h9hh:]q(hC)q}q(hXSpecifying the backend to useqhhh#h&h-hGh/}q(h3]h4]h2]h1]h5]uh8K-h9hh:]qhJXSpecifying the backend to useqq}q(hhhhubaubhN)q}q(hXTo determine which backend to use, the :ref:`views in django-registration ` accept a keyword argument ``backend``; in all cases, this should be a string containing the full dotted Python import path to the backend class to be used. So, for example, to use the default backend, you'd pass the string ``'registration.backends.default.DefaultBackend'`` as the value of the ``backend`` argument (and the default URLconf included with that backend does so). The specified backend class will then be imported and instantiated (by calling its constructor with no arguments), and the resulting instance will be used for all backend-specific functionality.hhh#h&h-hQh/}q(h3]h4]h2]h1]h5]uh8K/h9hh:]q(hJX'To determine which backend to use, the qq}q(hX'To determine which backend to use, the hhubhW)q}q(hX+:ref:`views in django-registration `qhhh#h&h-h[h/}q(UreftypeXrefh]h^XviewsU refdomainXstdrh1]h2]U refexplicith3]h4]h5]h`hauh8K/h:]rhc)r}r(hhh/}r(h3]h4]r(hhjXstd-refreh2]h1]h5]uhhh:]rhJXviews in django-registrationrr }r (hUhjubah-hnubaubhJX accept a keyword argument r r }r (hX accept a keyword argument hhubcdocutils.nodes literal r)r}r(hX ``backend``h/}r(h3]h4]h2]h1]h5]uhhh:]rhJXbackendrr}r(hUhjubah-UliteralrubhJX; in all cases, this should be a string containing the full dotted Python import path to the backend class to be used. So, for example, to use the default backend, you'd pass the string rr}r(hX; in all cases, this should be a string containing the full dotted Python import path to the backend class to be used. So, for example, to use the default backend, you'd pass the string hhubj)r}r(hX2``'registration.backends.default.DefaultBackend'``h/}r(h3]h4]h2]h1]h5]uhhh:]rhJX.'registration.backends.default.DefaultBackend'rr}r (hUhjubah-jubhJX as the value of the r!r"}r#(hX as the value of the hhubj)r$}r%(hX ``backend``h/}r&(h3]h4]h2]h1]h5]uhhh:]r'hJXbackendr(r)}r*(hUhj$ubah-jubhJX  argument (and the default URLconf included with that backend does so). The specified backend class will then be imported and instantiated (by calling its constructor with no arguments), and the resulting instance will be used for all backend-specific functionality.r+r,}r-(hX  argument (and the default URLconf included with that backend does so). The specified backend class will then be imported and instantiated (by calling its constructor with no arguments), and the resulting instance will be used for all backend-specific functionality.hhubeubhN)r.}r/(hXIf the specified backend class cannot be imported, django-registration will raise ``django.core.exceptions.ImproperlyConfigured``.hhh#h&h-hQh/}r0(h3]h4]h2]h1]h5]uh8K;h9hh:]r1(hJXRIf the specified backend class cannot be imported, django-registration will raise r2r3}r4(hXRIf the specified backend class cannot be imported, django-registration will raise hj.ubj)r5}r6(hX/``django.core.exceptions.ImproperlyConfigured``h/}r7(h3]h4]h2]h1]h5]uhj.h:]r8hJX+django.core.exceptions.ImproperlyConfiguredr9r:}r;(hUhj5ubah-jubhJX.r<}r=(hX.hj.ubeubeubheubh#h&h-h;h/}r>(h3]h4]h2]h1]r?Uid1r@ah5]rAhauh8K@h9hh:]rB(hC)rC}rD(hX Backend APIrEhhh#h&h-hGh/}rF(h3]h4]h2]h1]h5]uh8K@h9hh:]rGhJX Backend APIrHrI}rJ(hjEhjCubaubhN)rK}rL(hX.To be used as a registration backend, a class must implement the following methods. For many cases, subclassing the default backend and selectively overriding behavior will be suitable, but for other situations (e.g., workflows significantly different from the default) a full implementation is needed.rMhhh#h&h-hQh/}rN(h3]h4]h2]h1]h5]uh8KBh9hh:]rOhJX.To be used as a registration backend, a class must implement the following methods. For many cases, subclassing the default backend and selectively overriding behavior will be suitable, but for other situations (e.g., workflows significantly different from the default) a full implementation is needed.rPrQ}rR(hjMhjKubaubh)rS}rT(hUhhh#h&h-h;h/}rU(h3]h4]h2]h1]rVUregister-request-kwargsrWah5]rXh auh8KJh9hh:]rY(hC)rZ}r[(hXregister(request, \*\*kwargs)r\hjSh#h&h-hGh/}r](h3]h4]h2]h1]h5]uh8KJh9hh:]r^hJXregister(request, **kwargs)r_r`}ra(hXregister(request, \*\*kwargs)rbhjZubaubhN)rc}rd(hXThis method implements the logic of actually creating the new user account. Often, but not necessarily always, this will involve creating an instance of ``django.contrib.auth.models.User`` from the supplied data.hjSh#h&h-hQh/}re(h3]h4]h2]h1]h5]uh8KLh9hh:]rf(hJXThis method implements the logic of actually creating the new user account. Often, but not necessarily always, this will involve creating an instance of rgrh}ri(hXThis method implements the logic of actually creating the new user account. Often, but not necessarily always, this will involve creating an instance of hjcubj)rj}rk(hX#``django.contrib.auth.models.User``h/}rl(h3]h4]h2]h1]h5]uhjch:]rmhJXdjango.contrib.auth.models.Userrnro}rp(hUhjjubah-jubhJX from the supplied data.rqrr}rs(hX from the supplied data.hjcubeubhN)rt}ru(hXThis method will only be called after a signup form has been displayed, and the data collected by the form has been properly validated.rvhjSh#h&h-hQh/}rw(h3]h4]h2]h1]h5]uh8KQh9hh:]rxhJXThis method will only be called after a signup form has been displayed, and the data collected by the form has been properly validated.ryrz}r{(hjvhjtubaubhN)r|}r}(hXArguments to this method are:r~hjSh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8KUh9hh:]rhJXArguments to this method are:rr}r(hj~hj|ubaubcdocutils.nodes definition_list r)r}r(hUhjSh#h&h-Udefinition_listrh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]r(cdocutils.nodes definition_list_item r)r}r(hX``request`` The Django `HttpRequest `_ object in which a new user is attempting to register. hjh#h&h-Udefinition_list_itemrh/}r(h3]h4]h2]h1]h5]uh8KZh:]r(cdocutils.nodes term r)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXrequestrr}r(hUhjubah-jubah-Utermrubcdocutils.nodes definition r)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hXThe Django `HttpRequest `_ object in which a new user is attempting to register.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8KXh:]r(hJX The Django rr}r(hX The Django hjubhy)r}r(hX_`HttpRequest `_h/}r(UnameX HttpRequesth}XNhttp://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objectsrh1]h2]h3]h4]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-hubh*)r}r(hXQ h/}r(Urefurijh1]rU httprequestrah2]h3]h4]h5]rhauhjh:]h-h.ubhJX6 object in which a new user is attempting to register.rr}r(hX6 object in which a new user is attempting to register.hjubeubah-U definitionrubeubj)r}r(hXH``**kwargs`` A dictionary of the ``cleaned_data`` from the signup form. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8K]h9hh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``**kwargs``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJX**kwargsrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hX:A dictionary of the ``cleaned_data`` from the signup form.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8K]h:]r(hJXA dictionary of the rr}r(hXA dictionary of the hjubj)r}r(hX``cleaned_data``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX cleaned_datarr}r(hUhjubah-jubhJX from the signup form.rr}r(hX from the signup form.hjubeubah-jubeubeubhN)r}r(hXAfter creating the new user account, this method should create or obtain an instance of ``django.contrib.auth.models.User`` representing that account. It should then send the signal :data:`registration.signals.user_registered`, with three arguments:hjSh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8K_h9hh:]r(hJXXAfter creating the new user account, this method should create or obtain an instance of rr}r(hXXAfter creating the new user account, this method should create or obtain an instance of hjubj)r}r(hX#``django.contrib.auth.models.User``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXdjango.contrib.auth.models.Userrr}r(hUhjubah-jubhJX; representing that account. It should then send the signal rr}r(hX; representing that account. It should then send the signal hjubhW)r}r(hX,:data:`registration.signals.user_registered`rhjh#h&h-h[h/}r(UreftypeXdatah]h^X$registration.signals.user_registeredU refdomainXpyrh1]h2]U refexplicith3]h4]h5]h`haUpy:classrNU py:modulerNuh8K_h:]rj)r}r(hjh/}r(h3]h4]r(hhjXpy-datareh2]h1]h5]uhjh:]rhJX$registration.signals.user_registeredrr}r(hUhjubah-jubaubhJX, with three arguments:rr}r(hX, with three arguments:hjubeubj)r}r(hUhjSh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]r (j)r }r (hX9``sender`` The backend class (e.g., ``self.__class__``). hjh#h&h-jh/}r (h3]h4]h2]h1]h5]uh8Keh:]r (j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhj h:]rj)r}r(hX ``sender``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXsenderrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhj h:]rhN)r}r(hX-The backend class (e.g., ``self.__class__``).hjh#h&h-hQh/}r (h3]h4]h2]h1]h5]uh8Keh:]r!(hJXThe backend class (e.g., r"r#}r$(hXThe backend class (e.g., hjubj)r%}r&(hX``self.__class__``h/}r'(h3]h4]h2]h1]h5]uhjh:]r(hJXself.__class__r)r*}r+(hUhj%ubah-jubhJX).r,r-}r.(hX).hjubeubah-jubeubj)r/}r0(hX=``user`` The ``User`` instance representing the new account. hjh#h&h-jh/}r1(h3]h4]h2]h1]h5]uh8Khh9hh:]r2(j)r3}r4(hUh/}r5(h3]h4]h2]h1]h5]uhj/h:]r6j)r7}r8(hX``user``r9h/}r:(h3]h4]h2]h1]h5]uhj3h:]r;hJXuserr<r=}r>(hUhj7ubah-jubah-jubj)r?}r@(hUh/}rA(h3]h4]h2]h1]h5]uhj/h:]rBhN)rC}rD(hX3The ``User`` instance representing the new account.hj?h#h&h-hQh/}rE(h3]h4]h2]h1]h5]uh8Khh:]rF(hJXThe rGrH}rI(hXThe hjCubj)rJ}rK(hX``User``h/}rL(h3]h4]h2]h1]h5]uhjCh:]rMhJXUserrNrO}rP(hUhjJubah-jubhJX' instance representing the new account.rQrR}rS(hX' instance representing the new account.hjCubeubah-jubeubj)rT}rU(hX>``request`` The ``HttpRequest`` in which the user registered. hjh#h&h-jh/}rV(h3]h4]h2]h1]h5]uh8Kkh9hh:]rW(j)rX}rY(hUh/}rZ(h3]h4]h2]h1]h5]uhjTh:]r[j)r\}r](hX ``request``r^h/}r_(h3]h4]h2]h1]h5]uhjXh:]r`hJXrequestrarb}rc(hUhj\ubah-jubah-jubj)rd}re(hUh/}rf(h3]h4]h2]h1]h5]uhjTh:]rghN)rh}ri(hX1The ``HttpRequest`` in which the user registered.hjdh#h&h-hQh/}rj(h3]h4]h2]h1]h5]uh8Kkh:]rk(hJXThe rlrm}rn(hXThe hjhubj)ro}rp(hX``HttpRequest``h/}rq(h3]h4]h2]h1]h5]uhjhh:]rrhJX HttpRequestrsrt}ru(hUhjoubah-jubhJX in which the user registered.rvrw}rx(hX in which the user registered.hjhubeubah-jubeubeubhN)ry}rz(hX9Finally, this method should return the ``User`` instance.r{hjSh#h&h-hQh/}r|(h3]h4]h2]h1]h5]uh8Kmh9hh:]r}(hJX'Finally, this method should return the r~r}r(hX'Finally, this method should return the hjyubj)r}r(hX``User``h/}r(h3]h4]h2]h1]h5]uhjyh:]rhJXUserrr}r(hUhjubah-jubhJX instance.rr}r(hX instance.hjyubeubeubh)r}r(hUhhh#h&h-h;h/}r(h3]h4]h2]h1]rUactivate-request-kwargsrah5]rhauh8Kqh9hh:]r(hC)r}r(hXactivate(request, \*\*kwargs)rhjh#h&h-hGh/}r(h3]h4]h2]h1]h5]uh8Kqh9hh:]rhJXactivate(request, **kwargs)rr}r(hXactivate(request, \*\*kwargs)rhjubaubhN)r}r(hXFor workflows which require a separate activation step, this method should implement the necessary logic for account activation.rhjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Ksh9hh:]rhJXFor workflows which require a separate activation step, this method should implement the necessary logic for account activation.rr}r(hjhjubaubhN)r}r(hXArguments to this method are:rhjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kvh9hh:]rhJXArguments to this method are:rr}r(hjhjubaubj)r}r(hUhjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]r(j)r}r(hXW``request`` The Django ``HttpRequest`` object in which the account is being activated. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kzh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXrequestrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hXJThe Django ``HttpRequest`` object in which the account is being activated.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kyh:]r(hJX The Django rr}r(hX The Django hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX0 object in which the account is being activated.rr}r(hX0 object in which the account is being activated.hjubeubah-jubeubj)r}r(hXA``**kwargs`` A dictionary of any additional arguments (e.g., information captured from the URL, such as an activation key) received by the :func:`~registration.views.activate` view. The combination of the ``HttpRequest`` and this additional information must be sufficient to identify the account which will be activated. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``**kwargs``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJX**kwargsrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hX3A dictionary of any additional arguments (e.g., information captured from the URL, such as an activation key) received by the :func:`~registration.views.activate` view. The combination of the ``HttpRequest`` and this additional information must be sufficient to identify the account which will be activated.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8K}h:]r(hJX~A dictionary of any additional arguments (e.g., information captured from the URL, such as an activation key) received by the rr}r(hX~A dictionary of any additional arguments (e.g., information captured from the URL, such as an activation key) received by the hjubhW)r}r(hX$:func:`~registration.views.activate`rhjh#h&h-h[h/}r(UreftypeXfunch]h^Xregistration.views.activateU refdomainXpyrh1]h2]U refexplicith3]h4]h5]h`hajNjNuh8K}h:]rj)r}r(hjh/}r(h3]h4]r(hhjXpy-funcreh2]h1]h5]uhjh:]rhJX activate()rr}r(hUhjubah-jubaubhJX view. The combination of the rr}r(hX view. The combination of the hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJXd and this additional information must be sufficient to identify the account which will be activated.rr }r (hXd and this additional information must be sufficient to identify the account which will be activated.hjubeubah-jubeubeubhN)r }r (hXIf the account cannot be successfully activated (for example, in the default backend if the activation period has expired), this method should return ``False``.hjh#h&h-hQh/}r (h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJXIf the account cannot be successfully activated (for example, in the default backend if the activation period has expired), this method should return rr}r(hXIf the account cannot be successfully activated (for example, in the default backend if the activation period has expired), this method should return hj ubj)r}r(hX ``False``h/}r(h3]h4]h2]h1]h5]uhj h:]rhJXFalserr}r(hUhjubah-jubhJX.r}r(hX.hj ubeubhN)r}r(hXIf the account is successfully activated, this method should create or obtain an instance of ``django.contrib.auth.models.User`` representing the activated account. It should then send the signal :data:`registration.signals.user_activated`, with three arguments:hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX]If the account is successfully activated, this method should create or obtain an instance of rr }r!(hX]If the account is successfully activated, this method should create or obtain an instance of hjubj)r"}r#(hX#``django.contrib.auth.models.User``h/}r$(h3]h4]h2]h1]h5]uhjh:]r%hJXdjango.contrib.auth.models.Userr&r'}r((hUhj"ubah-jubhJXD representing the activated account. It should then send the signal r)r*}r+(hXD representing the activated account. It should then send the signal hjubhW)r,}r-(hX+:data:`registration.signals.user_activated`r.hjh#h&h-h[h/}r/(UreftypeXdatah]h^X#registration.signals.user_activatedU refdomainXpyr0h1]h2]U refexplicith3]h4]h5]h`hajNjNuh8Kh:]r1j)r2}r3(hj.h/}r4(h3]h4]r5(hhj0Xpy-datar6eh2]h1]h5]uhj,h:]r7hJX#registration.signals.user_activatedr8r9}r:(hUhj2ubah-jubaubhJX, with three arguments:r;r<}r=(hX, with three arguments:hjubeubj)r>}r?(hUhjh#h&h-jh/}r@(h3]h4]h2]h1]h5]uh8Nh9hh:]rA(j)rB}rC(hX``sender`` The backend class. hj>h#h&h-jh/}rD(h3]h4]h2]h1]h5]uh8Kh:]rE(j)rF}rG(hUh/}rH(h3]h4]h2]h1]h5]uhjBh:]rIj)rJ}rK(hX ``sender``rLh/}rM(h3]h4]h2]h1]h5]uhjFh:]rNhJXsenderrOrP}rQ(hUhjJubah-jubah-jubj)rR}rS(hUh/}rT(h3]h4]h2]h1]h5]uhjBh:]rUhN)rV}rW(hXThe backend class.rXhjRh#h&h-hQh/}rY(h3]h4]h2]h1]h5]uh8Kh:]rZhJXThe backend class.r[r\}r](hjXhjVubaubah-jubeubj)r^}r_(hXC``user`` The ``User`` instance representing the activated account. hj>h#h&h-jh/}r`(h3]h4]h2]h1]h5]uh8Kh9hh:]ra(j)rb}rc(hUh/}rd(h3]h4]h2]h1]h5]uhj^h:]rej)rf}rg(hX``user``rhh/}ri(h3]h4]h2]h1]h5]uhjbh:]rjhJXuserrkrl}rm(hUhjfubah-jubah-jubj)rn}ro(hUh/}rp(h3]h4]h2]h1]h5]uhj^h:]rqhN)rr}rs(hX9The ``User`` instance representing the activated account.hjnh#h&h-hQh/}rt(h3]h4]h2]h1]h5]uh8Kh:]ru(hJXThe rvrw}rx(hXThe hjrubj)ry}rz(hX``User``h/}r{(h3]h4]h2]h1]h5]uhjrh:]r|hJXUserr}r~}r(hUhjyubah-jubhJX- instance representing the activated account.rr}r(hX- instance representing the activated account.hjrubeubah-jubeubj)r}r(hX=``request`` The ``HttpRequest`` in which the user activated. hj>h#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXrequestrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hX0The ``HttpRequest`` in which the user activated.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(hJXThe rr}r(hXThe hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX in which the user activated.rr}r(hX in which the user activated.hjubeubah-jubeubeubhN)r}r(hX5This method should then return the ``User`` instance.rhjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX#This method should then return the rr}r(hX#This method should then return the hjubj)r}r(hX``User``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXUserrr}r(hUhjubah-jubhJX instance.rr}r(hX instance.hjubeubhN)r}r(hXxFor workflows which do not require a separate activation step, this method can and should raise ``NotImplementedError``.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX`For workflows which do not require a separate activation step, this method can and should raise rr}r(hX`For workflows which do not require a separate activation step, this method can and should raise hjubj)r}r(hX``NotImplementedError``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXNotImplementedErrorrr}r(hUhjubah-jubhJX.r}r(hX.hjubeubeubh)r}r(hUhhh#h&h-h;h/}r(h3]h4]h2]h1]rUregistration-allowed-requestrah5]rhauh8Kh9hh:]r(hC)r}r(hXregistration_allowed(request)rhjh#h&h-hGh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXregistration_allowed(request)rr}r(hjhjubaubhN)r}r(hXThis method returns a boolean value indicating whether the given ``HttpRequest`` is permitted to register a new account (``True`` if registration is permitted, ``False`` otherwise). It may determine this based on some aspect of the ``HttpRequest`` (e.g., the presence or absence of an invitation code in the URL), based on a setting (in the default backend, a setting can be used to disable registration), information in the database or any other information it can access.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJXAThis method returns a boolean value indicating whether the given rr}r(hXAThis method returns a boolean value indicating whether the given hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX) is permitted to register a new account (rr}r(hX) is permitted to register a new account (hjubj)r}r(hX``True``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXTruerr}r(hUhjubah-jubhJX if registration is permitted, rr}r(hX if registration is permitted, hjubj)r}r(hX ``False``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXFalserr}r(hUhjubah-jubhJX? otherwise). It may determine this based on some aspect of the rr}r(hX? otherwise). It may determine this based on some aspect of the hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX (e.g., the presence or absence of an invitation code in the URL), based on a setting (in the default backend, a setting can be used to disable registration), information in the database or any other information it can access.rr}r(hX (e.g., the presence or absence of an invitation code in the URL), based on a setting (in the default backend, a setting can be used to disable registration), information in the database or any other information it can access.hjubeubhN)r}r (hXArguments to this method are:r hjh#h&h-hQh/}r (h3]h4]h2]h1]h5]uh8Kh9hh:]r hJXArguments to this method are:r r}r(hj hjubaubj)r}r(hUhjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]rj)r}r(hX]``request`` The Django ``HttpRequest`` object in which a new user is attempting to register. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]r hJXrequestr!r"}r#(hUhjubah-jubah-jubj)r$}r%(hUh/}r&(h3]h4]h2]h1]h5]uhjh:]r'hN)r(}r)(hXPThe Django ``HttpRequest`` object in which a new user is attempting to register.hj$h#h&h-hQh/}r*(h3]h4]h2]h1]h5]uh8Kh:]r+(hJX The Django r,r-}r.(hX The Django hj(ubj)r/}r0(hX``HttpRequest``h/}r1(h3]h4]h2]h1]h5]uhj(h:]r2hJX HttpRequestr3r4}r5(hUhj/ubah-jubhJX6 object in which a new user is attempting to register.r6r7}r8(hX6 object in which a new user is attempting to register.hj(ubeubah-jubeubaubhN)r9}r:(hXIf this method returns ``False``, the :func:`~registration.views.register` view will not display a form for account creation; instead, it will issue a redirect to a URL explaining that registration is not permitted.hjh#h&h-hQh/}r;(h3]h4]h2]h1]h5]uh8Kh9hh:]r<(hJXIf this method returns r=r>}r?(hXIf this method returns hj9ubj)r@}rA(hX ``False``h/}rB(h3]h4]h2]h1]h5]uhj9h:]rChJXFalserDrE}rF(hUhj@ubah-jubhJX, the rGrH}rI(hX, the hj9ubhW)rJ}rK(hX$:func:`~registration.views.register`rLhj9h#h&h-h[h/}rM(UreftypeXfunch]h^Xregistration.views.registerU refdomainXpyrNh1]h2]U refexplicith3]h4]h5]h`hajNjNuh8Kh:]rOj)rP}rQ(hjLh/}rR(h3]h4]rS(hhjNXpy-funcrTeh2]h1]h5]uhjJh:]rUhJX register()rVrW}rX(hUhjPubah-jubaubhJX view will not display a form for account creation; instead, it will issue a redirect to a URL explaining that registration is not permitted.rYrZ}r[(hX view will not display a form for account creation; instead, it will issue a redirect to a URL explaining that registration is not permitted.hj9ubeubeubh)r\}r](hUhhh#h&h-h;h/}r^(h3]h4]h2]h1]r_Uget-form-class-requestr`ah5]rah auh8Kh9hh:]rb(hC)rc}rd(hXget_form_class(request)rehj\h#h&h-hGh/}rf(h3]h4]h2]h1]h5]uh8Kh9hh:]rghJXget_form_class(request)rhri}rj(hjehjcubaubhN)rk}rl(hXThis method should return a form class -- a subclass of ``django.forms.Form`` -- suitable for use in registering users with this backend. As such, it should collect and validate any information required by the backend's ``register`` method.hj\h#h&h-hQh/}rm(h3]h4]h2]h1]h5]uh8Kh9hh:]rn(hJX8This method should return a form class -- a subclass of rorp}rq(hX8This method should return a form class -- a subclass of hjkubj)rr}rs(hX``django.forms.Form``h/}rt(h3]h4]h2]h1]h5]uhjkh:]ruhJXdjango.forms.Formrvrw}rx(hUhjrubah-jubhJX -- suitable for use in registering users with this backend. As such, it should collect and validate any information required by the backend's ryrz}r{(hX -- suitable for use in registering users with this backend. As such, it should collect and validate any information required by the backend's hjkubj)r|}r}(hX ``register``h/}r~(h3]h4]h2]h1]h5]uhjkh:]rhJXregisterrr}r(hUhj|ubah-jubhJX method.rr}r(hX method.hjkubeubhN)r}r(hXArguments to this method are:rhj\h#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXArguments to this method are:rr}r(hjhjubaubj)r}r(hUhj\h#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]rj)r}r(hX^``request`` The Django ``HttpRequest`` object in which a new user is attempting to register. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXrequestrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hXPThe Django ``HttpRequest`` object in which a new user is attempting to register.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(hJX The Django rr}r(hX The Django hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX6 object in which a new user is attempting to register.rr}r(hX6 object in which a new user is attempting to register.hjubeubah-jubeubaubeubh)r}r(hUhhh#h&h-h;h/}r(h3]h4]h2]h1]rU'post-registration-redirect-request-userrah5]rhauh8Kh9hh:]r(hC)r}r(hX)post_registration_redirect(request, user)rhjh#h&h-hGh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJX)post_registration_redirect(request, user)rr}r(hjhjubaubhN)r}r(hX'This method should return a location to which the user will be redirected after successful registration. This should be a tuple of ``(to, args, kwargs)``, suitable for use as the arguments to `Django's "redirect" shortcut `_.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJXThis method should return a location to which the user will be redirected after successful registration. This should be a tuple of rr}r(hXThis method should return a location to which the user will be redirected after successful registration. This should be a tuple of hjubj)r}r(hX``(to, args, kwargs)``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX(to, args, kwargs)rr}r(hUhjubah-jubhJX', suitable for use as the arguments to rr}r(hX', suitable for use as the arguments to hjubhy)r}r(hXf`Django's "redirect" shortcut `_h/}r(UnameXDjango's "redirect" shortcuth}XDhttp://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirectrh1]h2]h3]h4]h5]uhjh:]rhJXDjango's "redirect" shortcutrr}r(hUhjubah-hubh*)r}r(hXG h/}r(Urefurijh1]rUdjango-s-redirect-shortcutrah2]h3]h4]h5]rhauhjh:]h-h.ubhJX.r}r(hX.hjubeubhN)r}r(hXArguments to this method are:rhjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXArguments to this method are:rr}r(hjhjubaubj)r}r(hUhjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]r(j)r}r(hXL``request`` The Django ``HttpRequest`` object in which the user registered. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXrequestrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hX?The Django ``HttpRequest`` object in which the user registered.hjh#h&h-hQh/}r (h3]h4]h2]h1]h5]uh8Kh:]r (hJX The Django r r }r (hX The Django hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX% object in which the user registered.rr}r(hX% object in which the user registered.hjubeubah-jubeubj)r}r(hXC``user`` The ``User`` instance representing the new user account. hjh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r }r!(hX``user``r"h/}r#(h3]h4]h2]h1]h5]uhjh:]r$hJXuserr%r&}r'(hUhj ubah-jubah-jubj)r(}r)(hUh/}r*(h3]h4]h2]h1]h5]uhjh:]r+hN)r,}r-(hX8The ``User`` instance representing the new user account.hj(h#h&h-hQh/}r.(h3]h4]h2]h1]h5]uh8Kh:]r/(hJXThe r0r1}r2(hXThe hj,ubj)r3}r4(hX``User``h/}r5(h3]h4]h2]h1]h5]uhj,h:]r6hJXUserr7r8}r9(hUhj3ubah-jubhJX, instance representing the new user account.r:r;}r<(hX, instance representing the new user account.hj,ubeubah-jubeubeubeubheubh#h&h-h;h/}r=(h3]h4]h2]h1]r>U%post-activation-redirect-request-userr?ah5]r@h auh8Kh9hh:]rA(hC)rB}rC(hX'post_activation_redirect(request, user)rDhhh#h&h-hGh/}rE(h3]h4]h2]h1]h5]uh8Kh9hh:]rFhJX'post_activation_redirect(request, user)rGrH}rI(hjDhjBubaubhN)rJ}rK(hX^For workflows which require a separate activation step, this method should return a location to which the user will be redirected after successful activation. This should be a tuple of ``(to, args, kwargs)``, suitable for use as the arguments to `Django's "redirect" shortcut `_.hhh#h&h-hQh/}rL(h3]h4]h2]h1]h5]uh8Kh9hh:]rM(hJXFor workflows which require a separate activation step, this method should return a location to which the user will be redirected after successful activation. This should be a tuple of rNrO}rP(hXFor workflows which require a separate activation step, this method should return a location to which the user will be redirected after successful activation. This should be a tuple of hjJubj)rQ}rR(hX``(to, args, kwargs)``h/}rS(h3]h4]h2]h1]h5]uhjJh:]rThJX(to, args, kwargs)rUrV}rW(hUhjQubah-jubhJX', suitable for use as the arguments to rXrY}rZ(hX', suitable for use as the arguments to hjJubhy)r[}r\(hXf`Django's "redirect" shortcut `_h/}r](UnameXDjango's "redirect" shortcuth}XDhttp://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirectr^h1]h2]h3]h4]h5]uhjJh:]r_hJXDjango's "redirect" shortcutr`ra}rb(hUhj[ubah-hubh*)rc}rd(hXG U referencedreKhjJh-h.h/}rf(Urefurij^h1]rgUid2rhah2]h3]riXdjango's "redirect" shortcutrjah4]h5]uh:]ubhJX.rk}rl(hX.hjJubeubhN)rm}rn(hXArguments to this method are:rohhh#h&h-hQh/}rp(h3]h4]h2]h1]h5]uh8Kh9hh:]rqhJXArguments to this method are:rrrs}rt(hjohjmubaubj)ru}rv(hUhhh#h&h-jh/}rw(h3]h4]h2]h1]h5]uh8Nh9hh:]rx(j)ry}rz(hXK``request`` The Django ``HttpRequest`` object in which the user activated. hjuh#h&h-jh/}r{(h3]h4]h2]h1]h5]uh8Kh:]r|(j)r}}r~(hUh/}r(h3]h4]h2]h1]h5]uhjyh:]rj)r}r(hX ``request``rh/}r(h3]h4]h2]h1]h5]uhj}h:]rhJXrequestrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjyh:]rhN)r}r(hX>The Django ``HttpRequest`` object in which the user activated.hjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(hJX The Django rr}r(hX The Django hjubj)r}r(hX``HttpRequest``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJX HttpRequestrr}r(hUhjubah-jubhJX$ object in which the user activated.rr}r(hX$ object in which the user activated.hjubeubah-jubeubj)r}r(hXH``user`` The ``User`` instance representing the activated user account. hjuh#h&h-jh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(j)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rj)r}r(hX``user``rh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXuserrr}r(hUhjubah-jubah-jubj)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhN)r}r(hX>The ``User`` instance representing the activated user account.rhjh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh:]r(hJXThe rr}r(hXThe hjubj)r}r(hX``User``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXUserrr}r(hUhjubah-jubhJX2 instance representing the activated user account.rr}r(hX2 instance representing the activated user account.hjubeubah-jubeubeubhN)r}r(hXxFor workflows which do not require a separate activation step, this method can and should raise ``NotImplementedError``.hhh#h&h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX`For workflows which do not require a separate activation step, this method can and should raise rr}r(hX`For workflows which do not require a separate activation step, this method can and should raise hjubj)r}r(hX``NotImplementedError``h/}r(h3]h4]h2]h1]h5]uhjh:]rhJXNotImplementedErrorrr}r(hUhjubah-jubhJX.r}r(hX.hjubeubeubh#h&h-Usystem_messagerh/}r(h3]UlevelKh1]h2]rjhaUsourceh&h4]h5]UlineKUtypeUINFOruh8Kh9hh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uhhh:]rhJX?Duplicate explicit target name: "django's "redirect" shortcut".rr}r(hUhjubah-hQubaubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hjhjhjh h>h j?h j`h h7h jWhhhj@hjhhhjuh:]r(h+h!ehUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh9hU current_linerNUtransform_messagesr]r(h)r}r(hUh/}r(h3]UlevelKh1]h2]Usourceh&h4]h5]UlineKUtypejuh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhJX1Hyperlink target "backend-api" is not referenced.rr}r(hUhjubah-hQubah-jubh)r}r(hUh/}r(h3]UlevelKh1]h2]Usourceh&h4]h5]UlineK Utypejuh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXGHyperlink target "pluggable authentication backends" is not referenced.r r }r (hUhjubah-hQubah-jubh)r }r (hUh/}r(h3]UlevelKh1]h2]Usourceh&h4]h5]UlineKXUtypejuh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uhj h:]rhJX1Hyperlink target "httprequest" is not referenced.rr}r(hUhjubah-hQubah-jubh)r}r(hUh/}r(h3]UlevelKh1]h2]Usourceh&h4]h5]UlineKUtypejuh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uhjh:]rhJXBHyperlink target "django's "redirect" shortcut" is not referenced.rr }r!(hUhjubah-hQubah-jubeUreporterr"NUid_startr#KU autofootnotesr$]r%U citation_refsr&}r'Uindirect_targetsr(]r)Usettingsr*(cdocutils.frontend Values r+or,}r-(Ufootnote_backlinksr.KUrecord_dependenciesr/NU rfc_base_urlr0Uhttp://tools.ietf.org/html/r1U tracebackr2KUpep_referencesr3NUstrip_commentsr4NU toc_backlinksr5Uentryr6U language_coder7Uenr8U datestampr9NU report_levelr:KU _destinationr;NU halt_levelr<KU strip_classesr=NhGNUerror_encoding_error_handlerr>Ubackslashreplacer?Udebugr@NUembed_stylesheetrAUoutput_encoding_error_handlerrBUstrictrCU sectnum_xformrDKUdump_transformsrENU docinfo_xformrFKUwarning_streamrGNUpep_file_url_templaterHUpep-%04drIUexit_status_levelrJKUconfigrKNUstrict_visitorrLNUcloak_email_addressesrMUtrim_footnote_reference_spacerNUenvrONUdump_pseudo_xmlrPNUexpose_internalsrQNUsectsubtitle_xformrRU source_linkrSNUrfc_referencesrTNUoutput_encodingrUUutf-8rVU source_urlrWNUinput_encodingrXU utf-8-sigrYU_disable_configrZNU id_prefixr[UU tab_widthr\KUerror_encodingr]UUTF-8r^U_sourcer_UE/Users/james/dev/hg/personal/django-registration/docs/backend-api.rstr`Ugettext_compactraU generatorrbNUdump_internalsrcNU pep_base_urlrdUhttp://www.python.org/dev/peps/reUinput_encoding_error_handlerrfjCUauto_id_prefixrgUidrhUdoctitle_xformriUstrip_elements_with_classesrjNU _config_filesrk]Ufile_insertion_enabledrlKU raw_enabledrmKU dump_settingsrnNubUsymbol_footnote_startroKUidsrp}rq(jjjjjhjchhjjj?hjjh7h!jWjSj@hj`j\jjh>h!hhuUsubstitution_namesrr}rsh-h9h/}rt(h3]h1]h2]Usourceh&h4]h5]uU footnotesru]rvUrefidsrw}rxh7]ryh+asub.django-registration-1.0/docs/_build/doctrees/default-backend.doctree0000644000076700007670000021203711733412407026147 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(X"default behavior and configurationqNX>registration.models.RegistrationProfile.activation_key_expiredqKX)how account data is stored for activationqNX<registration.models.RegistrationManager.delete_expired_usersq KX0the documentation for the django sites frameworkq KX<registration.models.RegistrationManager.create_inactive_userq KX1registration.models.RegistrationProfile.ACTIVATEDq KX'registration.models.RegistrationProfileq KX=registration.models.RegistrationProfile.send_activation_emailqKX6registration.models.RegistrationProfile.activation_keyqKX'registration.models.RegistrationManagerqKXdefault-backendqKX5registration.models.RegistrationManager.activate_userqKX,registration.models.RegistrationProfile.userqKXthe default backendqNX6registration.models.RegistrationManager.create_profileqKuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU"default-behavior-and-configurationqhhhU)how-account-data-is-stored-for-activationq h h h U0the-documentation-for-the-django-sites-frameworkq!h h h h h h hhhhhhhUdefault-backendq"hhhhhUthe-default-backendq#hhuUchildrenq$]q%(cdocutils.nodes target q&)q'}q((U rawsourceq)X.. _default-backend:Uparentq*hUsourceq+cdocutils.nodes reprunicode q,XI/Users/james/dev/hg/personal/django-registration/docs/default-backend.rstq-q.}q/bUtagnameq0Utargetq1U attributesq2}q3(Uidsq4]Ubackrefsq5]Udupnamesq6]Uclassesq7]Unamesq8]Urefidq9h"uUlineq:KUdocumentq;hh$]ubh&)q<}q=(h)Uh*hh+h.Uexpect_referenced_by_nameq>}q?hh'sh0h1h2}q@(h6]h4]qA(X$module-registration.backends.defaultqBh"eh5]Uismodh7]h8]qChauh:Kh;hUexpect_referenced_by_idqD}qEh"h'sh$]ubcsphinx.addnodes index qF)qG}qH(h)Uh*hh+h.h0UindexqIh2}qJ(h4]h5]h6]h7]h8]Uentries]qK(UsingleqLX&registration.backends.default (module)X$module-registration.backends.defaultUtqMauh:Kh;hh$]ubcdocutils.nodes section qN)qO}qP(h)Uh*hh+h.h0UsectionqQh2}qR(h6]h7]h5]h4]qSh#ah8]qThauh:Kh;hh$]qU(cdocutils.nodes title qV)qW}qX(h)XThe default backendqYh*hOh+h.h0UtitleqZh2}q[(h6]h7]h5]h4]h8]uh:Kh;hh$]q\cdocutils.nodes Text q]XThe default backendq^q_}q`(h)hYh*hWubaubcdocutils.nodes paragraph qa)qb}qc(h)X^A default :ref:`registration backend ` is bundled with django-registration, as the class ``registration.backends.default.DefaultBackend``, and implements a simple two-step workflow in which a new user first registers, then confirms and activates the new account by following a link sent to the email address supplied during registration.h*hOh+h.h0U paragraphqdh2}qe(h6]h7]h5]h4]h8]uh:Kh;hh$]qf(h]X A default qgqh}qi(h)X A default h*hbubcsphinx.addnodes pending_xref qj)qk}ql(h)X):ref:`registration backend `qmh*hbh+h.h0U pending_xrefqnh2}qo(UreftypeXrefUrefwarnqpU reftargetqqX backend-apiU refdomainXstdqrh4]h5]U refexplicith6]h7]h8]UrefdocqsUdefault-backendqtuh:Kh$]qucdocutils.nodes emphasis qv)qw}qx(h)hmh2}qy(h6]h7]qz(Uxrefq{hrXstd-refq|eh5]h4]h8]uh*hkh$]q}h]Xregistration backendq~q}q(h)Uh*hwubah0Uemphasisqubaubh]X3 is bundled with django-registration, as the class qq}q(h)X3 is bundled with django-registration, as the class h*hbubcdocutils.nodes literal q)q}q(h)X0``registration.backends.default.DefaultBackend``h2}q(h6]h7]h5]h4]h8]uh*hbh$]qh]X,registration.backends.default.DefaultBackendqq}q(h)Uh*hubah0Uliteralqubh]X, and implements a simple two-step workflow in which a new user first registers, then confirms and activates the new account by following a link sent to the email address supplied during registration.qq}q(h)X, and implements a simple two-step workflow in which a new user first registers, then confirms and activates the new account by following a link sent to the email address supplied during registration.h*hbubeubhN)q}q(h)Uh*hOh+h.h0hQh2}q(h6]h7]h5]h4]qhah8]qhauh:Kh;hh$]q(hV)q}q(h)X"Default behavior and configurationqh*hh+h.h0hZh2}q(h6]h7]h5]h4]h8]uh:Kh;hh$]qh]X"Default behavior and configurationqq}q(h)hh*hubaubha)q}q(h)X1This backend makes use of the following settings:qh*hh+h.h0hdh2}q(h6]h7]h5]h4]h8]uh:Kh;hh$]qh]X1This backend makes use of the following settings:qq}q(h)hh*hubaubcdocutils.nodes definition_list q)q}q(h)Uh*hh+h.h0Udefinition_listqh2}q(h6]h7]h5]h4]h8]uh:Nh;hh$]q(cdocutils.nodes definition_list_item q)q}q(h)X``ACCOUNT_ACTIVATION_DAYS`` This is the number of days users will have to activate their accounts after registering. Failing to activate during that period will leave the account inactive (and possibly subject to deletion). This setting is required, and must be an integer. h*hh+h.h0Udefinition_list_itemqh2}q(h6]h7]h5]h4]h8]uh:Kh$]q(cdocutils.nodes term q)q}q(h)Uh2}q(h6]h7]h5]h4]h8]uh*hh$]qh)q}q(h)X``ACCOUNT_ACTIVATION_DAYS``qh2}q(h6]h7]h5]h4]h8]uh*hh$]qh]XACCOUNT_ACTIVATION_DAYSqq}q(h)Uh*hubah0hubah0Utermqubcdocutils.nodes definition q)q}q(h)Uh2}q(h6]h7]h5]h4]h8]uh*hh$]qha)q}q(h)XThis is the number of days users will have to activate their accounts after registering. Failing to activate during that period will leave the account inactive (and possibly subject to deletion). This setting is required, and must be an integer.qh*hh+h.h0hdh2}q(h6]h7]h5]h4]h8]uh:Kh$]qh]XThis is the number of days users will have to activate their accounts after registering. Failing to activate during that period will leave the account inactive (and possibly subject to deletion). This setting is required, and must be an integer.q˅q}q(h)hh*hubaubah0U definitionqubeubh)q}q(h)X``REGISTRATION_OPEN`` A boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. This setting is optional, and a default of ``True`` will be assumed if it is not supplied. h*hh+h.h0hh2}q(h6]h7]h5]h4]h8]uh:Kh;hh$]q(h)q}q(h)Uh2}q(h6]h7]h5]h4]h8]uh*hh$]qh)q}q(h)X``REGISTRATION_OPEN``qh2}q(h6]h7]h5]h4]h8]uh*hh$]qh]XREGISTRATION_OPENq܅q}q(h)Uh*hubah0hubah0hubh)q}q(h)Uh2}q(h6]h7]h5]h4]h8]uh*hh$]qha)q}q(h)XA boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. This setting is optional, and a default of ``True`` will be assumed if it is not supplied.h*hh+h.h0hdh2}q(h6]h7]h5]h4]h8]uh:Kh$]q(h]XA boolean (either q煁q}q(h)XA boolean (either h*hubh)q}q(h)X``True``h2}q(h6]h7]h5]h4]h8]uh*hh$]qh]XTrueqq}q(h)Uh*hubah0hubh]X or qq}q(h)X or h*hubh)q}q(h)X ``False``h2}q(h6]h7]h5]h4]h8]uh*hh$]qh]XFalseqq}q(h)Uh*hubah0hubh]Xu) indicating whether registration of new accounts is currently permitted. This setting is optional, and a default of qq}q(h)Xu) indicating whether registration of new accounts is currently permitted. This setting is optional, and a default of h*hubh)q}q(h)X``True``h2}r(h6]h7]h5]h4]h8]uh*hh$]rh]XTruerr}r(h)Uh*hubah0hubh]X' will be assumed if it is not supplied.rr}r(h)X' will be assumed if it is not supplied.h*hubeubah0hubeubeubha)r}r (h)XBy default, this backend uses :class:`registration.forms.RegistrationForm` as its form class for user registration; this can be overridden by passing the keyword argument ``form_class`` to the :func:`~registration.views.register` view.h*hh+h.h0hdh2}r (h6]h7]h5]h4]h8]uh:K h;hh$]r (h]XBy default, this backend uses r r }r(h)XBy default, this backend uses h*jubhj)r}r(h)X,:class:`registration.forms.RegistrationForm`rh*jh+h.h0hnh2}r(UreftypeXclasshphqX#registration.forms.RegistrationFormU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtUpy:classrNU py:modulerXregistration.backends.defaultruh:K h$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]X#registration.forms.RegistrationFormrr}r (h)Uh*jubah0hubaubh]Xa as its form class for user registration; this can be overridden by passing the keyword argument r!r"}r#(h)Xa as its form class for user registration; this can be overridden by passing the keyword argument h*jubh)r$}r%(h)X``form_class``h2}r&(h6]h7]h5]h4]h8]uh*jh$]r'h]X form_classr(r)}r*(h)Uh*j$ubah0hubh]X to the r+r,}r-(h)X to the h*jubhj)r.}r/(h)X$:func:`~registration.views.register`r0h*jh+h.h0hnh2}r1(UreftypeXfunchphqXregistration.views.registerU refdomainXpyr2h4]h5]U refexplicith6]h7]h8]hshtjNjjuh:K h$]r3h)r4}r5(h)j0h2}r6(h6]h7]r7(h{j2Xpy-funcr8eh5]h4]h8]uh*j.h$]r9h]X register()r:r;}r<(h)Uh*j4ubah0hubaubh]X view.r=r>}r?(h)X view.h*jubeubha)r@}rA(h)XUpon successful registration -- not activation -- the default redirect is to the URL pattern named ``registration_complete``; this can be overridden by passing the keyword argument ``success_url`` to the :func:`~registration.views.register` view.h*hh+h.h0hdh2}rB(h6]h7]h5]h4]h8]uh:K&h;hh$]rC(h]XcUpon successful registration -- not activation -- the default redirect is to the URL pattern named rDrE}rF(h)XcUpon successful registration -- not activation -- the default redirect is to the URL pattern named h*j@ubh)rG}rH(h)X``registration_complete``h2}rI(h6]h7]h5]h4]h8]uh*j@h$]rJh]Xregistration_completerKrL}rM(h)Uh*jGubah0hubh]X9; this can be overridden by passing the keyword argument rNrO}rP(h)X9; this can be overridden by passing the keyword argument h*j@ubh)rQ}rR(h)X``success_url``h2}rS(h6]h7]h5]h4]h8]uh*j@h$]rTh]X success_urlrUrV}rW(h)Uh*jQubah0hubh]X to the rXrY}rZ(h)X to the h*j@ubhj)r[}r\(h)X$:func:`~registration.views.register`r]h*j@h+h.h0hnh2}r^(UreftypeXfunchphqXregistration.views.registerU refdomainXpyr_h4]h5]U refexplicith6]h7]h8]hshtjNjjuh:K&h$]r`h)ra}rb(h)j]h2}rc(h6]h7]rd(h{j_Xpy-funcreeh5]h4]h8]uh*j[h$]rfh]X register()rgrh}ri(h)Uh*jaubah0hubaubh]X view.rjrk}rl(h)X view.h*j@ubeubha)rm}rn(h)XUpon successful activation, the default redirect is to the URL pattern named ``registration_activation_complete``; this can be overridden by passing the keyword argument ``success_url`` to the :func:`~registration.views.activate` view.h*hh+h.h0hdh2}ro(h6]h7]h5]h4]h8]uh:K+h;hh$]rp(h]XMUpon successful activation, the default redirect is to the URL pattern named rqrr}rs(h)XMUpon successful activation, the default redirect is to the URL pattern named h*jmubh)rt}ru(h)X$``registration_activation_complete``h2}rv(h6]h7]h5]h4]h8]uh*jmh$]rwh]X registration_activation_completerxry}rz(h)Uh*jtubah0hubh]X9; this can be overridden by passing the keyword argument r{r|}r}(h)X9; this can be overridden by passing the keyword argument h*jmubh)r~}r(h)X``success_url``h2}r(h6]h7]h5]h4]h8]uh*jmh$]rh]X success_urlrr}r(h)Uh*j~ubah0hubh]X to the rr}r(h)X to the h*jmubhj)r}r(h)X$:func:`~registration.views.activate`rh*jmh+h.h0hnh2}r(UreftypeXfunchphqXregistration.views.activateU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjNjjuh:K+h$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-funcreh5]h4]h8]uh*jh$]rh]X activate()rr}r(h)Uh*jubah0hubaubh]X view.rr}r(h)X view.h*jmubeubeubhN)r}r(h)Uh*hOh+h.h0hQh2}r(h6]h7]h5]h4]rh ah8]rhauh:K2h;hh$]r(hV)r}r(h)X)How account data is stored for activationrh*jh+h.h0hZh2}r(h6]h7]h5]h4]h8]uh:K2h;hh$]rh]X)How account data is stored for activationrr}r(h)jh*jubaubha)r}r(h)XxDuring registration, a new instance of ``django.contrib.auth.models.User`` is created to represent the new account, with the ``is_active`` field set to ``False``. An email is then sent to the email address of the account, containing a link the user must click to activate the account; at that point the ``is_active`` field is set to ``True``, and the user may log in normally.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:K4h;hh$]r(h]X'During registration, a new instance of rr}r(h)X'During registration, a new instance of h*jubh)r}r(h)X#``django.contrib.auth.models.User``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xdjango.contrib.auth.models.Userrr}r(h)Uh*jubah0hubh]X3 is created to represent the new account, with the rr}r(h)X3 is created to represent the new account, with the h*jubh)r}r(h)X ``is_active``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X is_activerr}r(h)Uh*jubah0hubh]X field set to rr}r(h)X field set to h*jubh)r}r(h)X ``False``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XFalserr}r(h)Uh*jubah0hubh]X. An email is then sent to the email address of the account, containing a link the user must click to activate the account; at that point the rr}r(h)X. An email is then sent to the email address of the account, containing a link the user must click to activate the account; at that point the h*jubh)r}r(h)X ``is_active``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X is_activerr}r(h)Uh*jubah0hubh]X field is set to rr}r(h)X field is set to h*jubh)r}r(h)X``True``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XTruerr}r(h)Uh*jubah0hubh]X#, and the user may log in normally.rr}r(h)X#, and the user may log in normally.h*jubeubha)r}r(h)XmActivation is handled by generating and storing an activation key in the database, using the following model:rh*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:K(h6]h7]h5]h4]h8]uh:KIh;hh$]r?h]XHas the following fields:r@rA}rB(h)j=h*j;ubaubhF)rC}rD(h)Uh*j#h+h.h0hIh2}rE(h4]h5]h6]h7]h8]Uentries]rF(hLX8user (registration.models.RegistrationProfile attribute)hUtrGauh:Nh;hh$]ubj)rH}rI(h)Uh*j#h+h.h0jh2}rJ(jjXpyh4]h5]h6]h7]h8]jX attributerKjjKuh:Nh;hh$]rL(j)rM}rN(h)XuserrOh*jHh+h.h0jh2}rP(h4]rQhajjh5]h6]h7]h8]rRhajXRegistrationProfile.userjjjuh:KPh;hh$]rSj)rT}rU(h)jOh*jMh+h.h0jh2}rV(h6]h7]h5]h4]h8]uh:KPh;hh$]rWh]XuserrXrY}rZ(h)Uh*jTubaubaubj")r[}r\(h)Uh*jHh+h.h0j%h2}r](h6]h7]h5]h4]h8]uh:KPh;hh$]r^ha)r_}r`(h)XA ``ForeignKey`` to ``django.contrib.auth.models.User``, representing the user account for which activation information is being stored.h*j[h+h.h0hdh2}ra(h6]h7]h5]h4]h8]uh:KMh;hh$]rb(h]XA rcrd}re(h)XA h*j_ubh)rf}rg(h)X``ForeignKey``h2}rh(h6]h7]h5]h4]h8]uh*j_h$]rih]X ForeignKeyrjrk}rl(h)Uh*jfubah0hubh]X to rmrn}ro(h)X to h*j_ubh)rp}rq(h)X#``django.contrib.auth.models.User``h2}rr(h6]h7]h5]h4]h8]uh*j_h$]rsh]Xdjango.contrib.auth.models.Userrtru}rv(h)Uh*jpubah0hubh]XQ, representing the user account for which activation information is being stored.rwrx}ry(h)XQ, representing the user account for which activation information is being stored.h*j_ubeubaubeubhF)rz}r{(h)Uh*j#h+h.h0hIh2}r|(h4]h5]h6]h7]h8]Uentries]r}(hLXBactivation_key (registration.models.RegistrationProfile attribute)hUtr~auh:Nh;hh$]ubj)r}r(h)Uh*j#h+h.h0jh2}r(jjXpyh4]h5]h6]h7]h8]jX attributerjjuh:Nh;hh$]r(j)r}r(h)Xactivation_keyrh*jh+h.h0jh2}r(h4]rhajjh5]h6]h7]h8]rhajX"RegistrationProfile.activation_keyjjjuh:KVh;hh$]rj)r}r(h)jh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:KVh;hh$]rh]Xactivation_keyrr}r(h)Uh*jubaubaubj")r}r(h)Uh*jh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:KVh;hh$]rha)r}r(h)XA 40-character ``CharField``, storing the activation key for the account. Initially, the activation key is the hexdigest of a SHA1 hash; after activation, this is reset to :attr:`ACTIVATED`.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:KSh;hh$]r(h]XA 40-character rr}r(h)XA 40-character h*jubh)r}r(h)X ``CharField``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X CharFieldrr}r(h)Uh*jubah0hubh]X, storing the activation key for the account. Initially, the activation key is the hexdigest of a SHA1 hash; after activation, this is reset to rr}r(h)X, storing the activation key for the account. Initially, the activation key is the hexdigest of a SHA1 hash; after activation, this is reset to h*jubhj)r}r(h)X:attr:`ACTIVATED`rh*jh+h.h0hnh2}r(UreftypeXattrhphqX ACTIVATEDU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjjjuh:KSh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-attrreh5]h4]h8]uh*jh$]rh]X ACTIVATEDrr}r(h)Uh*jubah0hubaubh]X.r}r(h)X.h*jubeubaubeubha)r}r(h)X)Additionally, one class attribute exists:rh*j#h+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:KWh;hh$]rh]X)Additionally, one class attribute exists:rr}r(h)jh*jubaubhF)r}r(h)Uh*j#h+h.h0hIh2}r(h4]h5]h6]h7]h8]Uentries]r(hLX=ACTIVATED (registration.models.RegistrationProfile attribute)h Utrauh:Nh;hh$]ubj)r}r(h)Uh*j#h+h.h0jh2}r(jjXpyh4]h5]h6]h7]h8]jX attributerjjuh:Nh;hh$]r(j)r}r(h)X ACTIVATEDrh*jh+h.h0jh2}r(h4]rh ajjh5]h6]h7]h8]rh ajXRegistrationProfile.ACTIVATEDjjjuh:K]h;hh$]rj)r}r(h)jh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:K]h;hh$]rh]X ACTIVATEDrr}r(h)Uh*jubaubaubj")r}r(h)Uh*jh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:K]h;hh$]rha)r}r(h)XeA constant string used as the value of :attr:`activation_key` for accounts which have been activated.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:K[h;hh$]r(h]X'A constant string used as the value of rr}r(h)X'A constant string used as the value of h*jubhj)r}r(h)X:attr:`activation_key`rh*jh+h.h0hnh2}r(UreftypeXattrhphqXactivation_keyU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjjjuh:K[h$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-attrreh5]h4]h8]uh*jh$]rh]Xactivation_keyrr}r(h)Uh*jubah0hubaubh]X( for accounts which have been activated.rr}r(h)X( for accounts which have been activated.h*jubeubaubeubha)r}r(h)XAnd the following methods:rh*j#h+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:K^h;hh$]rh]XAnd the following methods:rr}r(h)jh*jubaubhF)r}r(h)Uh*j#h+Nh0hIh2}r(h4]h5]h6]h7]h8]Uentries]r(hLXIactivation_key_expired() (registration.models.RegistrationProfile method)hUtrauh:Nh;hh$]ubj)r}r(h)Uh*j#h+Nh0jh2}r(jjXpyh4]h5]h6]h7]h8]jXmethodrjjuh:Nh;hh$]r(j)r}r(h)Xactivation_key_expired()h*jh+h.h0jh2}r (h4]r hajjh5]h6]h7]h8]r hajX*RegistrationProfile.activation_key_expiredjjjuh:Kqh;hh$]r (j)r }r(h)Xactivation_key_expiredh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kqh;hh$]rh]Xactivation_key_expiredrr}r(h)Uh*j ubaubcsphinx.addnodes desc_parameterlist r)r}r(h)Uh*jh+h.h0Udesc_parameterlistrh2}r(h6]h7]h5]h4]h8]uh:Kqh;hh$]ubeubj")r}r(h)Uh*jh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:Kqh;hh$]r(ha)r}r(h)XDetermines whether this account's activation key has expired, and returns a boolean (``True`` if expired, ``False`` otherwise). Uses the following algorithm:h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kbh;hh$]r (h]XUDetermines whether this account's activation key has expired, and returns a boolean (r!r"}r#(h)XUDetermines whether this account's activation key has expired, and returns a boolean (h*jubh)r$}r%(h)X``True``h2}r&(h6]h7]h5]h4]h8]uh*jh$]r'h]XTruer(r)}r*(h)Uh*j$ubah0hubh]X if expired, r+r,}r-(h)X if expired, h*jubh)r.}r/(h)X ``False``h2}r0(h6]h7]h5]h4]h8]uh*jh$]r1h]XFalser2r3}r4(h)Uh*j.ubah0hubh]X* otherwise). Uses the following algorithm:r5r6}r7(h)X* otherwise). Uses the following algorithm:h*jubeubcdocutils.nodes enumerated_list r8)r9}r:(h)Uh*jh+h.h0Uenumerated_listr;h2}r<(Usuffixr=U.h4]h5]h6]Uprefixr>Uh7]h8]Uenumtyper?Uarabicr@uh:Kfh;hh$]rA(cdocutils.nodes list_item rB)rC}rD(h)XIf :attr:`activation_key` is :attr:`ACTIVATED`, the account has already been activated and so the key is considered to have expired. h*j9h+h.h0U list_itemrEh2}rF(h6]h7]h5]h4]h8]uh:Nh;hh$]rGha)rH}rI(h)XIf :attr:`activation_key` is :attr:`ACTIVATED`, the account has already been activated and so the key is considered to have expired.h*jCh+h.h0hdh2}rJ(h6]h7]h5]h4]h8]uh:Kfh$]rK(h]XIf rLrM}rN(h)XIf h*jHubhj)rO}rP(h)X:attr:`activation_key`rQh*jHh+h.h0hnh2}rR(UreftypeXattrhphqXactivation_keyU refdomainXpyrSh4]h5]U refexplicith6]h7]h8]hshtjjjjuh:Kfh$]rTh)rU}rV(h)jQh2}rW(h6]h7]rX(h{jSXpy-attrrYeh5]h4]h8]uh*jOh$]rZh]Xactivation_keyr[r\}r](h)Uh*jUubah0hubaubh]X is r^r_}r`(h)X is h*jHubhj)ra}rb(h)X:attr:`ACTIVATED`rch*jHh+h.h0hnh2}rd(UreftypeXattrhphqX ACTIVATEDU refdomainXpyreh4]h5]U refexplicith6]h7]h8]hshtjjjjuh:Kfh$]rfh)rg}rh(h)jch2}ri(h6]h7]rj(h{jeXpy-attrrkeh5]h4]h8]uh*jah$]rlh]X ACTIVATEDrmrn}ro(h)Uh*jgubah0hubaubh]XV, the account has already been activated and so the key is considered to have expired.rprq}rr(h)XV, the account has already been activated and so the key is considered to have expired.h*jHubeubaubjB)rs}rt(h)XOtherwise, the date of registration (obtained from the ``date_joined`` field of :attr:`user`) is compared to the current date; if the span between them is greater than the value of the setting ``ACCOUNT_ACTIVATION_DAYS``, the key is considered to have expired. h*j9h+h.h0jEh2}ru(h6]h7]h5]h4]h8]uh:Nh;hh$]rvha)rw}rx(h)XOtherwise, the date of registration (obtained from the ``date_joined`` field of :attr:`user`) is compared to the current date; if the span between them is greater than the value of the setting ``ACCOUNT_ACTIVATION_DAYS``, the key is considered to have expired.h*jsh+h.h0hdh2}ry(h6]h7]h5]h4]h8]uh:Kjh$]rz(h]X7Otherwise, the date of registration (obtained from the r{r|}r}(h)X7Otherwise, the date of registration (obtained from the h*jwubh)r~}r(h)X``date_joined``h2}r(h6]h7]h5]h4]h8]uh*jwh$]rh]X date_joinedrr}r(h)Uh*j~ubah0hubh]X field of rr}r(h)X field of h*jwubhj)r}r(h)X :attr:`user`rh*jwh+h.h0hnh2}r(UreftypeXattrhphqXuserU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjjjuh:Kjh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-attrreh5]h4]h8]uh*jh$]rh]Xuserrr}r(h)Uh*jubah0hubaubh]Xe) is compared to the current date; if the span between them is greater than the value of the setting rr}r(h)Xe) is compared to the current date; if the span between them is greater than the value of the setting h*jwubh)r}r(h)X``ACCOUNT_ACTIVATION_DAYS``h2}r(h6]h7]h5]h4]h8]uh*jwh$]rh]XACCOUNT_ACTIVATION_DAYSrr}r(h)Uh*jubah0hubh]X(, the key is considered to have expired.rr}r(h)X(, the key is considered to have expired.h*jwubeubaubeubcdocutils.nodes field_list r)r}r(h)Uh*jh+Nh0U field_listrh2}r(h6]h7]h5]h4]h8]uh:Nh;hh$]rcdocutils.nodes field r)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(cdocutils.nodes field_name r)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Return typerr}r(h)Uh*jubah0U field_namerubcdocutils.nodes field_body r)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xboolrr}r(h)Xboolh*jubah0hdubah0U field_bodyrubeh0UfieldrubaubeubeubhF)r}r(h)Uh*j#h+Nh0hIh2}r(h4]h5]h6]h7]h8]Uentries]r(hLXHsend_activation_email() (registration.models.RegistrationProfile method)hUtrauh:Nh;hh$]ubj)r}r(h)Uh*j#h+Nh0jh2}r(jjXpyh4]h5]h6]h7]h8]jXmethodrjjuh:Nh;hh$]r(j)r}r(h)Xsend_activation_email(site)h*jh+h.h0jh2}r(h4]rhajjh5]h6]h7]h8]rhajX)RegistrationProfile.send_activation_emailjjjuh:Kh;hh$]r(j)r}r(h)Xsend_activation_emailh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rh]Xsend_activation_emailrr}r(h)Uh*jubaubj)r}r(h)Uh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rcsphinx.addnodes desc_parameter r)r}r(h)Xsiteh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xsiterr}r(h)Uh*jubah0Udesc_parameterrubaubeubj")r}r(h)Uh*jh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(ha)r}r(h)X8Sends an activation email to the address of the account.rh*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kth;hh$]rh]X8Sends an activation email to the address of the account.rr}r(h)jh*jubaubha)r}r(h)X The activation email will make use of two templates: ``registration/activation_email_subject.txt`` and ``registration/activation_email.txt``, which are used for the subject of the email and the body of the email, respectively. Each will receive the following context:h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kvh;hh$]r(h]X5The activation email will make use of two templates: rr}r(h)X5The activation email will make use of two templates: h*jubh)r}r(h)X-``registration/activation_email_subject.txt``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X)registration/activation_email_subject.txtrr}r(h)Uh*jubah0hubh]X and rr}r(h)X and h*jubh)r}r(h)X%``registration/activation_email.txt``h2}r (h6]h7]h5]h4]h8]uh*jh$]r h]X!registration/activation_email.txtr r }r (h)Uh*jubah0hubh]X, which are used for the subject of the email and the body of the email, respectively. Each will receive the following context:rr}r(h)X, which are used for the subject of the email and the body of the email, respectively. Each will receive the following context:h*jubeubh)r}r(h)Uh*jh+h.h0hh2}r(h6]h7]h5]h4]h8]uh:Nh;hh$]r(h)r}r(h)X8``activation_key`` The value of :attr:`activation_key`. h*jh+h.h0hh2}r(h6]h7]h5]h4]h8]uh:K}h$]r(h)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh)r}r(h)X``activation_key``h2}r(h6]h7]h5]h4]h8]uh*jh$]r h]Xactivation_keyr!r"}r#(h)Uh*jubah0hubah0hubh)r$}r%(h)Uh2}r&(h6]h7]h5]h4]h8]uh*jh$]r'ha)r(}r)(h)X$The value of :attr:`activation_key`.h*j$h+h.h0hdh2}r*(h6]h7]h5]h4]h8]uh:K}h$]r+(h]X The value of r,r-}r.(h)X The value of h*j(ubhj)r/}r0(h)X:attr:`activation_key`r1h*j(h+h.h0hnh2}r2(UreftypeXattrhphqXactivation_keyU refdomainXpyr3h4]h5]U refexplicith6]h7]h8]hshtjjjjuh:K}h$]r4h)r5}r6(h)j1h2}r7(h6]h7]r8(h{j3Xpy-attrr9eh5]h4]h8]uh*j/h$]r:h]Xactivation_keyr;r<}r=(h)Uh*j5ubah0hubaubh]X.r>}r?(h)X.h*j(ubeubah0hubeubh)r@}rA(h)Xu``expiration_days`` The number of days the user has to activate, taken from the setting ``ACCOUNT_ACTIVATION_DAYS``. h*jh+h.h0hh2}rB(h6]h7]h5]h4]h8]uh:Kh;hh$]rC(h)rD}rE(h)Uh2}rF(h6]h7]h5]h4]h8]uh*j@h$]rGh)rH}rI(h)X``expiration_days``h2}rJ(h6]h7]h5]h4]h8]uh*jDh$]rKh]Xexpiration_daysrLrM}rN(h)Uh*jHubah0hubah0hubh)rO}rP(h)Uh2}rQ(h6]h7]h5]h4]h8]uh*j@h$]rRha)rS}rT(h)X`The number of days the user has to activate, taken from the setting ``ACCOUNT_ACTIVATION_DAYS``.h*jOh+h.h0hdh2}rU(h6]h7]h5]h4]h8]uh:Kh$]rV(h]XDThe number of days the user has to activate, taken from the setting rWrX}rY(h)XDThe number of days the user has to activate, taken from the setting h*jSubh)rZ}r[(h)X``ACCOUNT_ACTIVATION_DAYS``h2}r\(h6]h7]h5]h4]h8]uh*jSh$]r]h]XACCOUNT_ACTIVATION_DAYSr^r_}r`(h)Uh*jZubah0hubh]X.ra}rb(h)X.h*jSubeubah0hubeubh)rc}rd(h)X``site`` An object representing the site on which the account was registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. h*jh+h.h0hh2}re(h6]h7]h5]h4]h8]uh:Kh;hh$]rf(h)rg}rh(h)Uh2}ri(h6]h7]h5]h4]h8]uh*jch$]rjh)rk}rl(h)X``site``h2}rm(h6]h7]h5]h4]h8]uh*jgh$]rnh]Xsiterorp}rq(h)Uh*jkubah0hubah0hubh)rr}rs(h)Uh2}rt(h6]h7]h5]h4]h8]uh*jch$]ruha)rv}rw(h)XAn object representing the site on which the account was registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces.h*jrh+h.h0hdh2}rx(h6]h7]h5]h4]h8]uh:Kh$]ry(h]XZAn object representing the site on which the account was registered; depending on whether rzr{}r|(h)XZAn object representing the site on which the account was registered; depending on whether h*jvubh)r}}r~(h)X``django.contrib.sites``h2}r(h6]h7]h5]h4]h8]uh*jvh$]rh]Xdjango.contrib.sitesrr}r(h)Uh*j}ubah0hubh]X1 is installed, this may be an instance of either rr}r(h)X1 is installed, this may be an instance of either h*jvubh)r}r(h)X$``django.contrib.sites.models.Site``h2}r(h6]h7]h5]h4]h8]uh*jvh$]rh]X django.contrib.sites.models.Siterr}r(h)Uh*jubah0hubh]X, (if the sites application is installed) or rr}r(h)X, (if the sites application is installed) or h*jvubh)r}r(h)X+``django.contrib.sites.models.RequestSite``h2}r(h6]h7]h5]h4]h8]uh*jvh$]rh]X'django.contrib.sites.models.RequestSiterr}r(h)Uh*jubah0hubh]X (if not). Consult rr}r(h)X (if not). Consult h*jvubcdocutils.nodes reference r)r}r(h)Xm`the documentation for the Django sites framework `_h2}r(UnameX0the documentation for the Django sites frameworkUrefurirX7http://docs.djangoproject.com/en/dev/ref/contrib/sites/rh4]h5]h6]h7]h8]uh*jvh$]rh]X0the documentation for the Django sites frameworkrr}r(h)Uh*jubah0U referencerubh&)r}r(h)X: h2}r(Urefurijh4]rh!ah5]h6]h7]h8]rh auh*jvh$]h0h1ubh]X1 for details regarding these objects' interfaces.rr}r(h)X1 for details regarding these objects' interfaces.h*jvubeubah0hubeubeubha)r}r(h)XBecause email subjects must be a single line of text, the rendered output of ``registration/activation_email_subject.txt`` will be forcibly condensed to a single line.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XMBecause email subjects must be a single line of text, the rendered output of rr}r(h)XMBecause email subjects must be a single line of text, the rendered output of h*jubh)r}r(h)X-``registration/activation_email_subject.txt``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X)registration/activation_email_subject.txtrr}r(h)Uh*jubah0hubh]X- will be forcibly condensed to a single line.rr}r(h)X- will be forcibly condensed to a single line.h*jubeubj)r}r(h)Uh*jh+Nh0jh2}r(h6]h7]h5]h4]h8]uh:Nh;hh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Parametersrr}r(h)Uh*jubah0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j/)r}r(h)Xsiteh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xsiterr}r(h)Uh*jubah0j7ubh]X (rr}r(h)Uh*jubh)r}r(h)X$``django.contrib.sites.models.Site``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X django.contrib.sites.models.Siterr}r(h)Uh*jubah0hubh]X or rr}r(h)X or h*jubh)r}r(h)X+``django.contrib.sites.models.RequestSite``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X'django.contrib.sites.models.RequestSiterr}r(h)Uh*jubah0hubh]X)r}r(h)Uh*jubh]X -- rr}r(h)Uh*jubh]X@An object representing the site on which account was registered.rr}r(h)X@An object representing the site on which account was registered.h*jubeh0hdubah0jubeh0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Return typerr}r(h)Uh*jubah0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r (h)Uh2}r (h6]h7]h5]h4]h8]uh*jh$]r h)r }r (h)X``None``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XNonerr}r(h)Uh*j ubah0hubah0hdubah0jubeh0jubeubeubeubeubeubha)r}r(h)XnAdditionally, :class:`RegistrationProfile` has a custom manager (accessed as ``RegistrationProfile.objects``):h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XAdditionally, rr}r(h)XAdditionally, h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjNjjuh:Kh$]rh)r }r!(h)jh2}r"(h6]h7]r#(h{jXpy-classr$eh5]h4]h8]uh*jh$]r%h]XRegistrationProfiler&r'}r((h)Uh*j ubah0hubaubh]X# has a custom manager (accessed as r)r*}r+(h)X# has a custom manager (accessed as h*jubh)r,}r-(h)X``RegistrationProfile.objects``h2}r.(h6]h7]h5]h4]h8]uh*jh$]r/h]XRegistrationProfile.objectsr0r1}r2(h)Uh*j,ubah0hubh]X):r3r4}r5(h)X):h*jubeubhF)r6}r7(h)Uh*jh+Nh0hIh2}r8(h4]h5]h6]h7]h8]Uentries]r9(hLX2RegistrationManager (class in registration.models)hUtr:auh:Nh;hh$]ubj)r;}r<(h)Uh*jh+Nh0jh2}r=(jjXpyh4]h5]h6]h7]h8]jXclassr>jj>uh:Nh;hh$]r?(j)r@}rA(h)XRegistrationManagerrBh*j;h+h.h0jh2}rC(h4]rDhajjh5]h6]h7]h8]rEhajjBjUjuh:Kh;hh$]rF(j)rG}rH(h)Xclass h*j@h+h.h0j h2}rI(h6]h7]h5]h4]h8]uh:Kh;hh$]rJh]Xclass rKrL}rM(h)Uh*jGubaubj)rN}rO(h)Xregistration.models.h*j@h+h.h0jh2}rP(h6]h7]h5]h4]h8]uh:Kh;hh$]rQh]Xregistration.models.rRrS}rT(h)Uh*jNubaubj)rU}rV(h)jBh*j@h+h.h0jh2}rW(h6]h7]h5]h4]h8]uh:Kh;hh$]rXh]XRegistrationManagerrYrZ}r[(h)Uh*jUubaubeubj")r\}r](h)Uh*j;h+h.h0j%h2}r^(h6]h7]h5]h4]h8]uh:Kh;hh$]r_(ha)r`}ra(h)XzThis manager provides several convenience methods for creating and working with instances of :class:`RegistrationProfile`:h*j\h+h.h0hdh2}rb(h6]h7]h5]h4]h8]uh:Kh;hh$]rc(h]X]This manager provides several convenience methods for creating and working with instances of rdre}rf(h)X]This manager provides several convenience methods for creating and working with instances of h*j`ubhj)rg}rh(h)X:class:`RegistrationProfile`rih*j`h+h.h0hnh2}rj(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrkh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rlh)rm}rn(h)jih2}ro(h6]h7]rp(h{jkXpy-classrqeh5]h4]h8]uh*jgh$]rrh]XRegistrationProfilersrt}ru(h)Uh*jmubah0hubaubh]X:rv}rw(h)X:h*j`ubeubhF)rx}ry(h)Uh*j\h+Nh0hIh2}rz(h4]h5]h6]h7]h8]Uentries]r{(hLX@activate_user() (registration.models.RegistrationManager method)hUtr|auh:Nh;hh$]ubj)r}}r~(h)Uh*j\h+Nh0jh2}r(jjXpyrh4]h5]h6]h7]h8]jXmethodrjjuh:Nh;hh$]r(j)r}r(h)Xactivate_user(activation_key)h*j}h+h.h0jh2}r(h4]rhajjh5]h6]h7]h8]rhajX!RegistrationManager.activate_userjjBjuh:Kh;hh$]r(j)r}r(h)X activate_userh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rh]X activate_userrr}r(h)Uh*jubaubj)r}r(h)Uh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rj)r}r(h)Xactivation_keyh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xactivation_keyrr}r(h)Uh*jubah0jubaubeubj")r}r(h)Uh*j}h+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(ha)r}r(h)XXValidates ``activation_key`` and, if valid, activates the associated account by setting its ``is_active`` field to ``True``. To prevent re-activation of accounts, the :attr:`~RegistrationProfile.activation_key` of the :class:`RegistrationProfile` for the account will be set to :attr:`RegistrationProfile.ACTIVATED` after successful activation.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]X Validates rr}r(h)X Validates h*jubh)r}r(h)X``activation_key``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xactivation_keyrr}r(h)Uh*jubah0hubh]X@ and, if valid, activates the associated account by setting its rr}r(h)X@ and, if valid, activates the associated account by setting its h*jubh)r}r(h)X ``is_active``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X is_activerr}r(h)Uh*jubah0hubh]X field to rr}r(h)X field to h*jubh)r}r(h)X``True``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XTruerr}r(h)Uh*jubah0hubh]X,. To prevent re-activation of accounts, the rr}r(h)X,. To prevent re-activation of accounts, the h*jubhj)r}r(h)X+:attr:`~RegistrationProfile.activation_key`rh*jh+h.h0hnh2}r(UreftypeXattrhphqX"RegistrationProfile.activation_keyU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-attrreh5]h4]h8]uh*jh$]rh]Xactivation_keyrr}r(h)Uh*jubah0hubaubh]X of the rr}r(h)X of the h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X for the account will be set to rr}r(h)X for the account will be set to h*jubhj)r}r(h)X%:attr:`RegistrationProfile.ACTIVATED`rh*jh+h.h0hnh2}r(UreftypeXattrhphqXRegistrationProfile.ACTIVATEDU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-attrreh5]h4]h8]uh*jh$]rh]XRegistrationProfile.ACTIVATEDrr}r(h)Uh*jubah0hubaubh]X after successful activation.rr}r(h)X after successful activation.h*jubeubha)r}r(h)XhReturns the ``User`` instance representing the account if activation is successful, ``False`` otherwise.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]X Returns the rr}r(h)X Returns the h*jubh)r}r(h)X``User``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XUserrr}r(h)Uh*jubah0hubh]X@ instance representing the account if activation is successful, rr }r (h)X@ instance representing the account if activation is successful, h*jubh)r }r (h)X ``False``h2}r (h6]h7]h5]h4]h8]uh*jh$]rh]XFalserr}r(h)Uh*j ubah0hubh]X otherwise.rr}r(h)X otherwise.h*jubeubj)r}r(h)Uh*jh+Nh0jh2}r(h6]h7]h5]h4]h8]uh:Nh;hh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r h]X Parametersr!r"}r#(h)Uh*jubah0jubj)r$}r%(h)Uh2}r&(h6]h7]h5]h4]h8]uh*jh$]r'ha)r(}r)(h)Uh2}r*(h6]h7]h5]h4]h8]uh*j$h$]r+(j/)r,}r-(h)Xactivation_keyh2}r.(h6]h7]h5]h4]h8]uh*j(h$]r/h]Xactivation_keyr0r1}r2(h)Uh*j,ubah0j7ubh]X (r3r4}r5(h)Uh*j(ubhj)r6}r7(h)Uh2}r8(UreftypeUobjr9U reftargetX%string, a 40-character SHA1 hexdigestr:U refdomainjh4]h5]U refexplicith6]h7]h8]uh*j(h$]r;hv)r<}r=(h)j:h2}r>(h6]h7]h5]h4]h8]uh*j6h$]r?h]X%string, a 40-character SHA1 hexdigestr@rA}rB(h)Uh*j<ubah0hubah0hnubh]X)rC}rD(h)Uh*j(ubh]X -- rErF}rG(h)Uh*j(ubh]X-The activation key to use for the activation.rHrI}rJ(h)X-The activation key to use for the activation.h*j(ubeh0hdubah0jubeh0jubj)rK}rL(h)Uh2}rM(h6]h7]h5]h4]h8]uh*jh$]rN(j)rO}rP(h)Uh2}rQ(h6]h7]h5]h4]h8]uh*jKh$]rRh]X Return typerSrT}rU(h)Uh*jOubah0jubj)rV}rW(h)Uh2}rX(h6]h7]h5]h4]h8]uh*jKh$]rYha)rZ}r[(h)Uh2}r\(h6]h7]h5]h4]h8]uh*jVh$]r](h)r^}r_(h)X``User``h2}r`(h6]h7]h5]h4]h8]uh*jZh$]rah]XUserrbrc}rd(h)Uh*j^ubah0hubh]X or boolrerf}rg(h)X or boolh*jZubeh0hdubah0jubeh0jubeubeubeubhF)rh}ri(h)Uh*j\h+Nh0hIh2}rj(h4]h5]h6]h7]h8]Uentries]rk(hLXGdelete_expired_users() (registration.models.RegistrationManager method)h Utrlauh:Nh;hh$]ubj)rm}rn(h)Uh*j\h+Nh0jh2}ro(jjXpyh4]h5]h6]h7]h8]jXmethodrpjjpuh:Nh;hh$]rq(j)rr}rs(h)Xdelete_expired_usersrth*jmh+h.h0jh2}ru(h4]rvh ajjh5]h6]h7]h8]rwh ajX(RegistrationManager.delete_expired_usersjjBjuh:Kh;hh$]rx(j)ry}rz(h)jth*jrh+h.h0jh2}r{(h6]h7]h5]h4]h8]uh:Kh;hh$]r|h]Xdelete_expired_usersr}r~}r(h)Uh*jyubaubj)r}r(h)Uh*jrh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]ubeubj")r}r(h)Uh*jmh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(ha)r}r(h)XRemoves expired instances of :class:`RegistrationProfile`, and their associated user accounts, from the database. This is useful as a periodic maintenance task to clean out accounts which registered but never activated.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XRemoves expired instances of rr}r(h)XRemoves expired instances of h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X, and their associated user accounts, from the database. This is useful as a periodic maintenance task to clean out accounts which registered but never activated.rr}r(h)X, and their associated user accounts, from the database. This is useful as a periodic maintenance task to clean out accounts which registered but never activated.h*jubeubha)r}r(h)XAccounts to be deleted are identified by searching for instances of :class:`RegistrationProfile` with expired activation keys and with associated user accounts which are inactive (have their ``is_active`` field set to ``False``). To disable a user account without having it deleted, simply delete its associated :class:`RegistrationProfile`; any ``User`` which does not have an associated :class:`RegistrationProfile` will not be deleted.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XDAccounts to be deleted are identified by searching for instances of rr}r(h)XDAccounts to be deleted are identified by searching for instances of h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X_ with expired activation keys and with associated user accounts which are inactive (have their rr}r(h)X_ with expired activation keys and with associated user accounts which are inactive (have their h*jubh)r}r(h)X ``is_active``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X is_activerr}r(h)Uh*jubah0hubh]X field set to rr}r(h)X field set to h*jubh)r}r(h)X ``False``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XFalserr}r(h)Uh*jubah0hubh]XU). To disable a user account without having it deleted, simply delete its associated rr}r(h)XU). To disable a user account without having it deleted, simply delete its associated h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X; any rr}r(h)X; any h*jubh)r}r(h)X``User``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XUserrr}r(h)Uh*jubah0hubh]X# which does not have an associated rr}r(h)X# which does not have an associated h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X will not be deleted.rr}r(h)X will not be deleted.h*jubeubha)r}r(h)XA custom management command is provided which will execute this method, suitable for use in cron jobs or other scheduled maintenance tasks: ``manage.py cleanupregistration``.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XA custom management command is provided which will execute this method, suitable for use in cron jobs or other scheduled maintenance tasks: rr}r(h)XA custom management command is provided which will execute this method, suitable for use in cron jobs or other scheduled maintenance tasks: h*jubh)r}r(h)X!``manage.py cleanupregistration``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xmanage.py cleanupregistrationrr}r(h)Uh*jubah0hubh]X.r }r (h)X.h*jubeubj)r }r (h)Uh*jh+Nh0jh2}r (h6]h7]h5]h4]h8]uh:Nh;hh$]rj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*j h$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Return typerr}r(h)Uh*jubah0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r (h6]h7]h5]h4]h8]uh*jh$]r!h)r"}r#(h)X``None``h2}r$(h6]h7]h5]h4]h8]uh*jh$]r%h]XNoner&r'}r((h)Uh*j"ubah0hubah0hdubah0jubeh0jubaubeubeubhF)r)}r*(h)Uh*j\h+Nh0hIh2}r+(h4]h5]h6]h7]h8]Uentries]r,(hLXGcreate_inactive_user() (registration.models.RegistrationManager method)h Utr-auh:Nh;hh$]ubj)r.}r/(h)Uh*j\h+Nh0jh2}r0(jjXpyr1h4]h5]h6]h7]h8]jXmethodr2jj2uh:Nh;hh$]r3(j)r4}r5(h)XCcreate_inactive_user(username, email, password, site[, send_email])h*j.h+h.h0jh2}r6(h4]r7h ajjh5]h6]h7]h8]r8h ajX(RegistrationManager.create_inactive_userjjBjuh:Kh;hh$]r9(j)r:}r;(h)Xcreate_inactive_userh*j4h+h.h0jh2}r<(h6]h7]h5]h4]h8]uh:Kh;hh$]r=h]Xcreate_inactive_userr>r?}r@(h)Uh*j:ubaubj)rA}rB(h)Uh*j4h+h.h0jh2}rC(h6]h7]h5]h4]h8]uh:Kh;hh$]rD(j)rE}rF(h)Xusernameh2}rG(h6]h7]h5]h4]h8]uh*jAh$]rHh]XusernamerIrJ}rK(h)Uh*jEubah0jubj)rL}rM(h)Xemailh2}rN(h6]h7]h5]h4]h8]uh*jAh$]rOh]XemailrPrQ}rR(h)Uh*jLubah0jubj)rS}rT(h)Xpasswordh2}rU(h6]h7]h5]h4]h8]uh*jAh$]rVh]XpasswordrWrX}rY(h)Uh*jSubah0jubj)rZ}r[(h)Xsiteh2}r\(h6]h7]h5]h4]h8]uh*jAh$]r]h]Xsiter^r_}r`(h)Uh*jZubah0jubcsphinx.addnodes desc_optional ra)rb}rc(h)Uh2}rd(h6]h7]h5]h4]h8]uh*jAh$]rej)rf}rg(h)X send_emailh2}rh(h6]h7]h5]h4]h8]uh*jbh$]rih]X send_emailrjrk}rl(h)Uh*jfubah0jubah0U desc_optionalrmubeubeubj")rn}ro(h)Uh*j.h+h.h0j%h2}rp(h6]h7]h5]h4]h8]uh:Kh;hh$]rq(ha)rr}rs(h)XCreates a new, inactive user account and an associated instance of :class:`RegistrationProfile`, sends the activation email and returns the new ``User`` object representing the account.h*jnh+h.h0hdh2}rt(h6]h7]h5]h4]h8]uh:Kh;hh$]ru(h]XCCreates a new, inactive user account and an associated instance of rvrw}rx(h)XCCreates a new, inactive user account and an associated instance of h*jrubhj)ry}rz(h)X:class:`RegistrationProfile`r{h*jrh+h.h0hnh2}r|(UreftypeXclasshphqXRegistrationProfileU refdomainXpyr}h4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]r~h)r}r(h)j{h2}r(h6]h7]r(h{j}Xpy-classreh5]h4]h8]uh*jyh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X1, sends the activation email and returns the new rr}r(h)X1, sends the activation email and returns the new h*jrubh)r}r(h)X``User``h2}r(h6]h7]h5]h4]h8]uh*jrh$]rh]XUserrr}r(h)Uh*jubah0hubh]X! object representing the account.rr}r(h)X! object representing the account.h*jrubeubj)r}r(h)Uh*jnh+Nh0jh2}r(h6]h7]h5]h4]h8]uh:Nh;hh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Parametersrr}r(h)Uh*jubah0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rcdocutils.nodes bullet_list r)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(jB)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j/)r}r(h)Xusernameh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xusernamerr}r(h)Uh*jubah0j7ubh]X (rr}r(h)Uh*jubhj)r}r(h)Uh2}r(Ureftypej9U reftargetXstringrU refdomainj1h4]h5]U refexplicith6]h7]h8]uh*jh$]rhv)r}r(h)jh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xstringrr}r(h)Uh*jubah0hubah0hnubh]X)r}r(h)Uh*jubh]X -- rr}r(h)Uh*jubh]X(The username to use for the new account.rr}r(h)X(The username to use for the new account.h*jubeh0hdubah0jEubjB)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j/)r}r(h)Xemailh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xemailrr}r(h)Uh*jubah0j7ubh]X (rr}r(h)Uh*jubhj)r}r(h)Uh2}r(Ureftypej9U reftargetXstringrU refdomainj1h4]h5]U refexplicith6]h7]h8]uh*jh$]rhv)r}r(h)jh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xstringrr}r(h)Uh*jubah0hubah0hnubh]X)r}r(h)Uh*jubh]X -- rr}r(h)Uh*jubh]X-The email address to use for the new account.rr}r(h)X-The email address to use for the new account.h*jubeh0hdubah0jEubjB)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j/)r}r(h)Xpasswordh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xpasswordrr}r(h)Uh*jubah0j7ubh]X (rr }r (h)Uh*jubhj)r }r (h)Uh2}r (Ureftypej9U reftargetXstringrU refdomainj1h4]h5]U refexplicith6]h7]h8]uh*jh$]rhv)r}r(h)jh2}r(h6]h7]h5]h4]h8]uh*j h$]rh]Xstringrr}r(h)Uh*jubah0hubah0hnubh]X)r}r(h)Uh*jubh]X -- rr}r(h)Uh*jubh]X(The password to use for the new account.rr}r(h)X(The password to use for the new account.h*jubeh0hdubah0jEubjB)r}r (h)Uh2}r!(h6]h7]h5]h4]h8]uh*jh$]r"ha)r#}r$(h)Uh2}r%(h6]h7]h5]h4]h8]uh*jh$]r&(j/)r'}r((h)Xsiteh2}r)(h6]h7]h5]h4]h8]uh*j#h$]r*h]Xsiter+r,}r-(h)Uh*j'ubah0j7ubh]X (r.r/}r0(h)Uh*j#ubh)r1}r2(h)X$``django.contrib.sites.models.Site``h2}r3(h6]h7]h5]h4]h8]uh*j#h$]r4h]X django.contrib.sites.models.Siter5r6}r7(h)Uh*j1ubah0hubh]X or r8r9}r:(h)X or h*j#ubh)r;}r<(h)X+``django.contrib.sites.models.RequestSite``h2}r=(h6]h7]h5]h4]h8]uh*j#h$]r>h]X'django.contrib.sites.models.RequestSiter?r@}rA(h)Uh*j;ubah0hubh]X)rB}rC(h)Uh*j#ubh]X -- rDrE}rF(h)Uh*j#ubh]XIAn object representing the site on which the account is being registered.rGrH}rI(h)XIAn object representing the site on which the account is being registered.h*j#ubeh0hdubah0jEubjB)rJ}rK(h)Uh2}rL(h6]h7]h5]h4]h8]uh*jh$]rMha)rN}rO(h)Uh2}rP(h6]h7]h5]h4]h8]uh*jJh$]rQ(j/)rR}rS(h)X send_emailh2}rT(h6]h7]h5]h4]h8]uh*jNh$]rUh]X send_emailrVrW}rX(h)Uh*jRubah0j7ubh]X (rYrZ}r[(h)Uh*jNubhj)r\}r](h)Uh2}r^(Ureftypej9U reftargetXboolr_U refdomainj1h4]h5]U refexplicith6]h7]h8]uh*jNh$]r`hv)ra}rb(h)j_h2}rc(h6]h7]h5]h4]h8]uh*j\h$]rdh]Xboolrerf}rg(h)Uh*jaubah0hubah0hnubh]X)rh}ri(h)Uh*jNubh]X -- rjrk}rl(h)Uh*jNubh]XIf rmrn}ro(h)XIf h*jNubh)rp}rq(h)X``True``h2}rr(h6]h7]h5]h4]h8]uh*jNh$]rsh]XTruertru}rv(h)Uh*jpubah0hubh]X?, the activation email will be sent to the account (by calling rwrx}ry(h)X?, the activation email will be sent to the account (by calling h*jNubhj)rz}r{(h)X1:meth:`RegistrationProfile.send_activation_email`r|h*jNh+h.h0hnh2}r}(UreftypeXmethhphqX)RegistrationProfile.send_activation_emailU refdomainXpyr~h4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)j|h2}r(h6]h7]r(h{j~Xpy-methreh5]h4]h8]uh*jzh$]rh]X+RegistrationProfile.send_activation_email()rr}r(h)Uh*jubah0hubaubh]X). If rr}r(h)X). If h*jNubh)r}r(h)X ``False``h2}r(h6]h7]h5]h4]h8]uh*jNh$]rh]XFalserr}r(h)Uh*jubah0hubh]X@, no email will be sent (but the account will still be inactive)rr}r(h)X@, no email will be sent (but the account will still be inactive)h*jNubeh0hdubah0jEubeh0U bullet_listrubah0jubeh0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]r(j)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]X Return typerr}r(h)Uh*jubah0jubj)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rha)r}r(h)Uh2}r(h6]h7]h5]h4]h8]uh*jh$]rh)r}r(h)X``User``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]XUserrr}r(h)Uh*jubah0hubah0hdubah0jubeh0jubeubeubeubhF)r}r(h)Uh*j\h+Nh0hIh2}r(h4]h5]h6]h7]h8]Uentries]r(hLXAcreate_profile() (registration.models.RegistrationManager method)hUtrauh:Nh;hh$]ubj)r}r(h)Uh*j\h+Nh0jh2}r(jjXpyh4]h5]h6]h7]h8]jXmethodrjjuh:Nh;hh$]r(j)r}r(h)Xcreate_profile(user)rh*jh+h.h0jh2}r(h4]rhajjh5]h6]h7]h8]rhajX"RegistrationManager.create_profilejjBjuh:Kh;hh$]r(j)r}r(h)Xcreate_profileh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rh]Xcreate_profilerr}r(h)Uh*jubaubj)r}r(h)Uh*jh+h.h0jh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]rj)r}r(h)Xuserh2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xuserrr}r(h)Uh*jubah0jubaubeubj")r}r(h)Uh*jh+h.h0j%h2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(ha)r}r(h)XdCreates and returns a :class:`RegistrationProfile` instance for the account represented by ``user``.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XCreates and returns a rr}r(h)XCreates and returns a h*jubhj)r}r(h)X:class:`RegistrationProfile`rh*jh+h.h0hnh2}r(UreftypeXclasshphqXRegistrationProfileU refdomainXpyrh4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]rh)r}r(h)jh2}r(h6]h7]r(h{jXpy-classreh5]h4]h8]uh*jh$]rh]XRegistrationProfilerr}r(h)Uh*jubah0hubaubh]X) instance for the account represented by rr}r(h)X) instance for the account represented by h*jubh)r}r(h)X``user``h2}r(h6]h7]h5]h4]h8]uh*jh$]rh]Xuserrr}r(h)Uh*jubah0hubh]X.r}r(h)X.h*jubeubha)r}r(h)XThe ``RegistrationProfile`` created by this method will have its :attr:`~RegistrationProfile.activation_key` set to a SHA1 hash generated from a combination of the account's username and a random salt.h*jh+h.h0hdh2}r(h6]h7]h5]h4]h8]uh:Kh;hh$]r(h]XThe rr}r (h)XThe h*jubh)r }r (h)X``RegistrationProfile``h2}r (h6]h7]h5]h4]h8]uh*jh$]r h]XRegistrationProfiler r }r (h)Uh*j ubah0hubh]X& created by this method will have its r r }r (h)X& created by this method will have its h*jubhj)r }r (h)X+:attr:`~RegistrationProfile.activation_key`r h*jh+h.h0hnh2}r (UreftypeXattrhphqX"RegistrationProfile.activation_keyU refdomainXpyr h4]h5]U refexplicith6]h7]h8]hshtjjBjjuh:Kh$]r h)r }r (h)j h2}r (h6]h7]r (h{j Xpy-attrr eh5]h4]h8]uh*j h$]r h]Xactivation_keyr r }r (h)Uh*j ubah0hubaubh]X] set to a SHA1 hash generated from a combination of the account's username and a random salt.r r }r (h)X] set to a SHA1 hash generated from a combination of the account's username and a random salt.h*jubeubj)r }r (h)Uh*jh+Nh0jh2}r (h6]h7]h5]h4]h8]uh:Nh;hh$]r (j)r! }r" (h)Uh2}r# (h6]h7]h5]h4]h8]uh*j h$]r$ (j)r% }r& (h)Uh2}r' (h6]h7]h5]h4]h8]uh*j! h$]r( h]X Parametersr) r* }r+ (h)Uh*j% ubah0jubj)r, }r- (h)Uh2}r. (h6]h7]h5]h4]h8]uh*j! h$]r/ ha)r0 }r1 (h)Uh2}r2 (h6]h7]h5]h4]h8]uh*j, h$]r3 (j/)r4 }r5 (h)Xuserh2}r6 (h6]h7]h5]h4]h8]uh*j0 h$]r7 h]Xuserr8 r9 }r: (h)Uh*j4 ubah0j7ubh]X (r; r< }r= (h)Uh*j0 ubh)r> }r? (h)X``User``r@ h2}rA (h6]h7]h5]h4]h8]uh*j0 h$]rB h]XUserrC rD }rE (h)Uh*j> ubah0hubh]X)rF }rG (h)Uh*j0 ubh]X -- rH rI }rJ (h)Uh*j0 ubh]X!The user account; an instance of rK rL }rM (h)X!The user account; an instance of h*j0 ubh)rN }rO (h)X#``django.contrib.auth.models.User``h2}rP (h6]h7]h5]h4]h8]uh*j0 h$]rQ h]Xdjango.contrib.auth.models.UserrR rS }rT (h)Uh*jN ubah0hubh]X.rU }rV (h)X.h*j0 ubeh0hdubah0jubeh0jubj)rW }rX (h)Uh2}rY (h6]h7]h5]h4]h8]uh*j h$]rZ (j)r[ }r\ (h)Uh2}r] (h6]h7]h5]h4]h8]uh*jW h$]r^ h]X Return typer_ r` }ra (h)Uh*j[ ubah0jubj)rb }rc (h)Uh2}rd (h6]h7]h5]h4]h8]uh*jW h$]re ha)rf }rg (h)Uh2}rh (h6]h7]h5]h4]h8]uh*jb h$]ri h)rj }rk (h)X``RegistrationProfile``rl h2}rm (h6]h7]h5]h4]h8]uh*jf h$]rn h]XRegistrationProfilero rp }rq (h)Uh*jj ubah0hubah0hdubah0jubeh0jubeubeubeubeubeubeubeubeh)UU transformerrr NU footnote_refsrs }rt Urefnamesru }rv Usymbol_footnotesrw ]rx Uautofootnote_refsry ]rz Usymbol_footnote_refsr{ ]r| U citationsr} ]r~ h;hU current_liner NUtransform_messagesr ]r (cdocutils.nodes system_message r )r }r (h)Uh2}r (h6]UlevelKh4]h5]Usourceh.h7]h8]UlineKUtypeUINFOr uh$]r ha)r }r (h)Uh2}r (h6]h7]h5]h4]h8]uh*j h$]r h]X5Hyperlink target "default-backend" is not referenced.r r }r (h)Uh*j ubah0hdubah0Usystem_messager ubj )r }r (h)Uh2}r (h6]UlevelKh4]h5]Usourceh.h7]h8]UlineKUtypej uh$]r ha)r }r (h)Uh2}r (h6]h7]h5]h4]h8]uh*j h$]r h]X5Hyperlink target "default-backend" is not referenced.r r }r (h)Uh*j ubah0hdubah0j ubj )r }r (h)Uh2}r (h6]UlevelKh4]h5]Usourceh.h7]h8]UlineKUtypej uh$]r ha)r }r (h)Uh2}r (h6]h7]h5]h4]h8]uh*j h$]r h]XVHyperlink target "the documentation for the django sites framework" is not referenced.r r }r (h)Uh*j ubah0hdubah0j ubeUreporterr NUid_startr KU autofootnotesr ]r U citation_refsr }r Uindirect_targetsr ]r Usettingsr (cdocutils.frontend Values r or }r (Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttp://tools.ietf.org/html/r U tracebackr KUpep_referencesr NUstrip_commentsr NU toc_backlinksr Uentryr U language_coder Uenr U datestampr NU report_levelr KU _destinationr NU halt_levelr KU strip_classesr NhZNUerror_encoding_error_handlerr Ubackslashreplacer Udebugr NUembed_stylesheetr Uoutput_encoding_error_handlerr Ustrictr U sectnum_xformr KUdump_transformsr NU docinfo_xformr KUwarning_streamr NUpep_file_url_templater Upep-%04dr Uexit_status_levelr KUconfigr NUstrict_visitorr NUcloak_email_addressesr Utrim_footnote_reference_spacer Uenvr NUdump_pseudo_xmlr NUexpose_internalsr NUsectsubtitle_xformr U source_linkr NUrfc_referencesr NUoutput_encodingr Uutf-8r U source_urlr NUinput_encodingr U utf-8-sigr U_disable_configr NU id_prefixr UU tab_widthr KUerror_encodingr UUTF-8r U_sourcer UI/Users/james/dev/hg/personal/django-registration/docs/default-backend.rstr Ugettext_compactr U generatorr NUdump_internalsr NU pep_base_urlr Uhttp://www.python.org/dev/peps/r Uinput_encoding_error_handlerr j Uauto_id_prefixr Uidr Udoctitle_xformr Ustrip_elements_with_classesr NU _config_filesr ]r Ufile_insertion_enabledr KU raw_enabledr KU dump_settingsr NubUsymbol_footnote_startr KUidsr }r (h jhjhBhh!h7ubah"h#ubUfaqq?h)q@}qA(hUh}qB(h]h]h]h]h]uh]qChXFrequently-asked questionsqDqE}qF(hXFrequently-asked questionsqGh!h@ubah"h#ubU backend-apiqHh)qI}qJ(hUh}qK(h]h]h]h]h]uh]qLhXUser registration backendsqMqN}qO(hXUser registration backendsqPh!hIubah"h#ubUformsqQh)qR}qS(hUh}qT(h]h]h]h]h]uh]qUhXForms for user registrationqVqW}qX(hXForms for user registrationqYh!hRubah"h#ubU release-notesqZh)q[}q\(hUh}q](h]h]h]h]h]uh]q^hX Release notesq_q`}qa(hX Release notesqbh!h[ubah"h#ubUupgradeqch)qd}qe(hUh}qf(Udupnamesqg]Uclassesqh]Ubackrefsqi]Uidsqj]Unamesqk]uh]qlhX Upgrade guideqmqn}qo(hX Upgrade guideqph!hdubah"UtitleqqubUdefault-backendqrh)qs}qt(hUh}qu(h]h]h]h]h]uh]qvhXThe default backendqwqx}qy(hXThe default backendqzh!hsubah"h#ubUsignalsq{h)q|}q}(hUh}q~(h]h]h]h]h]uh]qhX*Custom signals used by django-registrationqq}q(hX*Custom signals used by django-registrationqh!h|ubah"h#ubuU domaindataq}q(Ustd}q(Ulabels}q(UgenindexqhUcsphinx.locale _TranslationProxy qcsphinx.locale mygettext qUIndexqqhhqbXupgradeqhcUupgradeqX Upgrade guideX quickstartqh-U quickstartqXQuick start guideUmodindexqU py-modindexUhhU Module IndexqqhhqbXfaqqh?UfaqqXFrequently-asked questionsX backend-apiqhHU backend-apiqXUser registration backendsUsearchqhUhhU Search PageqqhhqbX release-notesqhZU release-notesqX Release notesuU anonlabels}q(XformshQUformshhUhh?hhh-hXviewsh6UviewshU py-modindexUXsimple-backendh$Usimple-backendhhHhhUsearchUXsignalsh{UsignalshhZhhhchXdefault-backendhrUdefault-backenduUversionqKU progoptions}Uobjectsq}uUc}q(h}hKuUpy}q(h}q(X>registration.models.RegistrationProfile.activation_key_expiredqhrXmethodXregistration.signalsqh{UmoduleqX<registration.models.RegistrationManager.delete_expired_usersqhrXmethodX.registration.forms.RegistrationFormNoFreeEmailqhQXclassX6registration.models.RegistrationProfile.activation_keyqhrX attributeX5registration.models.RegistrationManager.activate_userqhrXmethodX$registration.signals.user_registeredqh{XdataXregistration.viewsqh6hX#registration.forms.RegistrationFormqhQXclassX,registration.models.RegistrationProfile.userqhrX attributeX6registration.models.RegistrationManager.create_profileqhrXmethodXregistration.views.activateqh6XfunctionX#registration.signals.user_activatedqh{XdataX1registration.models.RegistrationProfile.ACTIVATEDqhrX attributeX.registration.forms.RegistrationFormUniqueEmailqhQXclassX'registration.models.RegistrationManagerqhrXclassX1registration.forms.RegistrationFormTermsOfServiceqhQXclassX'registration.models.RegistrationProfileqhrXclassXregistration.backends.defaultqhrhX<registration.models.RegistrationManager.create_inactive_userqhrXmethodX=registration.models.RegistrationProfile.send_activation_emailqhrXmethodXregistration.backends.simpleqh$hXregistration.views.registerqh6XfunctionXregistration.formsqhQhuUmodules}q(h(h$UUth(h6UUth(hrUUth(hQUUth(h{UUtuhKuUjs}q(h}hKuUcpp}q(h}hKuUrst}q(h}hKuuU glob_toctreesqh]RqUimagesqh)qh]RqbU doctreedirqUE/Users/james/dev/hg/personal/django-registration/docs/_build/doctreesqUversioning_conditionqʉU citationsq}UversionqK)UsrcdirqU5/Users/james/dev/hg/personal/django-registration/docsqUconfigqcsphinx.config Config q)q}q(U source_suffixqU.rstU copyrightqX2007-2012, James BennettUtemplates_pathq]qU _templatesqaU overridesq}Upygments_styleqUsphinxqUlatex_documentsq]q(UindexUdjango-registration.texX!django-registration DocumentationX James BennettUmanualtqaU exclude_treesq]qU_buildqaUprojectqXdjango-registrationUhtmlhelp_basenameqUdjango-registrationdochU0.8qU extensionsq]Uhtml_static_pathq]qU_staticqaU html_themeqUdefaultqUreleaseqhU master_docqUindexqUsetupqNubUmetadataq}q(h}h$}h-}h6}h?}hH}hQ}hZ}hc}hr}h{}uUversionchangesq}Utoc_num_entriesq}q(hKh$Kh-K h6Kh?KhHK hQKhZKhcKhrKh{KuUnumbered_toctreesqh]RqU found_docsqh]q(UindexqUsimple-backendqU quickstartqUviewsqUfaqqU backend-apiqUformsqU release-notesqhcUdefault-backendqUsignalsreRrU longtitlesr}r(hhh$h%h-h.h6h7h?h@hHhIhQhRhZh[hchdhrhsh{h|uU dependenciesr}Utoctree_includesr}rh]r(X quickstartrX release-notesr Xupgrader X backend-apir Xdefault-backendr Xsimple-backendr XformsrXviewsrXsignalsrXfaqresU temp_datar}Utocsr}r(hcdocutils.nodes bullet_list r)r}r(hUh}r(h]h]h]h]h]uh]rcdocutils.nodes list_item r)r}r(hUh}r(h]h]h]h]h]uh!jh]r(csphinx.addnodes compact_paragraph r)r }r!(hUh}r"(h]h]h]h]h]uh!jh]r#cdocutils.nodes reference r$)r%}r&(hUh}r'(U anchornameUh]h]h]Urefurihh]h]Uinternaluh!j h]r(hX%django-registration 0.8 documentationr)r*}r+(hh h!j%ubah"U referencer,ubah"Ucompact_paragraphr-ubj)r.}r/(hUh}r0(h]h]h]h]h]uh!jh]r1csphinx.addnodes toctree r2)r3}r4(hUh}r5(UnumberedKUparenthh]Uglobh]h]U titlesonlyh]h]Uentries]r6(Njr7Nj r8Nj r9Nj r:Nj r;Nj r<Njr=Njr>Njr?Njr@eUhiddenU includefiles]rA(jj j j j j jjjjeUmaxdepthKuh!j.h]h"Utoctreeubah"U bullet_listrBubeh"U list_itemrCubah"jBubh$j)rD}rE(hUh}rF(h]h]h]h]h]uh]rGj)rH}rI(hUh}rJ(h]h]h]h]h]uh!jDh]rK(j)rL}rM(hUh}rN(h]h]h]h]h]uh!jHh]rOj$)rP}rQ(hUh}rR(U anchornameUh]h]h]Urefurih$h]h]Uinternaluh!jLh]rShXThe "simple" (one-step) backendrTrU}rV(hh,h!jPubah"j,ubah"j-ubj)rW}rX(hUh}rY(h]h]h]h]h]uh!jHh]rZj)r[}r\(hUh}r](h]h]h]h]h]uh!jWh]r^j)r_}r`(hUh}ra(h]h]h]h]h]uh!j[h]rbj$)rc}rd(hUh}re(U anchornameU#configurationh]h]h]Urefurih$h]h]Uinternaluh!j_h]rfhX Configurationrgrh}ri(hX Configurationh!jcubah"j,ubah"j-ubah"jCubah"jBubeh"jCubah"jBubh-j)rj}rk(hUh}rl(h]h]h]h]h]uh]rmj)rn}ro(hUh}rp(h]h]h]h]h]uh!jjh]rq(j)rr}rs(hUh}rt(h]h]h]h]h]uh!jnh]ruj$)rv}rw(hUh}rx(U anchornameUh]h]h]Urefurih-h]h]Uinternaluh!jrh]ryhXQuick start guiderzr{}r|(hh5h!jvubah"j,ubah"j-ubj)r}}r~(hUh}r(h]h]h]h]h]uh!jnh]r(j)r}r(hUh}r(h]h]h]h]h]uh!j}h]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#installing-django-registrationh]h]h]Urefurih-h]h]Uinternaluh!jh]rhXInstalling django-registrationrr}r(hXInstalling django-registrationh!jubah"j,ubah"j-ubj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU-#automatic-installation-via-a-package-managerh]h]h]Urefurih-h]h]Uinternaluh!jh]rhX,Automatic installation via a package managerrr}r(hX,Automatic installation via a package managerh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU.#manual-installation-from-a-downloaded-packageh]h]h]Urefurih-h]h]Uinternaluh!jh]rhX-Manual installation from a downloaded packagerr}r(hX-Manual installation from a downloaded packageh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU.#manual-installation-from-a-mercurial-checkouth]h]h]Urefurih-h]h]Uinternaluh!jh]rhX-Manual installation from a Mercurial checkoutrr}r(hX-Manual installation from a Mercurial checkouth!jubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubj)r}r(hUh}r(h]h]h]h]h]uh!j}h]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#basic-configuration-and-useh]h]h]Urefurih-h]h]Uinternaluh!jh]rhXBasic configuration and userr}r(hXBasic configuration and useh!jubah"j,ubah"j-ubj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#required-settingsh]h]h]Urefurih-h]h]Uinternaluh!jh]rhXRequired settingsrr}r(hXRequired settingsh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#setting-up-urlsh]h]h]Urefurih-h]h]Uinternaluh!jh]rhXSetting up URLsrr}r(hXSetting up URLsh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#required-templatesh]h]h]Urefurih-h]h]Uinternaluh!jh]rhXRequired templatesrr}r(hXRequired templatesh!jubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubeh"jBubeh"jCubah"jBubh6j)r}r(hUh}r(h]h]h]h]h]uh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r }r (hUh}r (h]h]h]h]h]uh!jh]r j$)r }r(hUh}r(U anchornameUh]h]h]Urefurih6h]h]Uinternaluh!j h]rhXRegistration viewsrr}r(hh>h!j ubah"j,ubah"j-ubah"jCubah"jBubh?j)r}r(hUh}r(h]h]h]h]h]uh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r }r!(hUh}r"(U anchornameUh]h]h]Urefurih?h]h]Uinternaluh!jh]r#hXFrequently-asked questionsr$r%}r&(hhGh!j ubah"j,ubah"j-ubj)r'}r((hUh}r)(h]h]h]h]h]uh!jh]r*(j)r+}r,(hUh}r-(h]h]h]h]h]uh!j'h]r.j)r/}r0(hUh}r1(h]h]h]h]h]uh!j+h]r2j$)r3}r4(hUh}r5(U anchornameU#generalh]h]h]Urefurih?h]h]Uinternaluh!j/h]r6hXGeneralr7r8}r9(hXGeneralh!j3ubah"j,ubah"j-ubah"jCubj)r:}r;(hUh}r<(h]h]h]h]h]uh!j'h]r=j)r>}r?(hUh}r@(h]h]h]h]h]uh!j:h]rAj$)rB}rC(hUh}rD(U anchornameU#installation-and-setuph]h]h]Urefurih?h]h]Uinternaluh!j>h]rEhXInstallation and setuprFrG}rH(hXInstallation and setuph!jBubah"j,ubah"j-ubah"jCubj)rI}rJ(hUh}rK(h]h]h]h]h]uh!j'h]rLj)rM}rN(hUh}rO(h]h]h]h]h]uh!jIh]rPj$)rQ}rR(hUh}rS(U anchornameU#configurationh]h]h]Urefurih?h]h]Uinternaluh!jMh]rThX ConfigurationrUrV}rW(hX Configurationh!jQubah"j,ubah"j-ubah"jCubj)rX}rY(hUh}rZ(h]h]h]h]h]uh!j'h]r[j)r\}r](hUh}r^(h]h]h]h]h]uh!jXh]r_j$)r`}ra(hUh}rb(U anchornameU#troubleshootingh]h]h]Urefurih?h]h]Uinternaluh!j\h]rchXTroubleshootingrdre}rf(hXTroubleshootingh!j`ubah"j,ubah"j-ubah"jCubj)rg}rh(hUh}ri(h]h]h]h]h]uh!j'h]rjj)rk}rl(hUh}rm(h]h]h]h]h]uh!jgh]rnj$)ro}rp(hUh}rq(U anchornameU#tips-and-tricksh]h]h]Urefurih?h]h]Uinternaluh!jkh]rrhXTips and tricksrsrt}ru(hXTips and tricksh!joubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubah"jBubhHj)rv}rw(hUh}rx(h]h]h]h]h]uh]ryj)rz}r{(hUh}r|(h]h]h]h]h]uh!jvh]r}(j)r~}r(hUh}r(h]h]h]h]h]uh!jzh]rj$)r}r(hUh}r(U anchornameUh]h]h]UrefurihHh]h]Uinternaluh!j~h]rhXUser registration backendsrr}r(hhPh!jubah"j,ubah"j-ubj)r}r(hUh}r(h]h]h]h]h]uh!jzh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#specifying-the-backend-to-useh]h]h]UrefurihHh]h]Uinternaluh!jh]rhXSpecifying the backend to userr}r(hXSpecifying the backend to useh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#id1h]h]h]UrefurihHh]h]Uinternaluh!jh]rhX Backend APIrr}r(hX Backend APIh!jubah"j,ubah"j-ubj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#register-request-kwargsh]h]h]UrefurihHh]h]Uinternaluh!jh]rhXregister(request, **kwargs)rr}r(hXregister(request, \*\*kwargs)h!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#activate-request-kwargsh]h]h]UrefurihHh]h]Uinternaluh!jh]rhXactivate(request, **kwargs)rr}r(hXactivate(request, \*\*kwargs)h!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#registration-allowed-requesth]h]h]UrefurihHh]h]Uinternaluh!jh]rhXregistration_allowed(request)rr}r(hXregistration_allowed(request)h!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU#get-form-class-requesth]h]h]UrefurihHh]h]Uinternaluh!jh]rhXget_form_class(request)rr}r(hXget_form_class(request)h!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU(#post-registration-redirect-request-userh]h]h]UrefurihHh]h]Uinternaluh!jh]rhX)post_registration_redirect(request, user)rr}r(hX)post_registration_redirect(request, user)h!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU&#post-activation-redirect-request-userh]h]h]UrefurihHh]h]Uinternaluh!jh]rhX'post_activation_redirect(request, user)rr}r(hX'post_activation_redirect(request, user)h!jubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubeh"jBubeh"jCubah"jBubhQj)r }r (hUh}r (h]h]h]h]h]uh]r j)r }r(hUh}r(h]h]h]h]h]uh!j h]rj)r}r(hUh}r(h]h]h]h]h]uh!j h]rj$)r}r(hUh}r(U anchornameUh]h]h]UrefurihQh]h]Uinternaluh!jh]rhXForms for user registrationrr}r(hhYh!jubah"j,ubah"j-ubah"jCubah"jBubhZj)r}r(hUh}r(h]h]h]h]h]uh]rj)r }r!(hUh}r"(h]h]h]h]h]uh!jh]r#(j)r$}r%(hUh}r&(h]h]h]h]h]uh!j h]r'j$)r(}r)(hUh}r*(U anchornameUh]h]h]UrefurihZh]h]Uinternaluh!j$h]r+hX Release notesr,r-}r.(hhbh!j(ubah"j,ubah"j-ubj)r/}r0(hUh}r1(h]h]h]h]h]uh!j h]r2(j)r3}r4(hUh}r5(h]h]h]h]h]uh!j/h]r6j)r7}r8(hUh}r9(h]h]h]h]h]uh!j3h]r:j$)r;}r<(hUh}r=(U anchornameU#the-backend-systemh]h]h]UrefurihZh]h]Uinternaluh!j7h]r>hXThe backend systemr?r@}rA(hXThe backend systemh!j;ubah"j,ubah"j-ubah"jCubj)rB}rC(hUh}rD(h]h]h]h]h]uh!j/h]rEj)rF}rG(hUh}rH(h]h]h]h]h]uh!jBh]rIj$)rJ}rK(hUh}rL(U anchornameU#other-new-featuresh]h]h]UrefurihZh]h]Uinternaluh!jFh]rMhXOther new featuresrNrO}rP(hXOther new featuresh!jJubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubah"jBubhcj)rQ}rR(hUh}rS(hg]hh]hi]hj]hk]uh]rTj)rU}rV(hUh}rW(hg]hh]hi]hj]hk]uh!jQh]rX(j)rY}rZ(hUh}r[(hg]hh]hi]hj]hk]uh!jUh]r\j$)r]}r^(hUh}r_(U anchornameUUrefurihchj]hi]hg]hh]hk]Uinternaluh!jYh]r`hX Upgrade guiderarb}rc(hhph!j]ubah"U referencerdubah"Ucompact_paragraphreubj)rf}rg(hUh}rh(hg]hh]hi]hj]hk]uh!jUh]ri(j)rj}rk(hUh}rl(hg]hh]hi]hj]hk]uh!jfh]rmj)rn}ro(hUh}rp(hg]hh]hi]hj]hk]uh!jjh]rqj$)rr}rs(hUh}rt(U anchornameU#django-version-requirementUrefurihchj]hi]hg]hh]hk]Uinternaluh!jnh]ruhXDjango version requirementrvrw}rx(hXDjango version requirementryh!jrubah"jdubah"jeubah"U list_itemrzubj)r{}r|(hUh}r}(hg]hh]hi]hj]hk]uh!jfh]r~(j)r}r(hUh}r(hg]hh]hi]hj]hk]uh!j{h]rj$)r}r(hUh}r(U anchornameU#backwards-incompatible-changesUrefurihchj]hi]hg]hh]hk]Uinternaluh!jh]rhXBackwards-incompatible changesrr}r(hXBackwards-incompatible changesrh!jubah"jdubah"jeubj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!j{h]r(j)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj$)r}r(hUh}r(U anchornameU#changes-to-registration-viewsUrefurihchj]hi]hg]hh]hk]Uinternaluh!jh]rhXChanges to registration viewsrr}r(hXChanges to registration viewsrh!jubah"jdubah"jeubah"jzubj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj$)r}r(hUh}r(U anchornameU#changes-to-registration-formsUrefurihchj]hi]hg]hh]hk]Uinternaluh!jh]rhXChanges to registration formsrr}r(hXChanges to registration formsrh!jubah"jdubah"jeubah"jzubj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj)r}r(hUh}r(hg]hh]hi]hj]hk]uh!jh]rj$)r}r(hUh}r(U anchornameU)#changes-to-the-registrationprofile-modelUrefurihchj]hi]hg]hh]hk]Uinternaluh!jh]r(hXChanges to the rr}r(hXChanges to the rh!jubcdocutils.nodes literal r)r}r(hXRegistrationProfileh}r(hg]hh]hi]hj]hk]uh!jh]rhXRegistrationProfilerr}r(hUh!jubah"UliteralrubhX modelrr}r(hX modelrh!jubeh"jdubah"jeubah"jzubeh"U bullet_listrubeh"jzubeh"jubeh"jzubah"jubhrj)r}r(hUh}r(h]h]h]h]h]uh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameUh]h]h]Urefurihrh]h]Uinternaluh!jh]rhXThe default backendrr}r(hhzh!jubah"j,ubah"j-ubj)r}r(hUh}r(h]h]h]h]h]uh!jh]r(j)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU##default-behavior-and-configurationh]h]h]Urefurihrh]h]Uinternaluh!jh]rhX"Default behavior and configurationrr}r(hX"Default behavior and configurationh!jubah"j,ubah"j-ubah"jCubj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]rj$)r}r(hUh}r(U anchornameU*#how-account-data-is-stored-for-activationh]h]h]Urefurihrh]h]Uinternaluh!jh]rhX)How account data is stored for activationrr}r(hX)How account data is stored for activationh!jubah"j,ubah"j-ubah"jCubeh"jBubeh"jCubah"jBubh{j)r}r(hUh}r(h]h]h]h]h]uh]rj)r}r(hUh}r(h]h]h]h]h]uh!jh]r j)r }r (hUh}r (h]h]h]h]h]uh!jh]r j$)r}r(hUh}r(U anchornameUh]h]h]Urefurih{h]h]Uinternaluh!j h]rhX*Custom signals used by django-registrationrr}r(hhh!jubah"j,ubah"j-ubah"jCubah"jBubuU indexentriesr}r(h]h$]r(UsinglerX%registration.backends.simple (module)X#module-registration.backends.simpleUtrah-]h6]r((jXregistration.views (module)Xmodule-registration.viewsUtr(jX)activate() (in module registration.views)hUtr(jX)register() (in module registration.views)hUtreh?]hH]hQ]r((jXregistration.forms (module)Xmodule-registration.formsUtr(jX.RegistrationForm (class in registration.forms)hUtr (jX<RegistrationFormTermsOfService (class in registration.forms)hUtr!(jX9RegistrationFormUniqueEmail (class in registration.forms)hUtr"(jX9RegistrationFormNoFreeEmail (class in registration.forms)hUtr#ehZ]hc]hr]r$((jX&registration.backends.default (module)X$module-registration.backends.defaultUtr%(jX2RegistrationProfile (class in registration.models)hUtr&(jX8user (registration.models.RegistrationProfile attribute)hUtr'(jXBactivation_key (registration.models.RegistrationProfile attribute)hUtr((jX=ACTIVATED (registration.models.RegistrationProfile attribute)hUtr)(jXIactivation_key_expired() (registration.models.RegistrationProfile method)hUtr*(jXHsend_activation_email() (registration.models.RegistrationProfile method)hUtr+(jX2RegistrationManager (class in registration.models)hUtr,(jX@activate_user() (registration.models.RegistrationManager method)hUtr-(jXGdelete_expired_users() (registration.models.RegistrationManager method)hUtr.(jXGcreate_inactive_user() (registration.models.RegistrationManager method)hUtr/(jXAcreate_profile() (registration.models.RegistrationManager method)hUtr0eh{]r1((jXregistration.signals (module)Xmodule-registration.signalsUtr2(jX/user_activated (in module registration.signals)hUtr3(jX0user_registered (in module registration.signals)hUtr4euUall_docsr5}r6(hGAۅA]dh$GAۅBh-GAۅA}h6GAۅB h?GAۅA2hHGAۅAhQGAۅA hZGAۅA{hcGAۅ;ihrGAۅAh{GAۅAuUsettingsr7}r8(Ucloak_email_addressesU pep_base_urlUhttp://www.python.org/dev/peps/r9U halt_levelKUsectsubtitle_xformUembed_stylesheetUtrim_footnote_reference_spaceUdoctitle_xformUwarning_streamcsphinx.util.nodes WarningStream r:)r;}r<(U_rer=cre _compile r>U+\((DEBUG|INFO|WARNING|ERROR|SEVERE)/[0-4]\)r?KRr@UwarnfuncrANubUenvhU rfc_base_urlUhttp://tools.ietf.org/html/rBUgettext_compactUinput_encodingU utf-8-sigrCuUfiles_to_rebuildrD}rE(jh]rFhaRrGj h]rHhaRrIjh]rJhaRrKjh]rLhaRrMj h]rNhaRrOj h]rPhaRrQjh]rRhaRrSj h]rThaRrUj h]rVhaRrWjh]rXhaRrYuUtoc_secnumbersrZ}U_nitpick_ignorer[h]Rr\U _warnfuncr]Nub.django-registration-1.0/docs/_build/doctrees/faq.doctree0000644000076700007670000015071411733412407023710 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(Xintroduces generic viewsqKXinstallation and setupqNXfaqqKXcustom admin actionq KX#an osi-approved open-source licenseq KXgeneralq NXfrequently-asked questionsq NXtroubleshootingq NXtips and tricksqNX configurationqNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUintroduces-generic-viewsqhUinstallation-and-setupqhUfaqqh Ucustom-admin-actionqh U#an-osi-approved-open-source-licenseqh Ugeneralqh Ufrequently-asked-questionsqh Utroubleshootingq hUtips-and-tricksq!hU configurationq"uUchildrenq#]q$(cdocutils.nodes target q%)q&}q'(U rawsourceq(X.. _faq:Uparentq)hUsourceq*cdocutils.nodes reprunicode q+X=/Users/james/dev/hg/personal/django-registration/docs/faq.rstq,q-}q.bUtagnameq/Utargetq0U attributesq1}q2(Uidsq3]Ubackrefsq4]Udupnamesq5]Uclassesq6]Unamesq7]Urefidq8huUlineq9KUdocumentq:hh#]ubcdocutils.nodes section q;)q<}q=(h(Uh)hh*h-Uexpect_referenced_by_nameq>}q?hh&sh/Usectionq@h1}qA(h5]h6]h4]h3]qB(hheh7]qC(h heuh9Kh:hUexpect_referenced_by_idqD}qEhh&sh#]qF(cdocutils.nodes title qG)qH}qI(h(XFrequently-asked questionsqJh)h`_, and allows you a large degree of freedom in modifiying and redistributing the code. For the full terms, see the file ``LICENSE`` which came with your copy of django-registration; if you did not receive a copy of this file, you can view it online at . h)hkh*h-h/Udefinition_list_itemqsh1}qt(h5]h6]h4]h3]h7]uh9Kh#]qu(cdocutils.nodes term qv)qw}qx(h(Uh1}qy(h5]h6]h4]h3]h7]uh)hqh#]qzcdocutils.nodes strong q{)q|}q}(h(X.**What license is django-registration under?**q~h1}q(h5]h6]h4]h3]h7]uh)hwh#]qhNX*What license is django-registration under?qq}q(h(Uh)h|ubah/Ustrongqubah/Utermqubcdocutils.nodes definition q)q}q(h(Uh1}q(h5]h6]h4]h3]h7]uh)hqh#]qhR)q}q(h(Xdjango-registration is offered under a three-clause BSD-style license; this is `an OSI-approved open-source license `_, and allows you a large degree of freedom in modifiying and redistributing the code. For the full terms, see the file ``LICENSE`` which came with your copy of django-registration; if you did not receive a copy of this file, you can view it online at .h)hh*h-h/hVh1}q(h5]h6]h4]h3]h7]uh9Kh#]q(hNXOdjango-registration is offered under a three-clause BSD-style license; this is qq}q(h(XOdjango-registration is offered under a three-clause BSD-style license; this is h)hubcdocutils.nodes reference q)q}q(h(X[`an OSI-approved open-source license `_h1}q(UnameX#an OSI-approved open-source licenseUrefuriqX2http://www.opensource.org/licenses/bsd-license.phpqh3]h4]h5]h6]h7]uh)hh#]qhNX#an OSI-approved open-source licenseqq}q(h(Uh)hubah/U referencequbh%)q}q(h(X5 h1}q(Urefurihh3]qhah4]h5]h6]h7]qh auh)hh#]h/h0ubhNXw, and allows you a large degree of freedom in modifiying and redistributing the code. For the full terms, see the file qq}q(h(Xw, and allows you a large degree of freedom in modifiying and redistributing the code. For the full terms, see the file h)hubcdocutils.nodes literal q)q}q(h(X ``LICENSE``h1}q(h5]h6]h4]h3]h7]uh)hh#]qhNXLICENSEqq}q(h(Uh)hubah/UliteralqubhNXz which came with your copy of django-registration; if you did not receive a copy of this file, you can view it online at .qq}q(h(X>.h)hubeubah/U definitionqubeubhp)q}q(h(X**Why are the forms and models for the default backend not in the default backend?** The model and manager used by :ref:`the default backend ` are in ``registration.models``, and the default form class (and various subclasses) are in ``registration.forms``; logically, they might be expected to exist in ``registration.backends.default``, but there are several reasons why that's not such a good idea: 1. Older versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: ``import`` statements would need to be changed, and some database updates would be needed to reflect the new location of the :class:`~registration.models.RegistrationProfile` model. 2. Due to the design of Django's ORM, the ``RegistrationProfile`` model would end up with an ``app_label`` of ``default``, which isn't particularly descriptive and may conflict with other applications. By keeping it in ``registration.models``, it retains an ``app_label`` of ``registration``, which more accurately reflects what it does and is less likely to cause problems. 3. Although the ``RegistrationProfile`` model and the various :ref:`form classes ` are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the ``RegistrationProfile`` model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use). h)hkh*h-h/hsh1}q(h5]h6]h4]h3]h7]uh9K7h:hh#]q(hv)q}q(h(Uh1}q(h5]h6]h4]h3]h7]uh)hh#]qh{)q}q(h(XT**Why are the forms and models for the default backend not in the default backend?**qh1}q(h5]h6]h4]h3]h7]uh)hh#]qhNXPWhy are the forms and models for the default backend not in the default backend?qʅq}q(h(Uh)hubah/hubah/hubh)q}q(h(Uh1}q(h5]h6]h4]h3]h7]uh)hh#]q(hR)q}q(h(XMThe model and manager used by :ref:`the default backend ` are in ``registration.models``, and the default form class (and various subclasses) are in ``registration.forms``; logically, they might be expected to exist in ``registration.backends.default``, but there are several reasons why that's not such a good idea:h)hh*h-h/hVh1}q(h5]h6]h4]h3]h7]uh9Kh#]q(hNXThe model and manager used by qՅq}q(h(XThe model and manager used by h)hubcsphinx.addnodes pending_xref q)q}q(h(X,:ref:`the default backend `qh)hh*h-h/U pending_xrefqh1}q(UreftypeXrefUrefwarnqވU reftargetqXdefault-backendU refdomainXstdqh3]h4]U refexplicith5]h6]h7]UrefdocqUfaqquh9Kh#]qcdocutils.nodes emphasis q)q}q(h(hh1}q(h5]h6]q(UxrefqhXstd-refqeh4]h3]h7]uh)hh#]qhNXthe default backendq셁q}q(h(Uh)hubah/UemphasisqubaubhNX are in qq}q(h(X are in h)hubh)q}q(h(X``registration.models``h1}q(h5]h6]h4]h3]h7]uh)hh#]qhNXregistration.modelsqq}q(h(Uh)hubah/hubhNX=, and the default form class (and various subclasses) are in qq}q(h(X=, and the default form class (and various subclasses) are in h)hubh)q}q(h(X``registration.forms``h1}q(h5]h6]h4]h3]h7]uh)hh#]rhNXregistration.formsrr}r(h(Uh)hubah/hubhNX0; logically, they might be expected to exist in rr}r(h(X0; logically, they might be expected to exist in h)hubh)r}r(h(X!``registration.backends.default``h1}r (h5]h6]h4]h3]h7]uh)hh#]r hNXregistration.backends.defaultr r }r (h(Uh)jubah/hubhNX@, but there are several reasons why that's not such a good idea:rr}r(h(X@, but there are several reasons why that's not such a good idea:h)hubeubcdocutils.nodes enumerated_list r)r}r(h(Uh1}r(UsuffixrU.h3]h4]h5]UprefixrUh6]h7]UenumtyperUarabicruh)hh#]r(cdocutils.nodes list_item r)r}r(h(XKOlder versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: ``import`` statements would need to be changed, and some database updates would be needed to reflect the new location of the :class:`~registration.models.RegistrationProfile` model. h1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r (h(XJOlder versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: ``import`` statements would need to be changed, and some database updates would be needed to reflect the new location of the :class:`~registration.models.RegistrationProfile` model.h)jh*h-h/hVh1}r!(h5]h6]h4]h3]h7]uh9K h#]r"(hNXOlder versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: r#r$}r%(h(XOlder versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: h)jubh)r&}r'(h(X ``import``h1}r((h5]h6]h4]h3]h7]uh)jh#]r)hNXimportr*r+}r,(h(Uh)j&ubah/hubhNXs statements would need to be changed, and some database updates would be needed to reflect the new location of the r-r.}r/(h(Xs statements would need to be changed, and some database updates would be needed to reflect the new location of the h)jubh)r0}r1(h(X1:class:`~registration.models.RegistrationProfile`r2h)jh*h-h/hh1}r3(UreftypeXclasshމhX'registration.models.RegistrationProfileU refdomainXpyr4h3]h4]U refexplicith5]h6]h7]hhUpy:classr5NU py:moduler6Nuh9K h#]r7h)r8}r9(h(j2h1}r:(h5]h6]r;(hj4Xpy-classr<eh4]h3]h7]uh)j0h#]r=hNXRegistrationProfiler>r?}r@(h(Uh)j8ubah/hubaubhNX model.rArB}rC(h(X model.h)jubeubah/U list_itemrDubj)rE}rF(h(XtDue to the design of Django's ORM, the ``RegistrationProfile`` model would end up with an ``app_label`` of ``default``, which isn't particularly descriptive and may conflict with other applications. By keeping it in ``registration.models``, it retains an ``app_label`` of ``registration``, which more accurately reflects what it does and is less likely to cause problems. h1}rG(h5]h6]h4]h3]h7]uh)jh#]rHhR)rI}rJ(h(XsDue to the design of Django's ORM, the ``RegistrationProfile`` model would end up with an ``app_label`` of ``default``, which isn't particularly descriptive and may conflict with other applications. By keeping it in ``registration.models``, it retains an ``app_label`` of ``registration``, which more accurately reflects what it does and is less likely to cause problems.h)jEh*h-h/hVh1}rK(h5]h6]h4]h3]h7]uh9K'h#]rL(hNX'Due to the design of Django's ORM, the rMrN}rO(h(X'Due to the design of Django's ORM, the h)jIubh)rP}rQ(h(X``RegistrationProfile``h1}rR(h5]h6]h4]h3]h7]uh)jIh#]rShNXRegistrationProfilerTrU}rV(h(Uh)jPubah/hubhNX model would end up with an rWrX}rY(h(X model would end up with an h)jIubh)rZ}r[(h(X ``app_label``h1}r\(h5]h6]h4]h3]h7]uh)jIh#]r]hNX app_labelr^r_}r`(h(Uh)jZubah/hubhNX of rarb}rc(h(X of h)jIubh)rd}re(h(X ``default``h1}rf(h5]h6]h4]h3]h7]uh)jIh#]rghNXdefaultrhri}rj(h(Uh)jdubah/hubhNXb, which isn't particularly descriptive and may conflict with other applications. By keeping it in rkrl}rm(h(Xb, which isn't particularly descriptive and may conflict with other applications. By keeping it in h)jIubh)rn}ro(h(X``registration.models``h1}rp(h5]h6]h4]h3]h7]uh)jIh#]rqhNXregistration.modelsrrrs}rt(h(Uh)jnubah/hubhNX, it retains an rurv}rw(h(X, it retains an h)jIubh)rx}ry(h(X ``app_label``h1}rz(h5]h6]h4]h3]h7]uh)jIh#]r{hNX app_labelr|r}}r~(h(Uh)jxubah/hubhNX of rr}r(h(X of h)jIubh)r}r(h(X``registration``h1}r(h5]h6]h4]h3]h7]uh)jIh#]rhNX registrationrr}r(h(Uh)jubah/hubhNXS, which more accurately reflects what it does and is less likely to cause problems.rr}r(h(XS, which more accurately reflects what it does and is less likely to cause problems.h)jIubeubah/jDubj)r}r(h(XAlthough the ``RegistrationProfile`` model and the various :ref:`form classes ` are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the ``RegistrationProfile`` model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use). h1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XAlthough the ``RegistrationProfile`` model and the various :ref:`form classes ` are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the ``RegistrationProfile`` model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use).h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9K/h#]r(hNX Although the rr}r(h(X Although the h)jubh)r}r(h(X``RegistrationProfile``h1}r(h5]h6]h4]h3]h7]uh)jh#]rhNXRegistrationProfilerr}r(h(Uh)jubah/hubhNX model and the various rr}r(h(X model and the various h)jubh)r}r(h(X:ref:`form classes `rh)jh*h-h/hh1}r(UreftypeXrefhވhXformsU refdomainXstdrh3]h4]U refexplicith5]h6]h7]hhuh9K/h#]rh)r}r(h(jh1}r(h5]h6]r(hjXstd-refreh4]h3]h7]uh)jh#]rhNX form classesrr}r(h(Uh)jubah/hubaubhNX are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the rr}r(h(X are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the h)jubh)r}r(h(X``RegistrationProfile``h1}r(h5]h6]h4]h3]h7]uh)jh#]rhNXRegistrationProfilerr}r(h(Uh)jubah/hubhNX model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use).rr}r(h(X model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use).h)jubeubah/jDubeh/Uenumerated_listrubeh/hubeubeubeubh;)r}r(h(Uh)h`. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9K=h#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(X)**How do I install django-registration?**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX%How do I install django-registration?rr}r(h(Uh)jubah/hubah/hubh)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XMFull instructions are available in :ref:`the quick start guide `.h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9K=h#]r(hNX#Full instructions are available in rr}r(h(X#Full instructions are available in h)jubh)r}r(h(X):ref:`the quick start guide `rh)jh*h-h/hh1}r(UreftypeXrefhވhX quickstartU refdomainXstdrh3]h4]U refexplicith5]h6]h7]hhuh9K=h#]rh)r}r(h(jh1}r(h5]h6]r(hjXstd-refreh4]h3]h7]uh)jh#]rhNXthe quick start guiderr}r(h(Uh)jubah/hubaubhNX.r}r(h(X.h)jubeubah/hubeubhp)r}r(h(X**Do I need to put a copy of django-registration in every project I use it in?** No; putting applications in your project directory is a very bad habit, and you should stop doing it. If you followed the instructions mentioned above, django-registration was installed into a location that's on your Python import path, so you'll only ever need to add ``registration`` to your ``INSTALLED_APPS`` setting (in any project, or in any number of projects), and it will work. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9KFh:hh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(XP**Do I need to put a copy of django-registration in every project I use it in?**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNXLDo I need to put a copy of django-registration in every project I use it in?r r }r (h(Uh)jubah/hubah/hubh)r }r (h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XNo; putting applications in your project directory is a very bad habit, and you should stop doing it. If you followed the instructions mentioned above, django-registration was installed into a location that's on your Python import path, so you'll only ever need to add ``registration`` to your ``INSTALLED_APPS`` setting (in any project, or in any number of projects), and it will work.h)j h*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9K@h#]r(hNX No; putting applications in your project directory is a very bad habit, and you should stop doing it. If you followed the instructions mentioned above, django-registration was installed into a location that's on your Python import path, so you'll only ever need to add rr}r(h(X No; putting applications in your project directory is a very bad habit, and you should stop doing it. If you followed the instructions mentioned above, django-registration was installed into a location that's on your Python import path, so you'll only ever need to add h)jubh)r}r(h(X``registration``h1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX registrationrr}r(h(Uh)jubah/hubhNX to your rr}r (h(X to your h)jubh)r!}r"(h(X``INSTALLED_APPS``h1}r#(h5]h6]h4]h3]h7]uh)jh#]r$hNXINSTALLED_APPSr%r&}r'(h(Uh)j!ubah/hubhNXJ setting (in any project, or in any number of projects), and it will work.r(r)}r*(h(XJ setting (in any project, or in any number of projects), and it will work.h)jubeubah/hubeubhp)r+}r,(h(X**Does django-registration come with any sample templates I can use right away?** No, for two reasons: 1. Providing default templates with an application is generally hard to impossible, because different sites can have such wildly different design and template structure. Any attempt to provide templates which would work with all the possibilities would probably end up working with none of them. 2. A number of things in django-registration depend on the specific :ref:`registration backend ` you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like. Fortunately, however, django-registration has good documentation which explains what context variables will be available to templates, and so it should be easy for anyone who knows Django's template system to create templates which integrate with their own site. h)jh*h-h/hsh1}r-(h5]h6]h4]h3]h7]uh9K]h:hh#]r.(hv)r/}r0(h(Uh1}r1(h5]h6]h4]h3]h7]uh)j+h#]r2h{)r3}r4(h(XQ**Does django-registration come with any sample templates I can use right away?**r5h1}r6(h5]h6]h4]h3]h7]uh)j/h#]r7hNXMDoes django-registration come with any sample templates I can use right away?r8r9}r:(h(Uh)j3ubah/hubah/hubh)r;}r<(h(Uh1}r=(h5]h6]h4]h3]h7]uh)j+h#]r>(hR)r?}r@(h(XNo, for two reasons:rAh)j;h*h-h/hVh1}rB(h5]h6]h4]h3]h7]uh9KIh#]rChNXNo, for two reasons:rDrE}rF(h(jAh)j?ubaubj)rG}rH(h(Uh1}rI(jU.h3]h4]h5]jUh6]h7]jjuh)j;h#]rJ(j)rK}rL(h(X%Providing default templates with an application is generally hard to impossible, because different sites can have such wildly different design and template structure. Any attempt to provide templates which would work with all the possibilities would probably end up working with none of them. h1}rM(h5]h6]h4]h3]h7]uh)jGh#]rNhR)rO}rP(h(X$Providing default templates with an application is generally hard to impossible, because different sites can have such wildly different design and template structure. Any attempt to provide templates which would work with all the possibilities would probably end up working with none of them.rQh)jKh*h-h/hVh1}rR(h5]h6]h4]h3]h7]uh9KKh#]rShNX$Providing default templates with an application is generally hard to impossible, because different sites can have such wildly different design and template structure. Any attempt to provide templates which would work with all the possibilities would probably end up working with none of them.rTrU}rV(h(jQh)jOubaubah/jDubj)rW}rX(h(X[A number of things in django-registration depend on the specific :ref:`registration backend ` you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like. h1}rY(h5]h6]h4]h3]h7]uh)jGh#]rZhR)r[}r\(h(XZA number of things in django-registration depend on the specific :ref:`registration backend ` you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like.h)jWh*h-h/hVh1}r](h5]h6]h4]h3]h7]uh9KQh#]r^(hNXAA number of things in django-registration depend on the specific r_r`}ra(h(XAA number of things in django-registration depend on the specific h)j[ubh)rb}rc(h(X):ref:`registration backend `rdh)j[h*h-h/hh1}re(UreftypeXrefhވhX backend-apiU refdomainXstdrfh3]h4]U refexplicith5]h6]h7]hhuh9KQh#]rgh)rh}ri(h(jdh1}rj(h5]h6]rk(hjfXstd-refrleh4]h3]h7]uh)jbh#]rmhNXregistration backendrnro}rp(h(Uh)jhubah/hubaubhNX you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like.rqrr}rs(h(X you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like.h)j[ubeubah/jDubeh/jubhR)rt}ru(h(XFortunately, however, django-registration has good documentation which explains what context variables will be available to templates, and so it should be easy for anyone who knows Django's template system to create templates which integrate with their own site.rvh)j;h*h-h/hVh1}rw(h5]h6]h4]h3]h7]uh9KXh#]rxhNXFortunately, however, django-registration has good documentation which explains what context variables will be available to templates, and so it should be easy for anyone who knows Django's template system to create templates which integrate with their own site.ryrz}r{(h(jvh)jtubaubeh/hubeubeubeubh;)r|}r}(h(Uh)h`. * Use the :ref:`signals ` sent by the views to add custom behavior. * Write a custom :ref:`registration backend ` which implements the behavior you need, and have the views use your backend. If none of these are sufficient, your best option is likely to simply write your own views; however, it is hoped that the level of customization exposed by these options will be sufficient for nearly all user-registration workflows. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9Ksh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(XA**Do I need to rewrite the views to change the way they behave?**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX=Do I need to rewrite the views to change the way they behave?rr}r(h(Uh)jubah/hubah/hubh)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]r(hR)r}r(h(X\No. There are several ways you can customize behavior without making any changes whatsoever:rh)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Kch#]rhNX\No. There are several ways you can customize behavior without making any changes whatsoever:rr}r(h(jh)jubaubcdocutils.nodes bullet_list r)r}r(h(Uh1}r(UbulletrX*h3]h4]h5]h6]h7]uh)jh#]r(j)r}r(h(XsPass custom arguments -- e.g., to specify forms, template names, etc. -- to :ref:`the registration views `. h1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XrPass custom arguments -- e.g., to specify forms, template names, etc. -- to :ref:`the registration views `.h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Kfh#]r(hNXLPass custom arguments -- e.g., to specify forms, template names, etc. -- to rr}r(h(XLPass custom arguments -- e.g., to specify forms, template names, etc. -- to h)jubh)r}r(h(X%:ref:`the registration views `rh)jh*h-h/hh1}r(UreftypeXrefhވhXviewsU refdomainXstdrh3]h4]U refexplicith5]h6]h7]hhuh9Kfh#]rh)r}r(h(jh1}r(h5]h6]r(hjXstd-refreh4]h3]h7]uh)jh#]rhNXthe registration viewsrr}r(h(Uh)jubah/hubaubhNX.r}r(h(X.h)jubeubah/jDubj)r}r(h(XKUse the :ref:`signals ` sent by the views to add custom behavior. h1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XJUse the :ref:`signals ` sent by the views to add custom behavior.h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Kih#]r(hNXUse the rr}r(h(XUse the h)jubh)r}r(h(X:ref:`signals `rh)jh*h-h/hh1}r(UreftypeXrefhވhXsignalsU refdomainXstdrh3]h4]U refexplicith5]h6]h7]hhuh9Kih#]rh)r}r(h(jh1}r(h5]h6]r(hjXstd-refreh4]h3]h7]uh)jh#]rhNXsignalsrr}r(h(Uh)jubah/hubaubhNX* sent by the views to add custom behavior.rr}r(h(X* sent by the views to add custom behavior.h)jubeubah/jDubj)r}r(h(XWrite a custom :ref:`registration backend ` which implements the behavior you need, and have the views use your backend. h1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XWrite a custom :ref:`registration backend ` which implements the behavior you need, and have the views use your backend.h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Klh#]r(hNXWrite a custom rr}r(h(XWrite a custom h)jubh)r}r(h(X):ref:`registration backend `rh)jh*h-h/hh1}r(UreftypeXrefhވhX backend-apiU refdomainXstdrh3]h4]U refexplicith5]h6]h7]hhuh9Klh#]rh)r}r(h(jh1}r(h5]h6]r(hjXstd-refreh4]h3]h7]uh)jh#]rhNXregistration backendrr}r(h(Uh)jubah/hubaubhNXM which implements the behavior you need, and have the views use your backend.rr}r(h(XM which implements the behavior you need, and have the views use your backend.h)jubeubah/jDubeh/U bullet_listrubhR)r}r(h(XIf none of these are sufficient, your best option is likely to simply write your own views; however, it is hoped that the level of customization exposed by these options will be sufficient for nearly all user-registration workflows.r h)jh*h-h/hVh1}r (h5]h6]h4]h3]h7]uh9Kph#]r hNXIf none of these are sufficient, your best option is likely to simply write your own views; however, it is hoped that the level of customization exposed by these options will be sufficient for nearly all user-registration workflows.r r }r(h(j h)jubaubeh/hubeubhp)r}r(h(X?**How do I pass custom arguments to the views?** Part 3 of the official Django tutorial, when it `introduces generic views `_, covers the necessary mechanism: simply provide a dictionary of keyword arguments in your URLconf. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9Kzh:hh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(X0**How do I pass custom arguments to the views?**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX,How do I pass custom arguments to the views?rr}r(h(Uh)jubah/hubah/hubh)r}r (h(Uh1}r!(h5]h6]h4]h3]h7]uh)jh#]r"hR)r#}r$(h(X Part 3 of the official Django tutorial, when it `introduces generic views `_, covers the necessary mechanism: simply provide a dictionary of keyword arguments in your URLconf.h)jh*h-h/hVh1}r%(h5]h6]h4]h3]h7]uh9Kvh#]r&(hNX0Part 3 of the official Django tutorial, when it r'r(}r)(h(X0Part 3 of the official Django tutorial, when it h)j#ubh)r*}r+(h(Xz`introduces generic views `_h1}r,(UnameXintroduces generic viewshX\http://docs.djangoproject.com/en/dev/intro/tutorial04/#use-generic-views-less-code-is-betterr-h3]h4]h5]h6]h7]uh)j#h#]r.hNXintroduces generic viewsr/r0}r1(h(Uh)j*ubah/hubh%)r2}r3(h(X_ h1}r4(Urefurij-h3]r5hah4]h5]h6]h7]r6hauh)j#h#]h/h0ubhNXc, covers the necessary mechanism: simply provide a dictionary of keyword arguments in your URLconf.r7r8}r9(h(Xc, covers the necessary mechanism: simply provide a dictionary of keyword arguments in your URLconf.h)j#ubeubah/hubeubhp)r:}r;(h(X**Does that mean I should rewrite django-registration's default URLconf?** No; if you'd like to pass custom arguments to the registration views, simply write and include your own URLconf instead of including the default one provided with django-registration. h)jh*h-h/hsh1}r<(h5]h6]h4]h3]h7]uh9Kh:hh#]r=(hv)r>}r?(h(Uh1}r@(h5]h6]h4]h3]h7]uh)j:h#]rAh{)rB}rC(h(XJ**Does that mean I should rewrite django-registration's default URLconf?**rDh1}rE(h5]h6]h4]h3]h7]uh)j>h#]rFhNXFDoes that mean I should rewrite django-registration's default URLconf?rGrH}rI(h(Uh)jBubah/hubah/hubh)rJ}rK(h(Uh1}rL(h5]h6]h4]h3]h7]uh)j:h#]rMhR)rN}rO(h(XNo; if you'd like to pass custom arguments to the registration views, simply write and include your own URLconf instead of including the default one provided with django-registration.rPh)jJh*h-h/hVh1}rQ(h5]h6]h4]h3]h7]uh9K}h#]rRhNXNo; if you'd like to pass custom arguments to the registration views, simply write and include your own URLconf instead of including the default one provided with django-registration.rSrT}rU(h(jPh)jNubaubah/hubeubhp)rV}rW(h(XG**I don't want to write my own URLconf because I don't want to write patterns for all the auth views!** You're in luck, then; django-registration provides a URLconf which *only* contains the patterns for the auth views, and which you can include in your own URLconf anywhere you'd like; it lives at ``registration.auth_urls``. h)jh*h-h/hsh1}rX(h5]h6]h4]h3]h7]uh9Kh:hh#]rY(hv)rZ}r[(h(Uh1}r\(h5]h6]h4]h3]h7]uh)jVh#]r]h{)r^}r_(h(Xg**I don't want to write my own URLconf because I don't want to write patterns for all the auth views!**r`h1}ra(h5]h6]h4]h3]h7]uh)jZh#]rbhNXcI don't want to write my own URLconf because I don't want to write patterns for all the auth views!rcrd}re(h(Uh)j^ubah/hubah/hubh)rf}rg(h(Uh1}rh(h5]h6]h4]h3]h7]uh)jVh#]rihR)rj}rk(h(XYou're in luck, then; django-registration provides a URLconf which *only* contains the patterns for the auth views, and which you can include in your own URLconf anywhere you'd like; it lives at ``registration.auth_urls``.h)jfh*h-h/hVh1}rl(h5]h6]h4]h3]h7]uh9Kh#]rm(hNXCYou're in luck, then; django-registration provides a URLconf which rnro}rp(h(XCYou're in luck, then; django-registration provides a URLconf which h)jjubh)rq}rr(h(X*only*h1}rs(h5]h6]h4]h3]h7]uh)jjh#]rthNXonlyrurv}rw(h(Uh)jqubah/hubhNXz contains the patterns for the auth views, and which you can include in your own URLconf anywhere you'd like; it lives at rxry}rz(h(Xz contains the patterns for the auth views, and which you can include in your own URLconf anywhere you'd like; it lives at h)jjubh)r{}r|(h(X``registration.auth_urls``h1}r}(h5]h6]h4]h3]h7]uh)jjh#]r~hNXregistration.auth_urlsrr}r(h(Uh)j{ubah/hubhNX.r}r(h(X.h)jjubeubah/hubeubhp)r}r(h(X**I don't like the names you've given to the URL patterns!** In that case, you should feel free to set up your own URLconf which uses the names you want. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9Kh:hh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(X<**I don't like the names you've given to the URL patterns!**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX8I don't like the names you've given to the URL patterns!rr}r(h(Uh)jubah/hubah/hubh)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(X\In that case, you should feel free to set up your own URLconf which uses the names you want.rh)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Kh#]rhNX\In that case, you should feel free to set up your own URLconf which uses the names you want.rr}r(h(jh)jubaubah/hubeubeubeubh;)r}r(h(Uh)h`; your function should set the ``backend`` attribute of the user to the correct authentication backend, and then call ``django.contrib.auth.login()`` to log the user in. h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9Kh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(XH**How do I log a user in immediately after registration or activation?**rh1}r (h5]h6]h4]h3]h7]uh)jh#]r!hNXDHow do I log a user in immediately after registration or activation?r"r#}r$(h(Uh)jubah/hubah/hubh)r%}r&(h(Uh1}r'(h5]h6]h4]h3]h7]uh)jh#]r(hR)r)}r*(h(XYou can most likely do this simply by writing a function which listens for the appropriate :ref:`signal `; your function should set the ``backend`` attribute of the user to the correct authentication backend, and then call ``django.contrib.auth.login()`` to log the user in.h)j%h*h-h/hVh1}r+(h5]h6]h4]h3]h7]uh9Kh#]r,(hNX[You can most likely do this simply by writing a function which listens for the appropriate r-r.}r/(h(X[You can most likely do this simply by writing a function which listens for the appropriate h)j)ubh)r0}r1(h(X:ref:`signal `r2h)j)h*h-h/hh1}r3(UreftypeXrefhވhXsignalsU refdomainXstdr4h3]h4]U refexplicith5]h6]h7]hhuh9Kh#]r5h)r6}r7(h(j2h1}r8(h5]h6]r9(hj4Xstd-refr:eh4]h3]h7]uh)j0h#]r;hNXsignalr<r=}r>(h(Uh)j6ubah/hubaubhNX; your function should set the r?r@}rA(h(X; your function should set the h)j)ubh)rB}rC(h(X ``backend``h1}rD(h5]h6]h4]h3]h7]uh)j)h#]rEhNXbackendrFrG}rH(h(Uh)jBubah/hubhNXL attribute of the user to the correct authentication backend, and then call rIrJ}rK(h(XL attribute of the user to the correct authentication backend, and then call h)j)ubh)rL}rM(h(X``django.contrib.auth.login()``h1}rN(h5]h6]h4]h3]h7]uh)j)h#]rOhNXdjango.contrib.auth.login()rPrQ}rR(h(Uh)jLubah/hubhNX to log the user in.rSrT}rU(h(X to log the user in.h)j)ubeubah/hubeubhp)rV}rW(h(X**How do I re-send an activation email?** Assuming you're using :ref:`the default backend `, a `custom admin action `_ is provided for this; in the admin for the :class:`~registration.models.RegistrationProfile` model, simply click the checkbox for the user(s) you'd like to re-send the email for, then select the "Re-send activation emails" action. h)jh*h-h/hsh1}rX(h5]h6]h4]h3]h7]uh9Kh:hh#]rY(hv)rZ}r[(h(Uh1}r\(h5]h6]h4]h3]h7]uh)jVh#]r]h{)r^}r_(h(X)**How do I re-send an activation email?**r`h1}ra(h5]h6]h4]h3]h7]uh)jZh#]rbhNX%How do I re-send an activation email?rcrd}re(h(Uh)j^ubah/hubah/hubh)rf}rg(h(Uh1}rh(h5]h6]h4]h3]h7]uh)jVh#]rihR)rj}rk(h(XAssuming you're using :ref:`the default backend `, a `custom admin action `_ is provided for this; in the admin for the :class:`~registration.models.RegistrationProfile` model, simply click the checkbox for the user(s) you'd like to re-send the email for, then select the "Re-send activation emails" action.h)jfh*h-h/hVh1}rl(h5]h6]h4]h3]h7]uh9Kh#]rm(hNXAssuming you're using rnro}rp(h(XAssuming you're using h)jjubh)rq}rr(h(X,:ref:`the default backend `rsh)jjh*h-h/hh1}rt(UreftypeXrefhވhXdefault-backendU refdomainXstdruh3]h4]U refexplicith5]h6]h7]hhuh9Kh#]rvh)rw}rx(h(jsh1}ry(h5]h6]rz(hjuXstd-refr{eh4]h3]h7]uh)jqh#]r|hNXthe default backendr}r~}r(h(Uh)jwubah/hubaubhNX, a rr}r(h(X, a h)jjubh)r}r(h(XX`custom admin action `_h1}r(UnameXcustom admin actionhX?http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/rh3]h4]h5]h6]h7]uh)jjh#]rhNXcustom admin actionrr}r(h(Uh)jubah/hubh%)r}r(h(XB h1}r(Urefurijh3]rhah4]h5]h6]h7]rh auh)jjh#]h/h0ubhNX, is provided for this; in the admin for the rr}r(h(X, is provided for this; in the admin for the h)jjubh)r}r(h(X1:class:`~registration.models.RegistrationProfile`rh)jjh*h-h/hh1}r(UreftypeXclasshމhX'registration.models.RegistrationProfileU refdomainXpyrh3]h4]U refexplicith5]h6]h7]hhj5Nj6Nuh9Kh#]rh)r}r(h(jh1}r(h5]h6]r(hjXpy-classreh4]h3]h7]uh)jh#]rhNXRegistrationProfilerr}r(h(Uh)jubah/hubaubhNX model, simply click the checkbox for the user(s) you'd like to re-send the email for, then select the "Re-send activation emails" action.rr}r(h(X model, simply click the checkbox for the user(s) you'd like to re-send the email for, then select the "Re-send activation emails" action.h)jjubeubah/hubeubhp)r}r(h(X**How do I manually activate a user?** In the default backend, a custom admin action is provided for this. In the admin for the ``RegistrationProfile`` model, click the checkbox for the user(s) you'd like to activate, then select the "Activate users" action.h)jh*h-h/hsh1}r(h5]h6]h4]h3]h7]uh9Kh:hh#]r(hv)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rh{)r}r(h(X&**How do I manually activate a user?**rh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX"How do I manually activate a user?rr}r(h(Uh)jubah/hubah/hubh)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhR)r}r(h(XIn the default backend, a custom admin action is provided for this. In the admin for the ``RegistrationProfile`` model, click the checkbox for the user(s) you'd like to activate, then select the "Activate users" action.h)jh*h-h/hVh1}r(h5]h6]h4]h3]h7]uh9Kh#]r(hNXYIn the default backend, a custom admin action is provided for this. In the admin for the rr}r(h(XYIn the default backend, a custom admin action is provided for this. In the admin for the h)jubh)r}r(h(X``RegistrationProfile``h1}r(h5]h6]h4]h3]h7]uh)jh#]rhNXRegistrationProfilerr}r(h(Uh)jubah/hubhNXk model, click the checkbox for the user(s) you'd like to activate, then select the "Activate users" action.rr}r(h(Xk model, click the checkbox for the user(s) you'd like to activate, then select the "Activate users" action.h)jubeubah/hubeubeubeubeubeh(UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh:hU current_linerNUtransform_messagesr]r(cdocutils.nodes system_message r)r}r(h(Uh1}r(h5]UlevelKh3]h4]Usourceh-h6]h7]UlineKUtypeUINFOruh#]rhR)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX)Hyperlink target "faq" is not referenced.rr}r(h(Uh)jubah/hVubah/Usystem_messagerubj)r}r(h(Uh1}r(h5]UlevelKh3]h4]Usourceh-h6]h7]UlineKUtypejuh#]rhR)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNXIHyperlink target "an osi-approved open-source license" is not referenced.rr}r(h(Uh)jubah/hVubah/jubj)r}r(h(Uh1}r(h5]UlevelKh3]h4]Usourceh-h6]h7]UlineKvUtypejuh#]rhR)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX>Hyperlink target "introduces generic views" is not referenced.rr}r(h(Uh)jubah/hVubah/jubj)r}r(h(Uh1}r(h5]UlevelKh3]h4]Usourceh-h6]h7]UlineKUtypejuh#]rhR)r}r(h(Uh1}r(h5]h6]h4]h3]h7]uh)jh#]rhNX9Hyperlink target "custom admin action" is not referenced.rr}r(h(Uh)jubah/hVubah/jubeUreporterr NUid_startr KU autofootnotesr ]r U citation_refsr }rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrKUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestampr NU report_levelr!KU _destinationr"NU halt_levelr#KU strip_classesr$NhKNUerror_encoding_error_handlerr%Ubackslashreplacer&Udebugr'NUembed_stylesheetr(Uoutput_encoding_error_handlerr)Ustrictr*U sectnum_xformr+KUdump_transformsr,NU docinfo_xformr-KUwarning_streamr.NUpep_file_url_templater/Upep-%04dr0Uexit_status_levelr1KUconfigr2NUstrict_visitorr3NUcloak_email_addressesr4Utrim_footnote_reference_spacer5Uenvr6NUdump_pseudo_xmlr7NUexpose_internalsr8NUsectsubtitle_xformr9U source_linkr:NUrfc_referencesr;NUoutput_encodingr<Uutf-8r=U source_urlr>NUinput_encodingr?U utf-8-sigr@U_disable_configrANU id_prefixrBUU tab_widthrCKUerror_encodingrDUUTF-8rEU_sourcerFU=/Users/james/dev/hg/personal/django-registration/docs/faq.rstrGUgettext_compactrHU generatorrINUdump_internalsrJNU pep_base_urlrKUhttp://www.python.org/dev/peps/rLUinput_encoding_error_handlerrMj*Uauto_id_prefixrNUidrOUdoctitle_xformrPUstrip_elements_with_classesrQNU _config_filesrR]Ufile_insertion_enabledrSKU raw_enabledrTKU dump_settingsrUNubUsymbol_footnote_startrVKUidsrW}rX(hj2hjhh(Usingleq?Xregistration.forms (module)Xmodule-registration.formsUtq@auh-Kh.hh]ubcdocutils.nodes section qA)qB}qC(hUhhhh!h#UsectionqDh%}qE(h)]h*]h(]h']qFhah+]qGhauh-Kh.hh]qH(cdocutils.nodes title qI)qJ}qK(hXForms for user registrationqLhhBhh!h#UtitleqMh%}qN(h)]h*]h(]h']h+]uh-Kh.hh]qOcdocutils.nodes Text qPXForms for user registrationqQqR}qS(hhLhhJubaubcdocutils.nodes paragraph qT)qU}qV(hXASeveral form classes are provided with django-registration, covering common cases for gathering account information and implementing common constraints for user registration. These forms were designed with django-registration's :ref:`default backend ` in mind, but may also be useful in other situations.hhBhh!h#U paragraphqWh%}qX(h)]h*]h(]h']h+]uh-Kh.hh]qY(hPXSeveral form classes are provided with django-registration, covering common cases for gathering account information and implementing common constraints for user registration. These forms were designed with django-registration's qZq[}q\(hXSeveral form classes are provided with django-registration, covering common cases for gathering account information and implementing common constraints for user registration. These forms were designed with django-registration's hhUubcsphinx.addnodes pending_xref q])q^}q_(hX(:ref:`default backend `q`hhUhh!h#U pending_xrefqah%}qb(UreftypeXrefUrefwarnqcU reftargetqdXdefault-backendU refdomainXstdqeh']h(]U refexplicith)]h*]h+]UrefdocqfUformsqguh-Kh]qhcdocutils.nodes emphasis qi)qj}qk(hh`h%}ql(h)]h*]qm(UxrefqnheXstd-refqoeh(]h']h+]uhh^h]qphPXdefault backendqqqr}qs(hUhhjubah#UemphasisqtubaubhPX5 in mind, but may also be useful in other situations.quqv}qw(hX5 in mind, but may also be useful in other situations.hhUubeubh9)qx}qy(hUhhBhh!h#hr?}r@(hXOThe password to use for the new account. This represented as a password input (hj:ubh)rA}rB(hX``input type="password"``h%}rC(h)]h*]h(]h']h+]uhj:h]rDhPXinput type="password"rErF}rG(hUhjAubah#hubhPX in the rendered HTML).rHrI}rJ(hX in the rendered HTML).hj:ubeubah#hubeubeubhT)rK}rL(hXThe constraints on usernames and email addresses match those enforced by Django's default authentication backend for instances of ``django.contrib.auth.models.User``. The repeated entry of the password serves to catch typos.hhhh!h#hWh%}rM(h)]h*]h(]h']h+]uh-K&h.hh]rN(hPXThe constraints on usernames and email addresses match those enforced by Django's default authentication backend for instances of rOrP}rQ(hXThe constraints on usernames and email addresses match those enforced by Django's default authentication backend for instances of hjKubh)rR}rS(hX#``django.contrib.auth.models.User``h%}rT(h)]h*]h(]h']h+]uhjKh]rUhPXdjango.contrib.auth.models.UserrVrW}rX(hUhjRubah#hubhPX;. The repeated entry of the password serves to catch typos.rYrZ}r[(hX;. The repeated entry of the password serves to catch typos.hjKubeubhT)r\}r](hXBecause it does not apply to any single field of the form, the validation error for mismatched passwords is attached to the form itself, and so must be accessed via the form's ``non_field_errors()`` method.hhhh!h#hWh%}r^(h)]h*]h(]h']h+]uh-K+h.hh]r_(hPXBecause it does not apply to any single field of the form, the validation error for mismatched passwords is attached to the form itself, and so must be accessed via the form's r`ra}rb(hXBecause it does not apply to any single field of the form, the validation error for mismatched passwords is attached to the form itself, and so must be accessed via the form's hj\ubh)rc}rd(hX``non_field_errors()``h%}re(h)]h*]h(]h']h+]uhj\h]rfhPXnon_field_errors()rgrh}ri(hUhjcubah#hubhPX method.rjrk}rl(hX method.hj\ubeubeubeubh9)rm}rn(hUhhBhNh#h}r?(hXA subclass of :class:`RegistrationForm` which disallows registration using addresses from some common free email providers. This can, in some cases, cut down on automated registration by spambots.hj:hh!h#hWh%}r@(h)]h*]h(]h']h+]uh-KCh.hh]rA(hPXA subclass of rBrC}rD(hXA subclass of hj>ubh])rE}rF(hX:class:`RegistrationForm`rGhj>hh!h#hah%}rH(UreftypeXclasshchdXRegistrationFormU refdomainXpyrIh']h(]U refexplicith)]h*]h+]hfhgjj jhuh-KCh]rJh)rK}rL(hjGh%}rM(h)]h*]rN(hnjIXpy-classrOeh(]h']h+]uhjEh]rPhPXRegistrationFormrQrR}rS(hUhjKubah#hubaubhPX which disallows registration using addresses from some common free email providers. This can, in some cases, cut down on automated registration by spambots.rTrU}rV(hX which disallows registration using addresses from some common free email providers. This can, in some cases, cut down on automated registration by spambots.hj>ubeubhT)rW}rX(hXEBy default, the following domains are disallowed for email addresses:rYhj:hh!h#hWh%}rZ(h)]h*]h(]h']h+]uh-KHh.hh]r[hPXEBy default, the following domains are disallowed for email addresses:r\r]}r^(hjYhjWubaubcdocutils.nodes bullet_list r_)r`}ra(hUhj:hh!h#U bullet_listrbh%}rc(UbulletrdX*h']h(]h)]h*]h+]uh-KKh.hh]re(cdocutils.nodes list_item rf)rg}rh(hX ``aim.com`` hj`hh!h#U list_itemrih%}rj(h)]h*]h(]h']h+]uh-Nh.hh]rkhT)rl}rm(hX ``aim.com``rnhjghh!h#hWh%}ro(h)]h*]h(]h']h+]uh-KKh]rph)rq}rr(hjnh%}rs(h)]h*]h(]h']h+]uhjlh]rthPXaim.comrurv}rw(hUhjqubah#hubaubaubjf)rx}ry(hX ``aol.com`` hj`hh!h#jih%}rz(h)]h*]h(]h']h+]uh-Nh.hh]r{hT)r|}r}(hX ``aol.com``r~hjxhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KMh]rh)r}r(hj~h%}r(h)]h*]h(]h']h+]uhj|h]rhPXaol.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``email.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX ``email.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KOh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPX email.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``gmail.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX ``gmail.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KQh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPX gmail.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``googlemail.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX``googlemail.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KSh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPXgooglemail.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``hotmail.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX``hotmail.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KUh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPX hotmail.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``hushmail.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX``hushmail.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KWh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPX hushmail.comrr}r(hUhjubah#hubaubaubjf)r}r(hX ``msn.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX ``msn.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-KYh]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPXmsn.comrr}r(hUhjubah#hubaubaubjf)r}r(hX ``mail.ru`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX ``mail.ru``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K[h]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPXmail.rurr}r(hUhjubah#hubaubaubjf)r}r(hX``mailinator.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX``mailinator.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K]h]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhjh]rhPXmailinator.comrr}r(hUhjubah#hubaubaubjf)r}r (hX ``live.com`` hj`hh!h#jih%}r (h)]h*]h(]h']h+]uh-Nh.hh]r hT)r }r (hX ``live.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K_h]rh)r}r(hjh%}r(h)]h*]h(]h']h+]uhj h]rhPXlive.comrr}r(hUhjubah#hubaubaubjf)r}r(hX``yahoo.com`` hj`hh!h#jih%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hX ``yahoo.com``rhjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-Kah]r h)r!}r"(hjh%}r#(h)]h*]h(]h']h+]uhjh]r$hPX yahoo.comr%r&}r'(hUhj!ubah#hubaubaubeubhT)r(}r)(hXyTo change this, subclass this form and set the class attribute ``bad_domains`` to a list of domains you wish to disallow.hj:hh!h#hWh%}r*(h)]h*]h(]h']h+]uh-Kch.hh]r+(hPX?To change this, subclass this form and set the class attribute r,r-}r.(hX?To change this, subclass this form and set the class attribute hj(ubh)r/}r0(hX``bad_domains``h%}r1(h)]h*]h(]h']h+]uhj(h]r2hPX bad_domainsr3r4}r5(hUhj/ubah#hubhPX+ to a list of domains you wish to disallow.r6r7}r8(hX+ to a list of domains you wish to disallow.hj(ubeubeubeubeubehUU transformerr9NU footnote_refsr:}r;Urefnamesr<}r=Usymbol_footnotesr>]r?Uautofootnote_refsr@]rAUsymbol_footnote_refsrB]rCU citationsrD]rEh.hU current_linerFNUtransform_messagesrG]rH(cdocutils.nodes system_message rI)rJ}rK(hUh%}rL(h)]UlevelKh']h(]Usourceh!h*]h+]UlineKUtypeUINFOrMuh]rNhT)rO}rP(hUh%}rQ(h)]h*]h(]h']h+]uhjJh]rRhPX+Hyperlink target "forms" is not referenced.rSrT}rU(hUhjOubah#hWubah#Usystem_messagerVubjI)rW}rX(hUh%}rY(h)]UlevelKh']h(]Usourceh!h*]h+]UlineKUtypejMuh]rZhT)r[}r\(hUh%}r](h)]h*]h(]h']h+]uhjWh]r^hPX+Hyperlink target "forms" is not referenced.r_r`}ra(hUhj[ubah#hWubah#jVubeUreporterrbNUid_startrcKU autofootnotesrd]reU citation_refsrf}rgUindirect_targetsrh]riUsettingsrj(cdocutils.frontend Values rkorl}rm(Ufootnote_backlinksrnKUrecord_dependenciesroNU rfc_base_urlrpUhttp://tools.ietf.org/html/rqU tracebackrrKUpep_referencesrsNUstrip_commentsrtNU toc_backlinksruUentryrvU language_coderwUenrxU datestampryNU report_levelrzKU _destinationr{NU halt_levelr|KU strip_classesr}NhMNUerror_encoding_error_handlerr~UbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerU?/Users/james/dev/hg/personal/django-registration/docs/forms.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]rUfile_insertion_enabledrKU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h5h/hhh jhh/hjhhBh jwuUsubstitution_namesr}rh#h.h%}r(h)]h']h(]Usourceh!h*]h+]uU footnotesr]rUrefidsr}rh]rhasub.django-registration-1.0/docs/_build/doctrees/index.doctree0000644000076700007670000002745111733412407024251 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(X%django's authentication documentationqKXdjango-profilesqKX%django-registration 0.8 documentationqNXdjangoq KuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU%django-s-authentication-documentationqhUdjango-profilesqhU%django-registration-0-8-documentationqh UdjangoquUchildrenq]q(cdocutils.nodes comment q)q}q(U rawsourceqXdjango-registration documentation master file, created by sphinx-quickstart on Mon Jun 22 02:57:42 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive.UparentqhUsourceqcdocutils.nodes reprunicode qX?/Users/james/dev/hg/personal/django-registration/docs/index.rstq q!}q"bUtagnameq#Ucommentq$U attributesq%}q&(U xml:spaceq'Upreserveq(Uidsq)]Ubackrefsq*]Udupnamesq+]Uclassesq,]Unamesq-]uUlineq.KUdocumentq/hh]q0cdocutils.nodes Text q1Xdjango-registration documentation master file, created by sphinx-quickstart on Mon Jun 22 02:57:42 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive.q2q3}q4(hUhhubaubcdocutils.nodes section q5)q6}q7(hUhhhh!h#Usectionq8h%}q9(h+]h,]h*]h)]q:hah-]q;hauh.Kh/hh]q<(cdocutils.nodes title q=)q>}q?(hX%django-registration 0.8 documentationq@hh6hh!h#UtitleqAh%}qB(h+]h,]h*]h)]h-]uh.Kh/hh]qCh1X%django-registration 0.8 documentationqDqE}qF(hh@hh>ubaubcdocutils.nodes paragraph qG)qH}qI(hXThis documentation covers the 0.8 release of django-registration, a simple but extensible application providing user registration functionality for `Django `_-powered websites.hh6hh!h#U paragraphqJh%}qK(h+]h,]h*]h)]h-]uh.K h/hh]qL(h1XThis documentation covers the 0.8 release of django-registration, a simple but extensible application providing user registration functionality for qMqN}qO(hXThis documentation covers the 0.8 release of django-registration, a simple but extensible application providing user registration functionality for hhHubcdocutils.nodes reference qP)qQ}qR(hX(`Django `_h%}qS(UnameXDjangoUrefuriqTXhttp://www.djangoproject.comqUh)]h*]h+]h,]h-]uhhHh]qVh1XDjangoqWqX}qY(hUhhQubah#U referenceqZubcdocutils.nodes target q[)q\}q](hX h%}q^(UrefurihUh)]q_hah*]h+]h,]h-]q`h auhhHh]h#Utargetqaubh1X-powered websites.qbqc}qd(hX-powered websites.hhHubeubhG)qe}qf(hX0Although nearly all aspects of the registration process are customizable, the default setup of django-registration attempts to cover the most common use case: two-phase registration, consisting of initial signup followed by a confirmation email which contains instructions for activating the new account.qghh6hh!h#hJh%}qh(h+]h,]h*]h)]h-]uh.Kh/hh]qih1X0Although nearly all aspects of the registration process are customizable, the default setup of django-registration attempts to cover the most common use case: two-phase registration, consisting of initial signup followed by a confirmation email which contains instructions for activating the new account.qjqk}ql(hhghheubaubhG)qm}qn(hXuTo get up and running quickly, consult the :ref:`quick-start guide `, which describes all the necessary steps to install django-registration and configure it for the default workflow. For more detailed information, including how to customize the registration process (and support for alternate registration systems), read through the documentation listed below.hh6hh!h#hJh%}qo(h+]h,]h*]h)]h-]uh.Kh/hh]qp(h1X+To get up and running quickly, consult the qqqr}qs(hX+To get up and running quickly, consult the hhmubcsphinx.addnodes pending_xref qt)qu}qv(hX%:ref:`quick-start guide `qwhhmhh!h#U pending_xrefqxh%}qy(UreftypeXrefUrefwarnqzU reftargetq{X quickstartU refdomainXstdq|h)]h*]U refexplicith+]h,]h-]Urefdocq}Uindexq~uh.Kh]qcdocutils.nodes emphasis q)q}q(hhwh%}q(h+]h,]q(Uxrefqh|Xstd-refqeh*]h)]h-]uhhuh]qh1Xquick-start guideqq}q(hUhhubah#Uemphasisqubaubh1X%, which describes all the necessary steps to install django-registration and configure it for the default workflow. For more detailed information, including how to customize the registration process (and support for alternate registration systems), read through the documentation listed below.qq}q(hX%, which describes all the necessary steps to install django-registration and configure it for the default workflow. For more detailed information, including how to customize the registration process (and support for alternate registration systems), read through the documentation listed below.hhmubeubhG)q}q(hXIf you are upgrading from a previous release, please read the :ref:`upgrade guide ` for information on what's changed.hh6hh!h#hJh%}q(h+]h,]h*]h)]h-]uh.Kh/hh]q(h1X>If you are upgrading from a previous release, please read the qq}q(hX>If you are upgrading from a previous release, please read the hhubht)q}q(hX:ref:`upgrade guide `qhhhh!h#hxh%}q(UreftypeXrefhzh{XupgradeU refdomainXstdqh)]h*]U refexplicith+]h,]h-]h}h~uh.Kh]qh)q}q(hhh%}q(h+]h,]q(hhXstd-refqeh*]h)]h-]uhhh]qh1X upgrade guideqq}q(hUhhubah#hubaubh1X# for information on what's changed.qq}q(hX# for information on what's changed.hhubeubhG)q}q(hX Contents:qhh6hh!h#hJh%}q(h+]h,]h*]h)]h-]uh.Kh/hh]qh1X Contents:qq}q(hhhhubaubcdocutils.nodes compound q)q}q(hUhh6hh!h#Ucompoundqh%}q(h+]h,]qUtoctree-wrapperqah*]h)]h-]uh.Nh/hh]qcsphinx.addnodes toctree q)q}q(hUhhhh!h#Utoctreeqh%}q(UnumberedqKhh~U titlesonlyqUglobqh)]h*]h+]h,]h-]Uentriesq]q(NX quickstartq†qNX release-notesqĆqNXupgradeqƆqNX backend-apiqȆqNXdefault-backendqʆqNXsimple-backendq̆qNXformsqΆqNXviewsqІqNXsignalsq҆qNXfaqqԆqeUhiddenq։U includefilesq]q(hhhhhhhhhheUmaxdepthqKuh.K h]ubaubcsphinx.addnodes seealso q)q}q(hXI* `Django's authentication documentation `_; Django's authentication system is used by django-registration's default configuration. * `django-profiles `_, an application which provides simple user-profile management.hh6hNh#Useealsoqh%}q(h+]h,]qUadmonition-see-alsoqah*]h)]h-]uh.Nh/hh]q(h=)q}q(hXSee alsoqh%}q(h+]h,]h*]h)]h-]uhhh]qh1XSee alsoq煁q}q(hhhhubah#hAubcdocutils.nodes bullet_list q)q}q(hUh%}q(UbulletqX*h)]h*]h+]h,]h-]uhhh]q(cdocutils.nodes list_item q)q}q(hX`Django's authentication documentation `_; Django's authentication system is used by django-registration's default configuration. h%}q(h+]h,]h*]h)]h-]uhhh]qhG)q}q(hX`Django's authentication documentation `_; Django's authentication system is used by django-registration's default configuration.hhhh!h#hJh%}q(h+]h,]h*]h)]h-]uh.K0h]q(hP)q}q(hX\`Django's authentication documentation `_h%}q(UnameX%Django's authentication documentationhTX1http://docs.djangoproject.com/en/dev/topics/auth/qh)]h*]h+]h,]h-]uhhh]qh1X%Django's authentication documentationqq}r(hUhhubah#hZubh[)r}r(hX4 h%}r(Urefurihh)]rhah*]h+]h,]h-]rhauhhh]h#haubh1XX; Django's authentication system is used by django-registration's default configuration.rr}r(hXX; Django's authentication system is used by django-registration's default configuration.hhubeubah#U list_itemr ubh)r }r (hX`django-profiles `_, an application which provides simple user-profile management.h%}r (h+]h,]h*]h)]h-]uhhh]r hG)r}r(hX`django-profiles `_, an application which provides simple user-profile management.hj hh!h#hJh%}r(h+]h,]h*]h)]h-]uh.K5h]r(hP)r}r(hXF`django-profiles `_h%}r(UnamehhTX1http://bitbucket.org/ubernostrum/django-profiles/rh)]h*]h+]h,]h-]uhjh]rh1Xdjango-profilesrr}r(hUhjubah#hZubh[)r}r(hX4 h%}r(Urefurijh)]rhah*]h+]h,]h-]rhauhjh]h#haubh1X?, an application which provides simple user-profile management.rr }r!(hX?, an application which provides simple user-profile management.hjubeubah#j ubeh#U bullet_listr"ubeubeubehUU transformerr#NU footnote_refsr$}r%Urefnamesr&}r'Usymbol_footnotesr(]r)Uautofootnote_refsr*]r+Usymbol_footnote_refsr,]r-U citationsr.]r/h/hU current_liner0NUtransform_messagesr1]r2(cdocutils.nodes system_message r3)r4}r5(hUh%}r6(h+]UlevelKh)]h*]Usourceh!h,]h-]UlineK UtypeUINFOr7uh]r8hG)r9}r:(hUh%}r;(h+]h,]h*]h)]h-]uhj4h]r<h1X,Hyperlink target "django" is not referenced.r=r>}r?(hUhj9ubah#hJubah#Usystem_messager@ubj3)rA}rB(hUh%}rC(h+]UlevelKh)]h*]Usourceh!h,]h-]UlineK0Utypej7uh]rDhG)rE}rF(hUh%}rG(h+]h,]h*]h)]h-]uhjAh]rHh1XKHyperlink target "django's authentication documentation" is not referenced.rIrJ}rK(hUhjEubah#hJubah#j@ubj3)rL}rM(hUh%}rN(h+]UlevelKh)]h*]Usourceh!h,]h-]UlineK5Utypej7uh]rOhG)rP}rQ(hUh%}rR(h+]h,]h*]h)]h-]uhjLh]rSh1X5Hyperlink target "django-profiles" is not referenced.rTrU}rV(hUhjPubah#hJubah#j@ubeUreporterrWNUid_startrXKU autofootnotesrY]rZU citation_refsr[}r\Uindirect_targetsr]]r^Usettingsr_(cdocutils.frontend Values r`ora}rb(Ufootnote_backlinksrcKUrecord_dependenciesrdNU rfc_base_urlreUhttp://tools.ietf.org/html/rfU tracebackrgKUpep_referencesrhNUstrip_commentsriNU toc_backlinksrjUentryrkU language_coderlUenrmU datestamprnNU report_levelroKU _destinationrpNU halt_levelrqKU strip_classesrrNhANUerror_encoding_error_handlerrsUbackslashreplacertUdebugruNUembed_stylesheetrvUoutput_encoding_error_handlerrwUstrictrxU sectnum_xformryKUdump_transformsrzNU docinfo_xformr{KUwarning_streamr|NUpep_file_url_templater}Upep-%04dr~Uexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerU?/Users/james/dev/hg/personal/django-registration/docs/index.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjxUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrKU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hh6hjhjhh\uUsubstitution_namesr}rh#h/h%}r(h+]h)]h*]Usourceh!h,]h-]uU footnotesr]rUrefidsr}rub.django-registration-1.0/docs/_build/doctrees/quickstart.doctree0000644000076700007670000020364011733412407025330 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(Xsetting up urlsqNX quickstartqKXinstalling django-registrationqNXrequired templatesq NX,automatic installation via a package managerq NXpipq KX virtualenvq KX4the documentation for django's authentication systemq KXcontext processorsqKXdjango download pageqKX-manual installation from a downloaded packageqNXdjango's forms documentationqKX$django's email-sending documentationqKXquick start guideqNX bitbucketqKX-manual installation from a mercurial checkoutqNXbasic configuration and useqNX0the documentation for the django sites frameworkqKX mercurialqKXdjangoqKX easy_installqKXrequired settingsqNX9django-registration's listing on the python package indexqKXdebian gnu/linuxqKuUsubstitution_defsq}qUparse_messagesq ]q!cdocutils.nodes system_message q")q#}q$(U rawsourceq%UU attributesq&}q'(Udupnamesq(]UlevelKUidsq)]Ubackrefsq*]q+Uid1q,aUsourcecdocutils.nodes reprunicode q-XD/Users/james/dev/hg/personal/django-registration/docs/quickstart.rstq.q/}q0bUclassesq1]Unamesq2]UlineKUtypeUINFOq3uUparentq4cdocutils.nodes definition q5)q6}q7(h%Uh&}q8(h(]h1]h*]h)]h2]uh4cdocutils.nodes definition_list_item q9)q:}q;(h%X``site`` An object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. h4cdocutils.nodes definition_list q<)q=}q>(h%Uh4cdocutils.nodes section q?)q@}qA(h%Uh4h?)qB}qC(h%Uh4h?)qD}qE(h%Uh4hUsourceqFh/Uexpect_referenced_by_nameqG}qHhcdocutils.nodes target qI)qJ}qK(h%X.. _quickstart:h4hhFh/UtagnameqLUtargetqMh&}qN(h)]h*]h(]h1]h2]UrefidqOU quickstartqPuUlineqQKUdocumentqRhUchildrenqS]ubshLUsectionqTh&}qU(h(]h1]h*]h)]qV(Uquick-start-guideqWhPeh2]qX(hheuhQKhRhUexpect_referenced_by_idqY}qZhPhJshS]q[(cdocutils.nodes title q\)q]}q^(h%XQuick start guideq_h4hDhFh/hLUtitleq`h&}qa(h(]h1]h*]h)]h2]uhQKhRhhS]qbcdocutils.nodes Text qcXQuick start guideqdqe}qf(h%h_h4h]ubaubcdocutils.nodes paragraph qg)qh}qi(h%XBefore installing django-registration, you'll need to have a copy of `Django `_ already installed. For the |version| release, Django 1.1 or newer is required.h4hDhFh/hLU paragraphqjh&}qk(h(]h1]h*]h)]h2]uhQKhRhhS]ql(hcXEBefore installing django-registration, you'll need to have a copy of qmqn}qo(h%XEBefore installing django-registration, you'll need to have a copy of h4hhubcdocutils.nodes reference qp)qq}qr(h%X(`Django `_h&}qs(UnameXDjangoUrefuriqtXhttp://www.djangoproject.comquh)]h*]h(]h1]h2]uh4hhhS]qvhcXDjangoqwqx}qy(h%Uh4hqubahLU referenceqzubhI)q{}q|(h%X h&}q}(Urefurihuh)]q~Udjangoqah*]h(]h1]h2]qhauh4hhhS]hLhMubhcX already installed. For the qq}q(h%X already installed. For the h4hhubhcX0.8qq}q(h%U0.8qhFNhQNhRhh4hhubhcX* release, Django 1.1 or newer is required.qq}q(h%X* release, Django 1.1 or newer is required.h4hhubeubhg)q}q(h%XFor further information, consult the `Django download page `_, which offers convenient packaged downloads and installation instructions.h4hDhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQK hRhhS]q(hcX%For further information, consult the qq}q(h%X%For further information, consult the h4hubhp)q}q(h%X@`Django download page `_h&}q(UnameXDjango download pagehtX&http://www.djangoproject.com/download/qh)]h*]h(]h1]h2]uh4hhS]qhcXDjango download pageqq}q(h%Uh4hubahLhzubhI)q}q(h%X) h&}q(Urefurihh)]qUdjango-download-pageqah*]h(]h1]h2]qhauh4hhS]hLhMubhcXK, which offers convenient packaged downloads and installation instructions.qq}q(h%XK, which offers convenient packaged downloads and installation instructions.h4hubeubh?)q}q(h%Uh4hDhFh/hLhTh&}q(h(]h1]h*]h)]qUinstalling-django-registrationqah2]qhauhQKhRhhS]q(h\)q}q(h%XInstalling django-registrationqh4hhFh/hLh`h&}q(h(]h1]h*]h)]h2]uhQKhRhhS]qhcXInstalling django-registrationqq}q(h%hh4hubaubhg)q}q(h%X6There are several ways to install django-registration:qh4hhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQKhRhhS]qhcX6There are several ways to install django-registration:qq}q(h%hh4hubaubcdocutils.nodes bullet_list q)q}q(h%Uh4hhFh/hLU bullet_listqh&}q(UbulletqX*h)]h*]h(]h1]h2]uhQKhRhhS]q(cdocutils.nodes list_item q)q}q(h%X&Automatically, via a package manager. h4hhFh/hLU list_itemqh&}q(h(]h1]h*]h)]h2]uhQNhRhhS]qhg)q}q(h%X%Automatically, via a package manager.qh4hhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQKhS]qhcX%Automatically, via a package manager.q̅q}q(h%hh4hubaubaubh)q}q(h%XSManually, by downloading a copy of the release package and installing it yourself. h4hhFh/hLhh&}q(h(]h1]h*]h)]h2]uhQNhRhhS]qhg)q}q(h%XRManually, by downloading a copy of the release package and installing it yourself.qh4hhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQKhS]qhcXRManually, by downloading a copy of the release package and installing it yourself.q؅q}q(h%hh4hubaubaubh)q}q(h%XAManually, by performing a Mercurial checkout of the latest code. h4hhFh/hLhh&}q(h(]h1]h*]h)]h2]uhQNhRhhS]qhg)q}q(h%X@Manually, by performing a Mercurial checkout of the latest code.qh4hhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQKhS]qhcX@Manually, by performing a Mercurial checkout of the latest code.q䅁q}q(h%hh4hubaubaubeubhg)q}q(h%XIt is also highly recommended that you learn to use `virtualenv `_ for development and deployment of Python software; ``virtualenv`` provides isolated Python environments into which collections of software (e.g., a copy of Django, and the necessary settings and applications for deploying a site) can be installed, without conflicting with other installed software. This makes installation, testing, management and deployment far simpler than traditional site-wide installation of Python packages.h4hhFh/hLhjh&}q(h(]h1]h*]h)]h2]uhQKhRhhS]q(hcX4It is also highly recommended that you learn to use q녁q}q(h%X4It is also highly recommended that you learn to use h4hubhp)q}q(h%X6`virtualenv `_h&}q(Unameh htX&http://pypi.python.org/pypi/virtualenvqh)]h*]h(]h1]h2]uh4hhS]qhcX virtualenvqq}q(h%Uh4hubahLhzubhI)q}q(h%X) h&}q(Urefurihh)]qU virtualenvqah*]h(]h1]h2]qh auh4hhS]hLhMubhcX4 for development and deployment of Python software; qq}q(h%X4 for development and deployment of Python software; h4hubcdocutils.nodes literal q)r}r(h%X``virtualenv``h&}r(h(]h1]h*]h)]h2]uh4hhS]rhcX virtualenvrr}r(h%Uh4jubahLUliteralrubhcXm provides isolated Python environments into which collections of software (e.g., a copy of Django, and the necessary settings and applications for deploying a site) can be installed, without conflicting with other installed software. This makes installation, testing, management and deployment far simpler than traditional site-wide installation of Python packages.rr }r (h%Xm provides isolated Python environments into which collections of software (e.g., a copy of Django, and the necessary settings and applications for deploying a site) can be installed, without conflicting with other installed software. This makes installation, testing, management and deployment far simpler than traditional site-wide installation of Python packages.h4hubeubh?)r }r (h%Uh4hhFh/hLhTh&}r (h(]h1]h*]h)]rU,automatic-installation-via-a-package-managerrah2]rh auhQK'hRhhS]r(h\)r}r(h%X,Automatic installation via a package managerrh4j hFh/hLh`h&}r(h(]h1]h*]h)]h2]uhQK'hRhhS]rhcX,Automatic installation via a package managerrr}r(h%jh4jubaubhg)r}r(h%XSeveral automatic package-installation tools are available for Python; the most popular are `easy_install `_ and `pip `_. Either can be used to install django-registration.h4j hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQK)hRhhS]r(hcX\Several automatic package-installation tools are available for Python; the most popular are rr}r (h%X\Several automatic package-installation tools are available for Python; the most popular are h4jubhp)r!}r"(h%XE`easy_install `_h&}r#(UnamehhtX3http://peak.telecommunity.com/DevCenter/EasyInstallr$h)]h*]h(]h1]h2]uh4jhS]r%hcX easy_installr&r'}r((h%Uh4j!ubahLhzubhI)r)}r*(h%X6 h&}r+(Urefurij$h)]r,U easy-installr-ah*]h(]h1]h2]r.hauh4jhS]hLhMubhcX and r/r0}r1(h%X and h4jubhp)r2}r3(h%X"`pip `_h&}r4(Unameh htXhttp://pip.openplans.org/r5h)]h*]h(]h1]h2]uh4jhS]r6hcXpipr7r8}r9(h%Uh4j2ubahLhzubhI)r:}r;(h%X h&}r<(Urefurij5h)]r=Upipr>ah*]h(]h1]h2]r?h auh4jhS]hLhMubhcX4. Either can be used to install django-registration.r@rA}rB(h%X4. Either can be used to install django-registration.h4jubeubhg)rC}rD(h%XUsing ``easy_install``, type::rEh4j hFh/hLhjh&}rF(h(]h1]h*]h)]h2]uhQK/hRhhS]rG(hcXUsing rHrI}rJ(h%XUsing h4jCubh)rK}rL(h%X``easy_install``h&}rM(h(]h1]h*]h)]h2]uh4jChS]rNhcX easy_installrOrP}rQ(h%Uh4jKubahLjubhcX, type:rRrS}rT(h%X, type:h4jCubeubcdocutils.nodes literal_block rU)rV}rW(h%X#easy_install -Z django-registrationh4j hFh/hLU literal_blockrXh&}rY(U xml:spacerZUpreserver[h)]h*]h(]h1]h2]uhQK1hRhhS]r\hcX#easy_install -Z django-registrationr]r^}r_(h%Uh4jVubaubhg)r`}ra(h%XNote that the ``-Z`` flag is required, to tell ``easy_install`` not to create a zipped package; zipped packages prevent certain features of Django from working properly.h4j hFh/hLhjh&}rb(h(]h1]h*]h)]h2]uhQK3hRhhS]rc(hcXNote that the rdre}rf(h%XNote that the h4j`ubh)rg}rh(h%X``-Z``h&}ri(h(]h1]h*]h)]h2]uh4j`hS]rjhcX-Zrkrl}rm(h%Uh4jgubahLjubhcX flag is required, to tell rnro}rp(h%X flag is required, to tell h4j`ubh)rq}rr(h%X``easy_install``h&}rs(h(]h1]h*]h)]h2]uh4j`hS]rthcX easy_installrurv}rw(h%Uh4jqubahLjubhcXj not to create a zipped package; zipped packages prevent certain features of Django from working properly.rxry}rz(h%Xj not to create a zipped package; zipped packages prevent certain features of Django from working properly.h4j`ubeubhg)r{}r|(h%XUsing ``pip``, type::r}h4j hFh/hLhjh&}r~(h(]h1]h*]h)]h2]uhQK7hRhhS]r(hcXUsing rr}r(h%XUsing h4j{ubh)r}r(h%X``pip``h&}r(h(]h1]h*]h)]h2]uh4j{hS]rhcXpiprr}r(h%Uh4jubahLjubhcX, type:rr}r(h%X, type:h4j{ubeubjU)r}r(h%Xpip install django-registrationh4j hFh/hLjXh&}r(jZj[h)]h*]h(]h1]h2]uhQK9hRhhS]rhcXpip install django-registrationrr}r(h%Uh4jubaubhg)r}r(h%XIt is also possible that your operating system distributor provides a packaged version of django-registration (for example, `Debian GNU/Linux `_ provides a package, installable via ``apt-get-install python-django-registration``). Consult your operating system's package list for details, but be aware that third-party distributions may be providing older versions of django-registration, and so you should consult the documentation which comes with your operating system's package.h4j hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQK;hRhhS]r(hcX|It is also possible that your operating system distributor provides a packaged version of django-registration (for example, rr}r(h%X|It is also possible that your operating system distributor provides a packaged version of django-registration (for example, h4jubhp)r}r(h%X(`Debian GNU/Linux `_h&}r(UnameXDebian GNU/LinuxhtXhttp://debian.org/rh)]h*]h(]h1]h2]uh4jhS]rhcXDebian GNU/Linuxrr}r(h%Uh4jubahLhzubhI)r}r(h%X h&}r(Urefurijh)]rUdebian-gnu-linuxrah*]h(]h1]h2]rhauh4jhS]hLhMubhcX% provides a package, installable via rr}r(h%X% provides a package, installable via h4jubh)r}r(h%X.``apt-get-install python-django-registration``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX*apt-get-install python-django-registrationrr}r(h%Uh4jubahLjubhcX). Consult your operating system's package list for details, but be aware that third-party distributions may be providing older versions of django-registration, and so you should consult the documentation which comes with your operating system's package.rr}r(h%X). Consult your operating system's package list for details, but be aware that third-party distributions may be providing older versions of django-registration, and so you should consult the documentation which comes with your operating system's package.h4jubeubeubh?)r}r(h%Uh4hhFh/hLhTh&}r(h(]h1]h*]h)]rU-manual-installation-from-a-downloaded-packagerah2]rhauhQKFhRhhS]r(h\)r}r(h%X-Manual installation from a downloaded packagerh4jhFh/hLh`h&}r(h(]h1]h*]h)]h2]uhQKFhRhhS]rhcX-Manual installation from a downloaded packagerr}r(h%jh4jubaubhg)r}r(h%X#If you prefer not to use an automated package installer, you can download a copy of django-registration and install it manually. The latest release package can be downloaded from `django-registration's listing on the Python Package Index `_.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKHhRhhS]r(hcXIf you prefer not to use an automated package installer, you can download a copy of django-registration and install it manually. The latest release package can be downloaded from rr}r(h%XIf you prefer not to use an automated package installer, you can download a copy of django-registration and install it manually. The latest release package can be downloaded from h4jubhp)r}r(h%Xo`django-registration's listing on the Python Package Index `_h&}r(UnameX9django-registration's listing on the Python Package IndexhtX0http://pypi.python.org/pypi/django-registration/rh)]h*]h(]h1]h2]uh4jhS]rhcX9django-registration's listing on the Python Package Indexrr}r(h%Uh4jubahLhzubhI)r}r(h%X3 h&}r(Urefurijh)]rU9django-registration-s-listing-on-the-python-package-indexrah*]h(]h1]h2]rhauh4jhS]hLhMubhcX.r}r(h%X.h4jubeubhg)r}r(h%X}Once you've downloaded the package, unpack it (on most operating systems, simply double-click; alternately, type ``tar zxvf django-registration-0.8.tar.gz`` at a command line on Linux, Mac OS X or other Unix-like systems). This will create the directory ``django-registration-0.8``, which contains the ``setup.py`` installation script. From a command line in that directory, type::h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKNhRhhS]r(hcXqOnce you've downloaded the package, unpack it (on most operating systems, simply double-click; alternately, type rr}r(h%XqOnce you've downloaded the package, unpack it (on most operating systems, simply double-click; alternately, type h4jubh)r}r(h%X+``tar zxvf django-registration-0.8.tar.gz``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX'tar zxvf django-registration-0.8.tar.gzrr}r(h%Uh4jubahLjubhcXb at a command line on Linux, Mac OS X or other Unix-like systems). This will create the directory rr}r(h%Xb at a command line on Linux, Mac OS X or other Unix-like systems). This will create the directory h4jubh)r}r(h%X``django-registration-0.8``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango-registration-0.8rr}r(h%Uh4jubahLjubhcX, which contains the rr}r(h%X, which contains the h4jubh)r}r(h%X ``setup.py``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXsetup.pyrr}r(h%Uh4jubahLjubhcXB installation script. From a command line in that directory, type:rr}r(h%XB installation script. From a command line in that directory, type:h4jubeubjU)r}r(h%Xpython setup.py installh4jhFh/hLjXh&}r(jZj[h)]h*]h(]h1]h2]uhQKUhRhhS]rhcXpython setup.py installrr}r(h%Uh4jubaubhg)r}r (h%XNote that on some systems you may need to execute this with administrative privileges (e.g., ``sudo python setup.py install``).h4jhFh/hLhjh&}r (h(]h1]h*]h)]h2]uhQKWhRhhS]r (hcX]Note that on some systems you may need to execute this with administrative privileges (e.g., r r }r(h%X]Note that on some systems you may need to execute this with administrative privileges (e.g., h4jubh)r}r(h%X ``sudo python setup.py install``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXsudo python setup.py installrr}r(h%Uh4jubahLjubhcX).rr}r(h%X).h4jubeubeubh?)r}r(h%Uh4hhFh/hLhTh&}r(h(]h1]h*]h)]rU-manual-installation-from-a-mercurial-checkoutrah2]rhauhQK\hRhhS]r(h\)r }r!(h%X-Manual installation from a Mercurial checkoutr"h4jhFh/hLh`h&}r#(h(]h1]h*]h)]h2]uhQK\hRhhS]r$hcX-Manual installation from a Mercurial checkoutr%r&}r'(h%j"h4j ubaubhg)r(}r)(h%XsIf you'd like to try out the latest in-development code, you can obtain it from the django-registration repository, which is hosted at `Bitbucket `_ and uses `Mercurial `_ for version control. To obtain the latest code and documentation, you'll need to have Mercurial installed, at which point you can type::h4jhFh/hLhjh&}r*(h(]h1]h*]h)]h2]uhQK^hRhhS]r+(hcXIf you'd like to try out the latest in-development code, you can obtain it from the django-registration repository, which is hosted at r,r-}r.(h%XIf you'd like to try out the latest in-development code, you can obtain it from the django-registration repository, which is hosted at h4j(ubhp)r/}r0(h%X$`Bitbucket `_h&}r1(UnameX BitbuckethtXhttp://bitbucket.org/r2h)]h*]h(]h1]h2]uh4j(hS]r3hcX Bitbucketr4r5}r6(h%Uh4j/ubahLhzubhI)r7}r8(h%X h&}r9(Urefurij2h)]r:U bitbucketr;ah*]h(]h1]h2]r<hauh4j(hS]hLhMubhcX and uses r=r>}r?(h%X and uses h4j(ubhp)r@}rA(h%X5`Mercurial `_h&}rB(UnameX MercurialhtX&http://www.selenic.com/mercurial/wiki/rCh)]h*]h(]h1]h2]uh4j(hS]rDhcX MercurialrErF}rG(h%Uh4j@ubahLhzubhI)rH}rI(h%X) h&}rJ(UrefurijCh)]rKU mercurialrLah*]h(]h1]h2]rMhauh4j(hS]hLhMubhcX for version control. To obtain the latest code and documentation, you'll need to have Mercurial installed, at which point you can type:rNrO}rP(h%X for version control. To obtain the latest code and documentation, you'll need to have Mercurial installed, at which point you can type:h4j(ubeubjU)rQ}rR(h%X>hg clone http://bitbucket.org/ubernostrum/django-registration/h4jhFh/hLjXh&}rS(jZj[h)]h*]h(]h1]h2]uhQKehRhhS]rThcX>hg clone http://bitbucket.org/ubernostrum/django-registration/rUrV}rW(h%Uh4jQubaubhg)rX}rY(h%XYou can also obtain a copy of a particular release of django-registration by specifying the ``-r`` argument to ``hg clone``; each release is given a tag of the form ``vX.Y``, where "X.Y" is the release number. So, for example, to check out a copy of the 0.8 release, type::h4jhFh/hLhjh&}rZ(h(]h1]h*]h)]h2]uhQKghRhhS]r[(hcX\You can also obtain a copy of a particular release of django-registration by specifying the r\r]}r^(h%X\You can also obtain a copy of a particular release of django-registration by specifying the h4jXubh)r_}r`(h%X``-r``h&}ra(h(]h1]h*]h)]h2]uh4jXhS]rbhcX-rrcrd}re(h%Uh4j_ubahLjubhcX argument to rfrg}rh(h%X argument to h4jXubh)ri}rj(h%X ``hg clone``h&}rk(h(]h1]h*]h)]h2]uh4jXhS]rlhcXhg clonermrn}ro(h%Uh4jiubahLjubhcX*; each release is given a tag of the form rprq}rr(h%X*; each release is given a tag of the form h4jXubh)rs}rt(h%X``vX.Y``h&}ru(h(]h1]h*]h)]h2]uh4jXhS]rvhcXvX.Yrwrx}ry(h%Uh4jsubahLjubhcXc, where "X.Y" is the release number. So, for example, to check out a copy of the 0.8 release, type:rzr{}r|(h%Xc, where "X.Y" is the release number. So, for example, to check out a copy of the 0.8 release, type:h4jXubeubjU)r}}r~(h%XFhg clone -r v0.8 http://bitbucket.org/ubernostrum/django-registration/h4jhFh/hLjXh&}r(jZj[h)]h*]h(]h1]h2]uhQKmhRhhS]rhcXFhg clone -r v0.8 http://bitbucket.org/ubernostrum/django-registration/rr}r(h%Uh4j}ubaubhg)r}r(h%XIn either case, this will create a copy of the django-registration Mercurial repository on your computer; you can then add the ``django-registration`` directory inside the checkout your Python import path, or use the ``setup.py`` script to install as a package.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKohRhhS]r(hcXIn either case, this will create a copy of the django-registration Mercurial repository on your computer; you can then add the rr}r(h%XIn either case, this will create a copy of the django-registration Mercurial repository on your computer; you can then add the h4jubh)r}r(h%X``django-registration``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango-registrationrr}r(h%Uh4jubahLjubhcXC directory inside the checkout your Python import path, or use the rr}r(h%XC directory inside the checkout your Python import path, or use the h4jubh)r}r(h%X ``setup.py``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXsetup.pyrr}r(h%Uh4jubahLjubhcX script to install as a package.rr}r(h%X script to install as a package.h4jubeubeubeubhBeubhFh/hLhTh&}r(h(]h1]h*]h)]rUbasic-configuration-and-userah2]rhauhQKvhRhhS]r(h\)r}r(h%XBasic configuration and userh4hBhFh/hLh`h&}r(h(]h1]h*]h)]h2]uhQKvhRhhS]rhcXBasic configuration and userr}r(h%jh4jubaubhg)r}r(h%XOnce installed, you can add django-registration to any Django-based project you're developing. The default setup will enable user registration with the following workflow:rh4hBhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKxhRhhS]rhcXOnce installed, you can add django-registration to any Django-based project you're developing. The default setup will enable user registration with the following workflow:rr}r(h%jh4jubaubcdocutils.nodes enumerated_list r)r}r(h%Uh4hBhFh/hLUenumerated_listrh&}r(UsuffixrU.h)]h*]h(]UprefixrUh1]h2]UenumtyperUarabicruhQK|hRhhS]r(h)r}r(h%XTA user signs up for an account by supplying a username, email address and password. h4jhFh/hLhh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]rhg)r}r(h%XSA user signs up for an account by supplying a username, email address and password.rh4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQK|hS]rhcXSA user signs up for an account by supplying a username, email address and password.rr}r(h%jh4jubaubaubh)r}r(h%XFrom this information, a new ``User`` object is created, with its ``is_active`` field set to ``False``. Additionally, an activation key is generated and stored, and an email is sent to the user containing a link to click to activate the account. h4jhFh/hLhh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]rhg)r}r(h%XFrom this information, a new ``User`` object is created, with its ``is_active`` field set to ``False``. Additionally, an activation key is generated and stored, and an email is sent to the user containing a link to click to activate the account.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]r(hcXFrom this information, a new rr}r(h%XFrom this information, a new h4jubh)r}r(h%X``User``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXUserrr}r(h%Uh4jubahLjubhcX object is created, with its rr}r(h%X object is created, with its h4jubh)r}r(h%X ``is_active``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX is_activerr}r(h%Uh4jubahLjubhcX field set to rr}r(h%X field set to h4jubh)r}r(h%X ``False``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXFalserr}r(h%Uh4jubahLjubhcX. Additionally, an activation key is generated and stored, and an email is sent to the user containing a link to click to activate the account.rr}r(h%X. Additionally, an activation key is generated and stored, and an email is sent to the user containing a link to click to activate the account.h4jubeubaubh)r}r(h%XUpon clicking the activation link, the new account is made active (the ``is_active`` field is set to ``True``); after this, the user can log in. h4jhFh/hLhh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]rhg)r}r(h%XUpon clicking the activation link, the new account is made active (the ``is_active`` field is set to ``True``); after this, the user can log in.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]r(hcXGUpon clicking the activation link, the new account is made active (the rr}r(h%XGUpon clicking the activation link, the new account is made active (the h4jubh)r}r(h%X ``is_active``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX is_activerr}r(h%Uh4jubahLjubhcX field is set to rr}r(h%X field is set to h4jubh)r}r (h%X``True``h&}r (h(]h1]h*]h)]h2]uh4jhS]r hcXTruer r }r(h%Uh4jubahLjubhcX#); after this, the user can log in.rr}r(h%X#); after this, the user can log in.h4jubeubaubeubhg)r}r(h%XNote that the default workflow requires ``django.contrib.auth`` to be installed, and it is recommended that ``django.contrib.sites`` be installed as well. You will also need to have a working mail server (for sending activation emails), and provide Django with the necessary settings to make use of this mail server (consult `Django's email-sending documentation `_ for details).h4hBhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]r(hcX(Note that the default workflow requires rr}r(h%X(Note that the default workflow requires h4jubh)r}r(h%X``django.contrib.auth``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango.contrib.authrr}r(h%Uh4jubahLjubhcX- to be installed, and it is recommended that r r!}r"(h%X- to be installed, and it is recommended that h4jubh)r#}r$(h%X``django.contrib.sites``h&}r%(h(]h1]h*]h)]h2]uh4jhS]r&hcXdjango.contrib.sitesr'r(}r)(h%Uh4j#ubahLjubhcX be installed as well. You will also need to have a working mail server (for sending activation emails), and provide Django with the necessary settings to make use of this mail server (consult r*r+}r,(h%X be installed as well. You will also need to have a working mail server (for sending activation emails), and provide Django with the necessary settings to make use of this mail server (consult h4jubhp)r-}r.(h%X\`Django's email-sending documentation `_h&}r/(UnameX$Django's email-sending documentationhtX2http://docs.djangoproject.com/en/dev/topics/email/r0h)]h*]h(]h1]h2]uh4jhS]r1hcX$Django's email-sending documentationr2r3}r4(h%Uh4j-ubahLhzubhI)r5}r6(h%X5 h&}r7(Urefurij0h)]r8U$django-s-email-sending-documentationr9ah*]h(]h1]h2]r:hauh4jhS]hLhMubhcX for details).r;r<}r=(h%X for details).h4jubeubh?)r>}r?(h%Uh4hBhFh/hLhTh&}r@(h(]h1]h*]h)]rAUrequired-settingsrBah2]rChauhQKhRhhS]rD(h\)rE}rF(h%XRequired settingsrGh4j>hFh/hLh`h&}rH(h(]h1]h*]h)]h2]uhQKhRhhS]rIhcXRequired settingsrJrK}rL(h%jGh4jEubaubhg)rM}rN(h%XzBegin by adding ``registration`` to the ``INSTALLED_APPS`` setting of your project, and specifying one additional setting:h4j>hFh/hLhjh&}rO(h(]h1]h*]h)]h2]uhQKhRhhS]rP(hcXBegin by adding rQrR}rS(h%XBegin by adding h4jMubh)rT}rU(h%X``registration``h&}rV(h(]h1]h*]h)]h2]uh4jMhS]rWhcX registrationrXrY}rZ(h%Uh4jTubahLjubhcX to the r[r\}r](h%X to the h4jMubh)r^}r_(h%X``INSTALLED_APPS``h&}r`(h(]h1]h*]h)]h2]uh4jMhS]rahcXINSTALLED_APPSrbrc}rd(h%Uh4j^ubahLjubhcX@ setting of your project, and specifying one additional setting:rerf}rg(h%X@ setting of your project, and specifying one additional setting:h4jMubeubh<)rh}ri(h%Uh4j>hFh/hLUdefinition_listrjh&}rk(h(]h1]h*]h)]h2]uhQNhRhhS]rlh9)rm}rn(h%X``ACCOUNT_ACTIVATION_DAYS`` This is the number of days users will have to activate their accounts after registering. If a user does not activate within that period, the account will remain permanently inactive and may be deleted by maintenance scripts provided in django-registration. h4jhhFh/hLUdefinition_list_itemroh&}rp(h(]h1]h*]h)]h2]uhQKhS]rq(cdocutils.nodes term rr)rs}rt(h%Uh&}ru(h(]h1]h*]h)]h2]uh4jmhS]rvh)rw}rx(h%X``ACCOUNT_ACTIVATION_DAYS``ryh&}rz(h(]h1]h*]h)]h2]uh4jshS]r{hcXACCOUNT_ACTIVATION_DAYSr|r}}r~(h%Uh4jwubahLjubahLUtermrubh5)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jmhS]rhg)r}r(h%XThis is the number of days users will have to activate their accounts after registering. If a user does not activate within that period, the account will remain permanently inactive and may be deleted by maintenance scripts provided in django-registration.rh4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]rhcXThis is the number of days users will have to activate their accounts after registering. If a user does not activate within that period, the account will remain permanently inactive and may be deleted by maintenance scripts provided in django-registration.rr}r(h%jh4jubaubahLU definitionrubeubaubhg)r}r(h%XWFor example, you might have something like the following in your Django settings file::h4j>hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rhcXVFor example, you might have something like the following in your Django settings file:rr}r(h%XVFor example, you might have something like the following in your Django settings file:h4jubaubjU)r}r(h%XINSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.sites', 'registration', # ...other installed applications... ) ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value.h4j>hFh/hLjXh&}r(jZj[h)]h*]h(]h1]h2]uhQKhRhhS]rhcXINSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.sites', 'registration', # ...other installed applications... ) ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value.rr}r(h%Uh4jubaubhg)r}r(h%X_Once you've done this, run ``manage.py syncdb`` to install the model used by the default setup.h4j>hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]r(hcXOnce you've done this, run rr}r(h%XOnce you've done this, run h4jubh)r}r(h%X``manage.py syncdb``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXmanage.py syncdbrr}r(h%Uh4jubahLjubhcX0 to install the model used by the default setup.rr}r(h%X0 to install the model used by the default setup.h4jubeubeubh?)r}r(h%Uh4hBhFh/hLhTh&}r(h(]h1]h*]h)]rUsetting-up-urlsrah2]rhauhQKhRhhS]r(h\)r}r(h%XSetting up URLsrh4jhFh/hLh`h&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rhcXSetting up URLsrr}r(h%jh4jubaubhg)r}r(h%XThe :ref:`default backend ` includes a Django ``URLconf`` which sets up URL patterns for :ref:`the views in django-registration `, as well as several useful views in ``django.contrib.auth`` (e.g., login, logout, password change/reset). This ``URLconf`` can be found at ``registration.backends.default.urls``, and so can simply be included in your project's root URL configuration. For example, to place the URLs under the prefix ``/accounts/``, you could add the following to your project's root ``URLconf``::h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]r(hcXThe rr}r(h%XThe h4jubcsphinx.addnodes pending_xref r)r}r(h%X(:ref:`default backend `rh4jhFh/hLU pending_xrefrh&}r(UreftypeXrefUrefwarnrU reftargetrXdefault-backendU refdomainXstdrh)]h*]U refexplicith(]h1]h2]UrefdocrU quickstartruhQKhS]rcdocutils.nodes emphasis r)r}r(h%jh&}r(h(]h1]r(UxrefrjXstd-refreh*]h)]h2]uh4jhS]rhcXdefault backendrr}r(h%Uh4jubahLUemphasisrubaubhcX includes a Django rr}r(h%X includes a Django h4jubh)r}r(h%X ``URLconf``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXURLconfrr}r(h%Uh4jubahLjubhcX which sets up URL patterns for rr}r(h%X which sets up URL patterns for h4jubj)r}r(h%X/:ref:`the views in django-registration `rh4jhFh/hLjh&}r(UreftypeXrefjjXviewsU refdomainXstdrh)]h*]U refexplicith(]h1]h2]jjuhQKhS]rj)r}r(h%jh&}r(h(]h1]r(jjXstd-refreh*]h)]h2]uh4jhS]rhcX the views in django-registrationrr}r(h%Uh4jubahLjubaubhcX%, as well as several useful views in rr}r(h%X%, as well as several useful views in h4jubh)r}r(h%X``django.contrib.auth``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango.contrib.authrr}r(h%Uh4jubahLjubhcX4 (e.g., login, logout, password change/reset). This rr}r(h%X4 (e.g., login, logout, password change/reset). This h4jubh)r}r(h%X ``URLconf``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXURLconfrr}r (h%Uh4jubahLjubhcX can be found at r r }r (h%X can be found at h4jubh)r }r(h%X&``registration.backends.default.urls``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX"registration.backends.default.urlsrr}r(h%Uh4j ubahLjubhcXz, and so can simply be included in your project's root URL configuration. For example, to place the URLs under the prefix rr}r(h%Xz, and so can simply be included in your project's root URL configuration. For example, to place the URLs under the prefix h4jubh)r}r(h%X``/accounts/``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX /accounts/rr}r(h%Uh4jubahLjubhcX5, you could add the following to your project's root rr}r (h%X5, you could add the following to your project's root h4jubh)r!}r"(h%X ``URLconf``h&}r#(h(]h1]h*]h)]h2]uh4jhS]r$hcXURLconfr%r&}r'(h%Uh4j!ubahLjubhcX:r(}r)(h%X:h4jubeubjU)r*}r+(h%X?(r'^accounts/', include('registration.backends.default.urls')),h4jhFh/hLjXh&}r,(jZj[h)]h*]h(]h1]h2]uhQKhRhhS]r-hcX?(r'^accounts/', include('registration.backends.default.urls')),r.r/}r0(h%Uh4j*ubaubhg)r1}r2(h%XUsers would then be able to register by visiting the URL ``/accounts/register/``, login (once activated) at ``/accounts/login/``, etc.h4jhFh/hLhjh&}r3(h(]h1]h*]h)]h2]uhQKhRhhS]r4(hcX9Users would then be able to register by visiting the URL r5r6}r7(h%X9Users would then be able to register by visiting the URL h4j1ubh)r8}r9(h%X``/accounts/register/``h&}r:(h(]h1]h*]h)]h2]uh4j1hS]r;hcX/accounts/register/r<r=}r>(h%Uh4j8ubahLjubhcX, login (once activated) at r?r@}rA(h%X, login (once activated) at h4j1ubh)rB}rC(h%X``/accounts/login/``h&}rD(h(]h1]h*]h)]h2]uh4j1hS]rEhcX/accounts/login/rFrG}rH(h%Uh4jBubahLjubhcX, etc.rIrJ}rK(h%X, etc.h4j1ubeubeubh@eubhFh/hLhTh&}rL(h(]h1]h*]h)]rMUrequired-templatesrNah2]rOh auhQKhRhhS]rP(h\)rQ}rR(h%XRequired templatesrSh4h@hFh/hLh`h&}rT(h(]h1]h*]h)]h2]uhQKhRhhS]rUhcXRequired templatesrVrW}rX(h%jSh4jQubaubhg)rY}rZ(h%X In the default setup, you will need to create several templates required by django-registration, and possibly additional templates required by views in ``django.contrib.auth``. The templates requires by django-registration are as follows; note that, with the exception of the templates used for account activation emails, all of these are rendered using a ``RequestContext`` and so will also receive any additional variables provided by `context processors `_.h4h@hFh/hLhjh&}r[(h(]h1]h*]h)]h2]uhQKhRhhS]r\(hcXIn the default setup, you will need to create several templates required by django-registration, and possibly additional templates required by views in r]r^}r_(h%XIn the default setup, you will need to create several templates required by django-registration, and possibly additional templates required by views in h4jYubh)r`}ra(h%X``django.contrib.auth``h&}rb(h(]h1]h*]h)]h2]uh4jYhS]rchcXdjango.contrib.authrdre}rf(h%Uh4j`ubahLjubhcX. The templates requires by django-registration are as follows; note that, with the exception of the templates used for account activation emails, all of these are rendered using a rgrh}ri(h%X. The templates requires by django-registration are as follows; note that, with the exception of the templates used for account activation emails, all of these are rendered using a h4jYubh)rj}rk(h%X``RequestContext``h&}rl(h(]h1]h*]h)]h2]uh4jYhS]rmhcXRequestContextrnro}rp(h%Uh4jjubahLjubhcX? and so will also receive any additional variables provided by rqrr}rs(h%X? and so will also receive any additional variables provided by h4jYubhp)rt}ru(h%XS`context processors `_h&}rv(UnameXcontext processorshtX;http://docs.djangoproject.com/en/dev/ref/templates/api/#id1rwh)]h*]h(]h1]h2]uh4jYhS]rxhcXcontext processorsryrz}r{(h%Uh4jtubahLhzubhI)r|}r}(h%X> h&}r~(Urefurijwh)]rUcontext-processorsrah*]h(]h1]h2]rhauh4jYhS]hLhMubhcX.r}r(h%X.h4jYubeubhg)r}r(h%X'**registration/registration_form.html**rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rcdocutils.nodes strong r)r}r(h%jh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX#registration/registration_form.htmlrr}r(h%Uh4jubahLUstrongrubaubhg)r}r(h%X]Used to show the form users will fill out to register. By default, has the following context:rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rhcX]Used to show the form users will fill out to register. By default, has the following context:rr}r(h%jh4jubaubh<)r}r(h%Uh4h@hFh/hLjjh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]rh9)r}r(h%X``form`` The registration form. This will be an instance of some subclass of ``django.forms.Form``; consult `Django's forms documentation `_ for information on how to display this in a template. h4jhFh/hLjoh&}r(h(]h1]h*]h)]h2]uhQKhS]r(jr)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rh)r}r(h%X``form``rh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXformrr}r(h%Uh4jubahLjubahLjubh5)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhg)r}r(h%XThe registration form. This will be an instance of some subclass of ``django.forms.Form``; consult `Django's forms documentation `_ for information on how to display this in a template.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]r(hcXDThe registration form. This will be an instance of some subclass of rr}r(h%XDThe registration form. This will be an instance of some subclass of h4jubh)r}r(h%X``django.forms.Form``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango.forms.Formrr}r(h%Uh4jubahLjubhcX ; consult rr}r(h%X ; consult h4jubhp)r}r(h%XT`Django's forms documentation `_h&}r(UnameXDjango's forms documentationhtX2http://docs.djangoproject.com/en/dev/topics/forms/rh)]h*]h(]h1]h2]uh4jhS]rhcXDjango's forms documentationrr}r(h%Uh4jubahLhzubhI)r}r(h%X5 h&}r(Urefurijh)]rUdjango-s-forms-documentationrah*]h(]h1]h2]rhauh4jhS]hLhMubhcX6 for information on how to display this in a template.rr}r(h%X6 for information on how to display this in a template.h4jubeubahLjubeubaubhg)r}r(h%X+**registration/registration_complete.html**rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rj)r}r(h%jh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX'registration/registration_complete.htmlrr}r(h%Uh4jubahLjubaubhg)r}r(h%XUsed after successful completion of the registration form. This template has no context variables of its own, and should simply inform the user that an email containing account-activation information has been sent.rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rhcXUsed after successful completion of the registration form. This template has no context variables of its own, and should simply inform the user that an email containing account-activation information has been sent.rr}r(h%jh4jubaubhg)r}r(h%X**registration/activate.html**rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rj)r}r(h%jh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXregistration/activate.htmlrr}r(h%Uh4jubahLjubaubhg)r}r(h%XTUsed if account activation fails. With the default setup, has the following context:rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]rhcXTUsed if account activation fails. With the default setup, has the following context:rr}r(h%jh4jubaubh<)r}r(h%Uh4h@hFh/hLjjh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]rh9)r}r(h%XJ``activation_key`` The activation key used during the activation attempt. h4jhFh/hLjoh&}r(h(]h1]h*]h)]h2]uhQKhS]r(jr)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rh)r}r (h%X``activation_key``r h&}r (h(]h1]h*]h)]h2]uh4jhS]r hcXactivation_keyr r}r(h%Uh4jubahLjubahLjubh5)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhg)r}r(h%X6The activation key used during the activation attempt.rh4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]rhcX6The activation key used during the activation attempt.rr}r(h%jh4jubaubahLjubeubaubhg)r}r(h%X)**registration/activation_complete.html**rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhRhhS]r j)r!}r"(h%jh&}r#(h(]h1]h*]h)]h2]uh4jhS]r$hcX%registration/activation_complete.htmlr%r&}r'(h%Uh4j!ubahLjubaubhg)r(}r)(h%XUsed after successful account activation. This template has no context variables of its own, and should simply inform the user that their account is now active.r*h4h@hFh/hLhjh&}r+(h(]h1]h*]h)]h2]uhQKhRhhS]r,hcXUsed after successful account activation. This template has no context variables of its own, and should simply inform the user that their account is now active.r-r.}r/(h%j*h4j(ubaubhg)r0}r1(h%X-**registration/activation_email_subject.txt**r2h4h@hFh/hLhjh&}r3(h(]h1]h*]h)]h2]uhQKhRhhS]r4j)r5}r6(h%j2h&}r7(h(]h1]h*]h)]h2]uh4j0hS]r8hcX)registration/activation_email_subject.txtr9r:}r;(h%Uh4j5ubahLjubaubhg)r<}r=(h%XUsed to generate the subject line of the activation email. Because the subject line of an email must be a single line of text, any output from this template will be forcibly condensed to a single line before being used. This template has the following context:r>h4h@hFh/hLhjh&}r?(h(]h1]h*]h)]h2]uhQKhRhhS]r@hcXUsed to generate the subject line of the activation email. Because the subject line of an email must be a single line of text, any output from this template will be forcibly condensed to a single line before being used. This template has the following context:rArB}rC(h%j>h4j<ubaubh<)rD}rE(h%Uh4h@hFh/hLjjh&}rF(h(]h1]h*]h)]h2]uhQNhRhhS]rG(h9)rH}rI(h%X;``activation_key`` The activation key for the new account. h4jDhFh/hLjoh&}rJ(h(]h1]h*]h)]h2]uhQKhS]rK(jr)rL}rM(h%Uh&}rN(h(]h1]h*]h)]h2]uh4jHhS]rOh)rP}rQ(h%X``activation_key``rRh&}rS(h(]h1]h*]h)]h2]uh4jLhS]rThcXactivation_keyrUrV}rW(h%Uh4jPubahLjubahLjubh5)rX}rY(h%Uh&}rZ(h(]h1]h*]h)]h2]uh4jHhS]r[hg)r\}r](h%X'The activation key for the new account.r^h4jXhFh/hLhjh&}r_(h(]h1]h*]h)]h2]uhQKhS]r`hcX'The activation key for the new account.rarb}rc(h%j^h4j\ubaubahLjubeubh9)rd}re(h%X\``expiration_days`` The number of days remaining during which the account may be activated. h4jDhFh/hLjoh&}rf(h(]h1]h*]h)]h2]uhQKhRhhS]rg(jr)rh}ri(h%Uh&}rj(h(]h1]h*]h)]h2]uh4jdhS]rkh)rl}rm(h%X``expiration_days``rnh&}ro(h(]h1]h*]h)]h2]uh4jhhS]rphcXexpiration_daysrqrr}rs(h%Uh4jlubahLjubahLjubh5)rt}ru(h%Uh&}rv(h(]h1]h*]h)]h2]uh4jdhS]rwhg)rx}ry(h%XGThe number of days remaining during which the account may be activated.rzh4jthFh/hLhjh&}r{(h(]h1]h*]h)]h2]uhQKhS]r|hcXGThe number of days remaining during which the account may be activated.r}r~}r(h%jzh4jxubaubahLjubeubh9)r}r(h%X``site`` An object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. h4jDhFh/hLjoh&}r(h(]h1]h*]h)]h2]uhQMhRhhS]r(jr)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rh)r}r(h%X``site``rh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXsiterr}r(h%Uh4jubahLjubahLjubh5)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhg)r}r(h%XAn object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces.h4jhFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQKhS]r(hcXSAn object representing the site on which the user registered; depending on whether rr}r(h%XSAn object representing the site on which the user registered; depending on whether h4jubh)r}r(h%X``django.contrib.sites``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango.contrib.sitesrr}r(h%Uh4jubahLjubhcX1 is installed, this may be an instance of either rr}r(h%X1 is installed, this may be an instance of either h4jubh)r}r(h%X$``django.contrib.sites.models.Site``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX django.contrib.sites.models.Siterr}r(h%Uh4jubahLjubhcX, (if the sites application is installed) or rr}r(h%X, (if the sites application is installed) or h4jubh)r}r(h%X+``django.contrib.sites.models.RequestSite``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX'django.contrib.sites.models.RequestSiterr}r(h%Uh4jubahLjubhcX (if not). Consult rr}r(h%X (if not). Consult h4jubhp)r}r(h%Xm`the documentation for the Django sites framework `_h&}r(UnameX0the documentation for the Django sites frameworkhtX7http://docs.djangoproject.com/en/dev/ref/contrib/sites/rh)]h*]h(]h1]h2]uh4jhS]rhcX0the documentation for the Django sites frameworkrr}r(h%Uh4jubahLhzubhI)r}r(h%X: h&}r(Urefurijh)]rU0the-documentation-for-the-django-sites-frameworkrah*]h(]h1]h2]rhauh4jhS]hLhMubhcX1 for details regarding these objects' interfaces.rr}r(h%X1 for details regarding these objects' interfaces.h4jubeubahLjubeubeubhg)r}r(h%X%**registration/activation_email.txt**rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQMhRhhS]rj)r}r(h%jh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX!registration/activation_email.txtrr}r(h%Uh4jubahLjubaubhg)r}r(h%XUsed to generate the body of the activation email. Should display a link the user can click to activate the account. This template has the following context:rh4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQMhRhhS]rhcXUsed to generate the body of the activation email. Should display a link the user can click to activate the account. This template has the following context:rr}r(h%jh4jubaubh=hg)r}r(h%X=Note that the templates used to generate the account activation email use the extension ``.txt``, not ``.html``. Due to widespread antipathy toward and interoperability problems with HTML email, django-registration defaults to plain-text email, and so these templates should simply output plain text rather than HTML.h4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQMhRhhS]r(hcXXNote that the templates used to generate the account activation email use the extension rr}r(h%XXNote that the templates used to generate the account activation email use the extension h4jubh)r}r(h%X``.txt``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX.txtrr}r(h%Uh4jubahLjubhcX, not rr}r(h%X, not h4jubh)r}r(h%X ``.html``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX.htmlrr}r(h%Uh4jubahLjubhcX. Due to widespread antipathy toward and interoperability problems with HTML email, django-registration defaults to plain-text email, and so these templates should simply output plain text rather than HTML.rr}r(h%X. Due to widespread antipathy toward and interoperability problems with HTML email, django-registration defaults to plain-text email, and so these templates should simply output plain text rather than HTML.h4jubeubhg)r}r(h%XwTo make use of the views from ``django.contrib.auth`` (which are set up for you by the default URLconf mentioned above), you will also need to create the templates required by those views. Consult `the documentation for Django's authentication system `_ for details regarding these templates.h4h@hFh/hLhjh&}r(h(]h1]h*]h)]h2]uhQM!hRhhS]r(hcXTo make use of the views from rr}r(h%XTo make use of the views from h4jubh)r}r(h%X``django.contrib.auth``h&}r(h(]h1]h*]h)]h2]uh4jhS]rhcXdjango.contrib.authrr}r(h%Uh4jubahLjubhcX (which are set up for you by the default URLconf mentioned above), you will also need to create the templates required by those views. Consult rr}r (h%X (which are set up for you by the default URLconf mentioned above), you will also need to create the templates required by those views. Consult h4jubhp)r }r (h%X`the documentation for Django's authentication system `_h&}r (UnameX4the documentation for Django's authentication systemhtXQhttp://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.loginr h)]h*]h(]h1]h2]uh4jhS]rhcX4the documentation for Django's authentication systemrr}r(h%Uh4j ubahLhzubhI)r}r(h%XT h&}r(Urefurij h)]rU4the-documentation-for-django-s-authentication-systemrah*]h(]h1]h2]rh auh4jhS]hLhMubhcX' for details regarding these templates.rr}r(h%X' for details regarding these templates.h4jubeubeubhFh/hLjjh&}r(h(]h1]h*]h)]h2]uhQNhRhhS]r(h9)r}r(h%X;``activation_key`` The activation key for the new account. h4h=hFh/hLjoh&}r(h(]h1]h*]h)]h2]uhQM hS]r (jr)r!}r"(h%Uh&}r#(h(]h1]h*]h)]h2]uh4jhS]r$h)r%}r&(h%X``activation_key``r'h&}r((h(]h1]h*]h)]h2]uh4j!hS]r)hcXactivation_keyr*r+}r,(h%Uh4j%ubahLjubahLjubh5)r-}r.(h%Uh&}r/(h(]h1]h*]h)]h2]uh4jhS]r0hg)r1}r2(h%X'The activation key for the new account.r3h4j-hFh/hLhjh&}r4(h(]h1]h*]h)]h2]uhQM hS]r5hcX'The activation key for the new account.r6r7}r8(h%j3h4j1ubaubahLjubeubh9)r9}r:(h%X\``expiration_days`` The number of days remaining during which the account may be activated. h4h=hFh/hLjoh&}r;(h(]h1]h*]h)]h2]uhQMhRhhS]r<(jr)r=}r>(h%Uh&}r?(h(]h1]h*]h)]h2]uh4j9hS]r@h)rA}rB(h%X``expiration_days``rCh&}rD(h(]h1]h*]h)]h2]uh4j=hS]rEhcXexpiration_daysrFrG}rH(h%Uh4jAubahLjubahLjubh5)rI}rJ(h%Uh&}rK(h(]h1]h*]h)]h2]uh4j9hS]rLhg)rM}rN(h%XGThe number of days remaining during which the account may be activated.rOh4jIhFh/hLhjh&}rP(h(]h1]h*]h)]h2]uhQMhS]rQhcXGThe number of days remaining during which the account may be activated.rRrS}rT(h%jOh4jMubaubahLjubeubh:eubhFh/hLjoh&}rU(h(]h1]h*]h)]h2]uhQMhRhhS]rV(jr)rW}rX(h%Uh&}rY(h(]h1]h*]h)]h2]uh4h:hS]rZh)r[}r\(h%X``site``r]h&}r^(h(]h1]h*]h)]h2]uh4jWhS]r_hcXsiter`ra}rb(h%Uh4j[ubahLjubahLjubh6eubhS]rchg)rd}re(h%XAn object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces.h4h6hFh/hLhjh&}rf(h(]h1]h*]h)]h2]uhQMhS]rg(hcXSAn object representing the site on which the user registered; depending on whether rhri}rj(h%XSAn object representing the site on which the user registered; depending on whether h4jdubh)rk}rl(h%X``django.contrib.sites``h&}rm(h(]h1]h*]h)]h2]uh4jdhS]rnhcXdjango.contrib.sitesrorp}rq(h%Uh4jkubahLjubhcX1 is installed, this may be an instance of either rrrs}rt(h%X1 is installed, this may be an instance of either h4jdubh)ru}rv(h%X$``django.contrib.sites.models.Site``h&}rw(h(]h1]h*]h)]h2]uh4jdhS]rxhcX django.contrib.sites.models.Siteryrz}r{(h%Uh4juubahLjubhcX, (if the sites application is installed) or r|r}}r~(h%X, (if the sites application is installed) or h4jdubh)r}r(h%X+``django.contrib.sites.models.RequestSite``h&}r(h(]h1]h*]h)]h2]uh4jdhS]rhcX'django.contrib.sites.models.RequestSiterr}r(h%Uh4jubahLjubhcX (if not). Consult rr}r(h%X (if not). Consult h4jdubhp)r}r(h%Xm`the documentation for the Django sites framework `_h&}r(UnameX0the documentation for the Django sites frameworkhtX7http://docs.djangoproject.com/en/dev/ref/contrib/sites/rh)]h*]h(]h1]h2]uh4jdhS]rhcX0the documentation for the Django sites frameworkrr}r(h%Uh4jubahLhzubhI)r}r(h%X: U referencedrKh4jdhLhMh&}r(Urefurijh)]rh,ah*]h(]rX0the documentation for the django sites frameworkrah1]h2]uhS]ubhcX1 for details regarding these objects' interfaces.rr}r(h%X1 for details regarding these objects' interfaces.h4jdubeubahLjubhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4h#hS]rhcXSDuplicate explicit target name: "the documentation for the django sites framework".rr}r(h%Uh4jubahLhjubahLUsystem_messagerubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hjhhPhhh jNh jh j>h hh jhjhhhjhjhj9hhWhj;hjhjhjhjLhhhj-hjBhjhjuhS]r(hJhDeh%UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhRhU current_linerNUtransform_messagesr]r(h")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX0Hyperlink target "quickstart" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX,Hyperlink target "django" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK Utypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX:Hyperlink target "django download page" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX0Hyperlink target "virtualenv" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK)Utypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX2Hyperlink target "easy_install" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK)Utypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX)Hyperlink target "pip" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK;Utypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX6Hyperlink target "debian gnu/linux" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r (h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKHUtypeh3uhS]r hg)r }r (h%Uh&}r (h(]h1]h*]h)]h2]uh4jhS]rhcX_Hyperlink target "django-registration's listing on the python package index" is not referenced.rr}r(h%Uh4j ubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK^Utypeh3uhS]rhg)r}r(h%Uh&}r(h(]h1]h*]h)]h2]uh4jhS]rhcX/Hyperlink target "bitbucket" is not referenced.rr}r(h%Uh4jubahLhjubahLjubh")r}r(h%Uh&}r(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineK^Utypeh3uhS]r hg)r!}r"(h%Uh&}r#(h(]h1]h*]h)]h2]uh4jhS]r$hcX/Hyperlink target "mercurial" is not referenced.r%r&}r'(h%Uh4j!ubahLhjubahLjubh")r(}r)(h%Uh&}r*(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]r+hg)r,}r-(h%Uh&}r.(h(]h1]h*]h)]h2]uh4j(hS]r/hcXJHyperlink target "django's email-sending documentation" is not referenced.r0r1}r2(h%Uh4j,ubahLhjubahLjubh")r3}r4(h%Uh&}r5(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]r6hg)r7}r8(h%Uh&}r9(h(]h1]h*]h)]h2]uh4j3hS]r:hcX8Hyperlink target "context processors" is not referenced.r;r<}r=(h%Uh4j7ubahLhjubahLjubh")r>}r?(h%Uh&}r@(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]rAhg)rB}rC(h%Uh&}rD(h(]h1]h*]h)]h2]uh4j>hS]rEhcXBHyperlink target "django's forms documentation" is not referenced.rFrG}rH(h%Uh4jBubahLhjubahLjubh")rI}rJ(h%Uh&}rK(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineKUtypeh3uhS]rLhg)rM}rN(h%Uh&}rO(h(]h1]h*]h)]h2]uh4jIhS]rPhcXVHyperlink target "the documentation for the django sites framework" is not referenced.rQrR}rS(h%Uh4jMubahLhjubahLjubh")rT}rU(h%Uh&}rV(h(]UlevelKh)]h*]Usourceh/h1]h2]UlineM!Utypeh3uhS]rWhg)rX}rY(h%Uh&}rZ(h(]h1]h*]h)]h2]uh4jThS]r[hcXZHyperlink target "the documentation for django's authentication system" is not referenced.r\r]}r^(h%Uh4jXubahLhjubahLjubeUreporterr_NUid_startr`KU autofootnotesra]rbU citation_refsrc}rdUindirect_targetsre]rfUsettingsrg(cdocutils.frontend Values rhori}rj(Ufootnote_backlinksrkKUrecord_dependenciesrlNU rfc_base_urlrmUhttp://tools.ietf.org/html/rnU tracebackroKUpep_referencesrpNUstrip_commentsrqNU toc_backlinksrrUentryrsU language_codertUenruU datestamprvNU report_levelrwKU _destinationrxNU halt_levelryKU strip_classesrzNh`NUerror_encoding_error_handlerr{Ubackslashreplacer|Udebugr}NUembed_stylesheetr~Uoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUD/Users/james/dev/hg/personal/django-registration/docs/quickstart.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]rUfile_insertion_enabledrKU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(jjhPhDjjhhjjj>j:h,jhhhhjNh@jj jj|jjjhBj-j)jjjjj;j7jLjHjBj>hWhDhh{jjj9j5jjuUsubstitution_namesr}rhLhRh&}r(h(]h)]h*]Usourceh/h1]h2]uU footnotesr]rUrefidsr}rhP]rhJasub.django-registration-1.0/docs/_build/doctrees/release-notes.doctree0000644000076700007670000003740511733412407025710 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(X release notesqNX release-notesqKXthe backend systemqNXcustom admin actionsq KXother new featuresq NuUsubstitution_defsq }q Uparse_messagesq ]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUid1qhU release-notesqhUthe-backend-systemqh Ucustom-admin-actionsqh Uother-new-featuresquUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX.. _release-notes:UparentqhUsourceq cdocutils.nodes reprunicode q!XG/Users/james/dev/hg/personal/django-registration/docs/release-notes.rstq"q#}q$bUtagnameq%Utargetq&U attributesq'}q((Uidsq)]Ubackrefsq*]Udupnamesq+]Uclassesq,]Unamesq-]Urefidq.huUlineq/KUdocumentq0hh]ubcdocutils.nodes section q1)q2}q3(hUhhh h#Uexpect_referenced_by_nameq4}q5hhsh%Usectionq6h'}q7(h+]h,]h*]h)]q8(hheh-]q9(hheuh/Kh0hUexpect_referenced_by_idq:}q;hhsh]q<(cdocutils.nodes title q=)q>}q?(hX Release notesq@hh2h h#h%UtitleqAh'}qB(h+]h,]h*]h)]h-]uh/Kh0hh]qCcdocutils.nodes Text qDX Release notesqEqF}qG(hh@hh>ubaubcdocutils.nodes paragraph qH)qI}qJ(hXuThe |version| release of django-registration represents a complete rewrite of the previous codebase, and as such introduces a number of new features and greatly enhances the flexibility and customizability of django-registration. This document summarizes those features; for a list of changes which impact existing installations, consult :ref:`the upgrade guide `.hh2h h#h%U paragraphqKh'}qL(h+]h,]h*]h)]h-]uh/Kh0hh]qM(hDXThe qNqO}qP(hXThe hhIubhDX0.8qQqR}qS(hU0.8qTh Nh/Nh0hhhIubhDXE release of django-registration represents a complete rewrite of the previous codebase, and as such introduces a number of new features and greatly enhances the flexibility and customizability of django-registration. This document summarizes those features; for a list of changes which impact existing installations, consult qUqV}qW(hXE release of django-registration represents a complete rewrite of the previous codebase, and as such introduces a number of new features and greatly enhances the flexibility and customizability of django-registration. This document summarizes those features; for a list of changes which impact existing installations, consult hhIubcsphinx.addnodes pending_xref qX)qY}qZ(hX":ref:`the upgrade guide `q[hhIh h#h%U pending_xrefq\h'}q](UreftypeXrefUrefwarnq^U reftargetq_XupgradeU refdomainXstdq`h)]h*]U refexplicith+]h,]h-]UrefdocqaU release-notesqbuh/Kh]qccdocutils.nodes emphasis qd)qe}qf(hh[h'}qg(h+]h,]qh(Uxrefqih`Xstd-refqjeh*]h)]h-]uhhYh]qkhDXthe upgrade guideqlqm}qn(hUhheubah%UemphasisqoubaubhDX.qp}qq(hX.hhIubeubh1)qr}qs(hUhh2h h#h%h6h'}qt(h+]h,]h*]h)]quhah-]qvhauh/Kh0hh]qw(h=)qx}qy(hXThe backend systemqzhhrh h#h%hAh'}q{(h+]h,]h*]h)]h-]uh/Kh0hh]q|hDXThe backend systemq}q~}q(hhzhhxubaubhH)q}q(hXcThe largest overall change consists of factoring out the logic of user registration into pluggable/swappable backend classes. The :ref:`registration views ` now accept a (required) argument, ``backend``, which indicates the backend class to use, and that class has full control over the registration (and, if needed, activation) process, including:hhrh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/Kh0hh]q(hDXThe largest overall change consists of factoring out the logic of user registration into pluggable/swappable backend classes. The qq}q(hXThe largest overall change consists of factoring out the logic of user registration into pluggable/swappable backend classes. The hhubhX)q}q(hX!:ref:`registration views `qhhh h#h%h\h'}q(UreftypeXrefh^h_XviewsU refdomainXstdqh)]h*]U refexplicith+]h,]h-]hahbuh/Kh]qhd)q}q(hhh'}q(h+]h,]q(hihXstd-refqeh*]h)]h-]uhhh]qhDXregistration viewsqq}q(hUhhubah%houbaubhDX# now accept a (required) argument, qq}q(hX# now accept a (required) argument, hhubcdocutils.nodes literal q)q}q(hX ``backend``h'}q(h+]h,]h*]h)]h-]uhhh]qhDXbackendqq}q(hUhhubah%UliteralqubhDX, which indicates the backend class to use, and that class has full control over the registration (and, if needed, activation) process, including:qq}q(hX, which indicates the backend class to use, and that class has full control over the registration (and, if needed, activation) process, including:hhubeubcdocutils.nodes bullet_list q)q}q(hUhhrh h#h%U bullet_listqh'}q(UbulletqX*h)]h*]h+]h,]h-]uh/Kh0hh]q(cdocutils.nodes list_item q)q}q(hXQDetermining whether registration will be allowed at all, on a per-request basis. hhh h#h%U list_itemqh'}q(h+]h,]h*]h)]h-]uh/Nh0hh]qhH)q}q(hXPDetermining whether registration will be allowed at all, on a per-request basis.qhhh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/Kh]qhDXPDetermining whether registration will be allowed at all, on a per-request basis.qq}q(hhhhubaubaubh)q}q(hX9Specifying a form class to use for account registration. hhh h#h%hh'}q(h+]h,]h*]h)]h-]uh/Nh0hh]qhH)q}q(hX8Specifying a form class to use for account registration.qhhh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/Kh]qhDX8Specifying a form class to use for account registration.qÅq}q(hhhhubaubaubh)q}q(hX5Implementing the actual process of account creation. hhh h#h%hh'}q(h+]h,]h*]h)]h-]uh/Nh0hh]qhH)q}q(hX4Implementing the actual process of account creation.qhhh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/Kh]qhDX4Implementing the actual process of account creation.qυq}q(hhhhubaubaubh)q}q(hXYDetermining whether a separate activation step is needed, and if so what it will entail. hhh h#h%hh'}q(h+]h,]h*]h)]h-]uh/Nh0hh]qhH)q}q(hXXDetermining whether a separate activation step is needed, and if so what it will entail.qhhh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/Kh]qhDXXDetermining whether a separate activation step is needed, and if so what it will entail.qۅq}q(hhhhubaubaubh)q}q(hXuSpecifying actions to take (e.g., redirects, automatic login, etc.) following successful registration or activation. hhh h#h%hh'}q(h+]h,]h*]h)]h-]uh/Nh0hh]qhH)q}q(hXtSpecifying actions to take (e.g., redirects, automatic login, etc.) following successful registration or activation.qhhh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/K"h]qhDXtSpecifying actions to take (e.g., redirects, automatic login, etc.) following successful registration or activation.q煁q}q(hhhhubaubaubeubhH)q}q(hXQFor full details, see the documentation for :ref:`the backend API `.hhrh h#h%hKh'}q(h+]h,]h*]h)]h-]uh/K%h0hh]q(hDX,For full details, see the documentation for qq}q(hX,For full details, see the documentation for hhubhX)q}q(hX$:ref:`the backend API `qhhh h#h%h\h'}q(UreftypeXrefh^h_X backend-apiU refdomainXstdqh)]h*]U refexplicith+]h,]h-]hahbuh/K%h]qhd)q}q(hhh'}q(h+]h,]q(hihXstd-refqeh*]h)]h-]uhhh]qhDXthe backend APIqq}q(hUhhubah%houbaubhDX.r}r(hX.hhubeubhH)r}r(hXThe workflow used by previous releases of django-registration (two-step registration/activation) has been implemented using this system, and is shipped as :ref:`the default backend ` in django-registration |version|.hhrh h#h%hKh'}r(h+]h,]h*]h)]h-]uh/K(h0hh]r(hDXThe workflow used by previous releases of django-registration (two-step registration/activation) has been implemented using this system, and is shipped as rr}r(hXThe workflow used by previous releases of django-registration (two-step registration/activation) has been implemented using this system, and is shipped as hjubhX)r }r (hX,:ref:`the default backend `r hjh h#h%h\h'}r (UreftypeXrefh^h_Xdefault-backendU refdomainXstdr h)]h*]U refexplicith+]h,]h-]hahbuh/K(h]rhd)r}r(hj h'}r(h+]h,]r(hij Xstd-refreh*]h)]h-]uhj h]rhDXthe default backendrr}r(hUhjubah%houbaubhDX in django-registration rr}r(hX in django-registration hjubhDX0.8rr}r(hhTh Nh/Nh0hhjubhDX.r}r(hX.hjubeubeubh1)r }r!(hUhh2h h#h%h6h'}r"(h+]h,]h*]h)]r#hah-]r$h auh/K/h0hh]r%(h=)r&}r'(hXOther new featuresr(hj h h#h%hAh'}r)(h+]h,]h*]h)]h-]uh/K/h0hh]r*hDXOther new featuresr+r,}r-(hj(hj&ubaubhH)r.}r/(hXAn alternate :ref:`one-step registration system ` is provided, for use by sites which do not require a two-step registration/activation system.hj h h#h%hKh'}r0(h+]h,]h*]h)]h-]uh/K1h0hh]r1(hDX An alternate r2r3}r4(hX An alternate hj.ubhX)r5}r6(hX4:ref:`one-step registration system `r7hj.h h#h%h\h'}r8(UreftypeXrefh^h_Xsimple-backendU refdomainXstdr9h)]h*]U refexplicith+]h,]h-]hahbuh/K1h]r:hd)r;}r<(hj7h'}r=(h+]h,]r>(hij9Xstd-refr?eh*]h)]h-]uhj5h]r@hDXone-step registration systemrArB}rC(hUhj;ubah%houbaubhDX^ is provided, for use by sites which do not require a two-step registration/activation system.rDrE}rF(hX^ is provided, for use by sites which do not require a two-step registration/activation system.hj.ubeubhH)rG}rH(hXDuring the registration and (optional) activation process, :ref:`custom signals ` are now sent, allowing easy injection of custom processing into the registration workflow without needing to write a full backend.hj h h#h%hKh'}rI(h+]h,]h*]h)]h-]uh/K5h0hh]rJ(hDX;During the registration and (optional) activation process, rKrL}rM(hX;During the registration and (optional) activation process, hjGubhX)rN}rO(hX:ref:`custom signals `rPhjGh h#h%h\h'}rQ(UreftypeXrefh^h_XsignalsU refdomainXstdrRh)]h*]U refexplicith+]h,]h-]hahbuh/K5h]rShd)rT}rU(hjPh'}rV(h+]h,]rW(hijRXstd-refrXeh*]h)]h-]uhjNh]rYhDXcustom signalsrZr[}r\(hUhjTubah%houbaubhDX are now sent, allowing easy injection of custom processing into the registration workflow without needing to write a full backend.r]r^}r_(hX are now sent, allowing easy injection of custom processing into the registration workflow without needing to write a full backend.hjGubeubhH)r`}ra(hXThe default backend now supplies several `custom admin actions `_ to make the process of administering a site with django-registration simpler.hj h h#h%hKh'}rb(h+]h,]h*]h)]h-]uh/K:h0hh]rc(hDX)The default backend now supplies several rdre}rf(hX)The default backend now supplies several hj`ubcdocutils.nodes reference rg)rh}ri(hXY`custom admin actions `_h'}rj(UnameXcustom admin actionsUrefurirkX?http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/rlh)]h*]h+]h,]h-]uhj`h]rmhDXcustom admin actionsrnro}rp(hUhjhubah%U referencerqubh)rr}rs(hXB h'}rt(Urefurijlh)]ruhah*]h+]h,]h-]rvh auhj`h]h%h&ubhDXN to make the process of administering a site with django-registration simpler.rwrx}ry(hXN to make the process of administering a site with django-registration simpler.hj`ubeubhH)rz}r{(hXOThe :func:`~registration.views.activate` view now supplies any captured keyword arguments from the URL (in the case of the default backend, this is the activation key) to its template in case of unsuccessful activation; this greatly simplifies the process of determining why activation failed and displaying appropriate error messages.hj h h#h%hKh'}r|(h+]h,]h*]h)]h-]uh/K?h0hh]r}(hDXThe r~r}r(hXThe hjzubhX)r}r(hX$:func:`~registration.views.activate`rhjzh h#h%h\h'}r(UreftypeXfunch^h_Xregistration.views.activateU refdomainXpyrh)]h*]U refexplicith+]h,]h-]hahbUpy:classrNU py:modulerNuh/K?h]rh)r}r(hjh'}r(h+]h,]r(hijXpy-funcreh*]h)]h-]uhjh]rhDX activate()rr}r(hUhjubah%hubaubhDX' view now supplies any captured keyword arguments from the URL (in the case of the default backend, this is the activation key) to its template in case of unsuccessful activation; this greatly simplifies the process of determining why activation failed and displaying appropriate error messages.rr}r(hX' view now supplies any captured keyword arguments from the URL (in the case of the default backend, this is the activation key) to its template in case of unsuccessful activation; this greatly simplifies the process of determining why activation failed and displaying appropriate error messages.hjzubeubeubeubehUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh0hU current_linerNUtransform_messagesr]r(cdocutils.nodes system_message r)r}r(hUh'}r(h+]UlevelKh)]h*]Usourceh#h,]h-]UlineKUtypeUINFOruh]rhH)r}r(hUh'}r(h+]h,]h*]h)]h-]uhjh]rhDX3Hyperlink target "release-notes" is not referenced.rr}r(hUhjubah%hKubah%Usystem_messagerubj)r}r(hUh'}r(h+]UlevelKh)]h*]Usourceh#h,]h-]UlineK:Utypejuh]rhH)r}r(hUh'}r(h+]h,]h*]h)]h-]uhjh]rhDX:Hyperlink target "custom admin actions" is not referenced.rr}r(hUhjubah%hKubah%jubeUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrKUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhANUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUG/Users/james/dev/hg/personal/django-registration/docs/release-notes.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]rUfile_insertion_enabledr KU raw_enabledr KU dump_settingsr NubUsymbol_footnote_startr KUidsr }r(hjrhh2hj hhrhh2uUsubstitution_namesr}rh%h0h'}r(h+]h)]h*]Usourceh#h,]h-]uU footnotesr]rUrefidsr}rh]rhasub.django-registration-1.0/docs/_build/doctrees/signals.doctree0000644000076700007670000003640611733412407024602 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(XsignalsqKX$registration.signals.user_registeredqKX#registration.signals.user_activatedqKXdjango's signals documentationq KX*custom signals used by django-registrationq NuUsubstitution_defsq }q Uparse_messagesq ]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUsignalsqhhhhh Udjango-s-signals-documentationqh U*custom-signals-used-by-django-registrationquUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX .. _signals:UparentqhUsourceqcdocutils.nodes reprunicode qXA/Users/james/dev/hg/personal/django-registration/docs/signals.rstq q!}q"bUtagnameq#Utargetq$U attributesq%}q&(Uidsq']Ubackrefsq(]Udupnamesq)]Uclassesq*]Unamesq+]Urefidq,huUlineq-KUdocumentq.hh]ubh)q/}q0(hUhhhh!Uexpect_referenced_by_nameq1}q2hhsh#h$h%}q3(h)]h']q4(Xmodule-registration.signalsq5heh(]Uismodh*]h+]q6hauh-Kh.hUexpect_referenced_by_idq7}q8hhsh]ubcsphinx.addnodes index q9)q:}q;(hUhhhh!h#Uindexq(Usingleq?Xregistration.signals (module)Xmodule-registration.signalsUtq@auh-Kh.hh]ubcdocutils.nodes section qA)qB}qC(hUhhhh!h#UsectionqDh%}qE(h)]h*]h(]h']qFhah+]qGh auh-Kh.hh]qH(cdocutils.nodes title qI)qJ}qK(hX*Custom signals used by django-registrationqLhhBhh!h#UtitleqMh%}qN(h)]h*]h(]h']h+]uh-Kh.hh]qOcdocutils.nodes Text qPX*Custom signals used by django-registrationqQqR}qS(hhLhhJubaubcdocutils.nodes paragraph qT)qU}qV(hXMuch of django-registration's customizability comes through the ability to write and use :ref:`registration backends ` implementing different workflows for user registration. However, there are many cases where only a small bit of additional logic needs to be injected into the registration process, and writing a custom backend to support this represents an unnecessary amount of work. A more lightweight customization option is provided through two custom signals which backends are required to send at specific points during the registration process; functions listening for these signals can then add whatever logic is needed.hhBhh!h#U paragraphqWh%}qX(h)]h*]h(]h']h+]uh-Kh.hh]qY(hPXYMuch of django-registration's customizability comes through the ability to write and use qZq[}q\(hXYMuch of django-registration's customizability comes through the ability to write and use hhUubcsphinx.addnodes pending_xref q])q^}q_(hX*:ref:`registration backends `q`hhUhh!h#U pending_xrefqah%}qb(UreftypeXrefUrefwarnqcU reftargetqdX backend-apiU refdomainXstdqeh']h(]U refexplicith)]h*]h+]UrefdocqfUsignalsqguh-Kh]qhcdocutils.nodes emphasis qi)qj}qk(hh`h%}ql(h)]h*]qm(UxrefqnheXstd-refqoeh(]h']h+]uhh^h]qphPXregistration backendsqqqr}qs(hUhhjubah#UemphasisqtubaubhPX implementing different workflows for user registration. However, there are many cases where only a small bit of additional logic needs to be injected into the registration process, and writing a custom backend to support this represents an unnecessary amount of work. A more lightweight customization option is provided through two custom signals which backends are required to send at specific points during the registration process; functions listening for these signals can then add whatever logic is needed.quqv}qw(hX implementing different workflows for user registration. However, there are many cases where only a small bit of additional logic needs to be injected into the registration process, and writing a custom backend to support this represents an unnecessary amount of work. A more lightweight customization option is provided through two custom signals which backends are required to send at specific points during the registration process; functions listening for these signals can then add whatever logic is needed.hhUubeubhT)qx}qy(hX;For general documentation on signals and the Django dispatcher, consult `Django's signals documentation `_. This documentation assumes that you are familiar with how signals work and the process of writing and connecting functions which will listen for signals.hhBhh!h#hWh%}qz(h)]h*]h(]h']h+]uh-Kh.hh]q{(hPXHFor general documentation on signals and the Django dispatcher, consult q|q}}q~(hXHFor general documentation on signals and the Django dispatcher, consult hhxubcdocutils.nodes reference q)q}q(hXX`Django's signals documentation `_h%}q(UnameXDjango's signals documentationUrefuriqX4http://docs.djangoproject.com/en/dev/topics/signals/qh']h(]h)]h*]h+]uhhxh]qhPXDjango's signals documentationqq}q(hUhhubah#U referencequbh)q}q(hX7 h%}q(Urefurihh']qhah(]h)]h*]h+]qh auhhxh]h#h$ubhPX. This documentation assumes that you are familiar with how signals work and the process of writing and connecting functions which will listen for signals.qq}q(hX. This documentation assumes that you are familiar with how signals work and the process of writing and connecting functions which will listen for signals.hhxubeubh9)q}q(hUhhBhNh#hr?}r@(hX$ in which the account was activated.hj0ubeubah#hubeubeubeubeubh9)rA}rB(hUhhBhNh#hUutf-8r?U source_urlr@NUinput_encodingrAU utf-8-sigrBU_disable_configrCNU id_prefixrDUU tab_widthrEKUerror_encodingrFUUTF-8rGU_sourcerHUA/Users/james/dev/hg/personal/django-registration/docs/signals.rstrIUgettext_compactrJU generatorrKNUdump_internalsrLNU pep_base_urlrMUhttp://www.python.org/dev/peps/rNUinput_encoding_error_handlerrOj,Uauto_id_prefixrPUidrQUdoctitle_xformrRUstrip_elements_with_classesrSNU _config_filesrT]Ufile_insertion_enabledrUKU raw_enabledrVKU dump_settingsrWNubUsymbol_footnote_startrXKUidsrY}rZ(hjKh5h/hhhhhh/hhBuUsubstitution_namesr[}r\h#h.h%}r](h)]h']h(]Usourceh!h*]h+]uU footnotesr^]r_Urefidsr`}rah]rbhasub.django-registration-1.0/docs/_build/doctrees/simple-backend.doctree0000644000076700007670000004405111733412410026005 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(Xthe "simple" (one-step) backendqNXsimple-backendqKX configurationqNXdjango's settings documentationq KuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUthe-simple-one-step-backendqhUsimple-backendqhU configurationqh Udjango-s-settings-documentationquUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX.. _simple-backend:UparentqhUsourceqcdocutils.nodes reprunicode qXH/Users/james/dev/hg/personal/django-registration/docs/simple-backend.rstq q!}q"bUtagnameq#Utargetq$U attributesq%}q&(Uidsq']Ubackrefsq(]Udupnamesq)]Uclassesq*]Unamesq+]Urefidq,huUlineq-KUdocumentq.hh]ubh)q/}q0(hUhhhh!Uexpect_referenced_by_nameq1}q2hhsh#h$h%}q3(h)]h']q4(X#module-registration.backends.simpleq5heh(]Uismodh*]h+]q6hauh-Kh.hUexpect_referenced_by_idq7}q8hhsh]ubcsphinx.addnodes index q9)q:}q;(hUhhhh!h#Uindexq(Usingleq?X%registration.backends.simple (module)X#module-registration.backends.simpleUtq@auh-Kh.hh]ubcdocutils.nodes section qA)qB}qC(hUhhhh!h#UsectionqDh%}qE(h)]h*]h(]h']qFhah+]qGhauh-Kh.hh]qH(cdocutils.nodes title qI)qJ}qK(hXThe "simple" (one-step) backendqLhhBhh!h#UtitleqMh%}qN(h)]h*]h(]h']h+]uh-Kh.hh]qOcdocutils.nodes Text qPXThe "simple" (one-step) backendqQqR}qS(hhLhhJubaubcdocutils.nodes paragraph qT)qU}qV(hX&As an alternative to :ref:`the default backend `, and an example of writing :ref:`registration backends `, django-registration bundles a one-step registration system in ``registration.backend.simple``. This backend's workflow is deliberately as simple as possible:hhBhh!h#U paragraphqWh%}qX(h)]h*]h(]h']h+]uh-Kh.hh]qY(hPXAs an alternative to qZq[}q\(hXAs an alternative to hhUubcsphinx.addnodes pending_xref q])q^}q_(hX,:ref:`the default backend `q`hhUhh!h#U pending_xrefqah%}qb(UreftypeXrefUrefwarnqcU reftargetqdXdefault-backendU refdomainXstdqeh']h(]U refexplicith)]h*]h+]UrefdocqfUsimple-backendqguh-Kh]qhcdocutils.nodes emphasis qi)qj}qk(hh`h%}ql(h)]h*]qm(UxrefqnheXstd-refqoeh(]h']h+]uhh^h]qphPXthe default backendqqqr}qs(hUhhjubah#UemphasisqtubaubhPX, and an example of writing quqv}qw(hX, and an example of writing hhUubh])qx}qy(hX*:ref:`registration backends `qzhhUhh!h#hah%}q{(UreftypeXrefhchdX backend-apiU refdomainXstdq|h']h(]U refexplicith)]h*]h+]hfhguh-Kh]q}hi)q~}q(hhzh%}q(h)]h*]q(hnh|Xstd-refqeh(]h']h+]uhhxh]qhPXregistration backendsqq}q(hUhh~ubah#htubaubhPX@, django-registration bundles a one-step registration system in qq}q(hX@, django-registration bundles a one-step registration system in hhUubcdocutils.nodes literal q)q}q(hX``registration.backend.simple``h%}q(h)]h*]h(]h']h+]uhhUh]qhPXregistration.backend.simpleqq}q(hUhhubah#UliteralqubhPX@. This backend's workflow is deliberately as simple as possible:qq}q(hX@. This backend's workflow is deliberately as simple as possible:hhUubeubcdocutils.nodes enumerated_list q)q}q(hUhhBhh!h#Uenumerated_listqh%}q(UsuffixqU.h']h(]h)]UprefixqUh*]h+]UenumtypeqUarabicquh-K h.hh]q(cdocutils.nodes list_item q)q}q(hX4A user signs up by filling out a registration form. hhhh!h#U list_itemqh%}q(h)]h*]h(]h']h+]uh-Nh.hh]qhT)q}q(hX3A user signs up by filling out a registration form.qhhhh!h#hWh%}q(h)]h*]h(]h']h+]uh-K h]qhPX3A user signs up by filling out a registration form.qq}q(hhhhubaubaubh)q}q(hXoThe user's account is created and is active immediately, with no intermediate confirmation or activation step. hhhh!h#hh%}q(h)]h*]h(]h']h+]uh-Nh.hh]qhT)q}q(hXnThe user's account is created and is active immediately, with no intermediate confirmation or activation step.qhhhh!h#hWh%}q(h)]h*]h(]h']h+]uh-Kh]qhPXnThe user's account is created and is active immediately, with no intermediate confirmation or activation step.qq}q(hhhhubaubaubh)q}q(hX(The new user is logged in immediately. hhhh!h#hh%}q(h)]h*]h(]h']h+]uh-Nh.hh]qhT)q}q(hX&The new user is logged in immediately.qhhhh!h#hWh%}q(h)]h*]h(]h']h+]uh-Kh]qhPX&The new user is logged in immediately.qÅq}q(hhhhubaubaubeubhA)q}q(hUhhBhh!h#hDh%}q(h)]h*]h(]h']qhah+]qhauh-Kh.hh]q(hI)q}q(hX Configurationqhhhh!h#hMh%}q(h)]h*]h(]h']h+]uh-Kh.hh]qhPX Configurationqхq}q(hhhhubaubhT)q}q(hXTo use this backend, simply include the URLconf ``registration.backends.simple.urls`` somewhere in your site's own URL configuration. For example::hhhh!h#hWh%}q(h)]h*]h(]h']h+]uh-Kh.hh]q(hPX0To use this backend, simply include the URLconf q؅q}q(hX0To use this backend, simply include the URLconf hhubh)q}q(hX%``registration.backends.simple.urls``h%}q(h)]h*]h(]h']h+]uhhh]qhPX!registration.backends.simple.urlsq߅q}q(hUhhubah#hubhPX= somewhere in your site's own URL configuration. For example:q⅁q}q(hX= somewhere in your site's own URL configuration. For example:hhubeubcdocutils.nodes literal_block q)q}q(hX>(r'^accounts/', include('registration.backends.simple.urls')),hhhh!h#U literal_blockqh%}q(U xml:spaceqUpreserveqh']h(]h)]h*]h+]uh-Kh.hh]qhPX>(r'^accounts/', include('registration.backends.simple.urls')),q텁q}q(hUhhubaubhT)q}q(hXKNo additional settings are required, but one optional setting is supported:qhhhh!h#hWh%}q(h)]h*]h(]h']h+]uh-Kh.hh]qhPXKNo additional settings are required, but one optional setting is supported:qq}q(hhhhubaubcdocutils.nodes definition_list q)q}q(hUhhhh!h#Udefinition_listqh%}q(h)]h*]h(]h']h+]uh-Nh.hh]qcdocutils.nodes definition_list_item q)q}r(hX``REGISTRATION_OPEN`` A boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. A default of ``True`` will be assumed if this setting is not supplied. hhhh!h#Udefinition_list_itemrh%}r(h)]h*]h(]h']h+]uh-K$h]r(cdocutils.nodes term r)r}r(hUh%}r(h)]h*]h(]h']h+]uhhh]rh)r }r (hX``REGISTRATION_OPEN``r h%}r (h)]h*]h(]h']h+]uhjh]r hPXREGISTRATION_OPENrr}r(hUhj ubah#hubah#Utermrubcdocutils.nodes definition r)r}r(hUh%}r(h)]h*]h(]h']h+]uhhh]rhT)r}r(hXA boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. A default of ``True`` will be assumed if this setting is not supplied.hjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K"h]r(hPXA boolean (either rr}r(hXA boolean (either hjubh)r}r(hX``True``h%}r (h)]h*]h(]h']h+]uhjh]r!hPXTruer"r#}r$(hUhjubah#hubhPX or r%r&}r'(hX or hjubh)r(}r)(hX ``False``h%}r*(h)]h*]h(]h']h+]uhjh]r+hPXFalser,r-}r.(hUhj(ubah#hubhPXW) indicating whether registration of new accounts is currently permitted. A default of r/r0}r1(hXW) indicating whether registration of new accounts is currently permitted. A default of hjubh)r2}r3(hX``True``h%}r4(h)]h*]h(]h']h+]uhjh]r5hPXTruer6r7}r8(hUhj2ubah#hubhPX1 will be assumed if this setting is not supplied.r9r:}r;(hX1 will be assumed if this setting is not supplied.hjubeubah#U definitionr<ubeubaubhT)r=}r>(hXUpon successful registration, the default redirect is to the URL specified by the ``get_absolute_url()`` method of the newly-created ``User`` object; by default, this will be ``/users//``, although it can be overridden in either of two ways:hhhh!h#hWh%}r?(h)]h*]h(]h']h+]uh-K&h.hh]r@(hPXRUpon successful registration, the default redirect is to the URL specified by the rArB}rC(hXRUpon successful registration, the default redirect is to the URL specified by the hj=ubh)rD}rE(hX``get_absolute_url()``h%}rF(h)]h*]h(]h']h+]uhj=h]rGhPXget_absolute_url()rHrI}rJ(hUhjDubah#hubhPX method of the newly-created rKrL}rM(hX method of the newly-created hj=ubh)rN}rO(hX``User``h%}rP(h)]h*]h(]h']h+]uhj=h]rQhPXUserrRrS}rT(hUhjNubah#hubhPX" object; by default, this will be rUrV}rW(hX" object; by default, this will be hj=ubh)rX}rY(hX``/users//``h%}rZ(h)]h*]h(]h']h+]uhj=h]r[hPX/users//r\r]}r^(hUhjXubah#hubhPX6, although it can be overridden in either of two ways:r_r`}ra(hX6, although it can be overridden in either of two ways:hj=ubeubh)rb}rc(hUhhhh!h#hh%}rd(hU.h']h(]h)]hUh*]h+]hhuh-K+h.hh]re(h)rf}rg(hX~Specify a custom URL pattern for the :func:`~registration.views.register` view, passing the keyword argument ``success_url``. hjbhh!h#hh%}rh(h)]h*]h(]h']h+]uh-Nh.hh]rihT)rj}rk(hX}Specify a custom URL pattern for the :func:`~registration.views.register` view, passing the keyword argument ``success_url``.hjfhh!h#hWh%}rl(h)]h*]h(]h']h+]uh-K+h]rm(hPX%Specify a custom URL pattern for the rnro}rp(hX%Specify a custom URL pattern for the hjjubh])rq}rr(hX$:func:`~registration.views.register`rshjjhh!h#hah%}rt(UreftypeXfunchchdXregistration.views.registerU refdomainXpyruh']h(]U refexplicith)]h*]h+]hfhgUpy:classrvNU py:modulerwXregistration.backends.simplerxuh-K+h]ryh)rz}r{(hjsh%}r|(h)]h*]r}(hnjuXpy-funcr~eh(]h']h+]uhjqh]rhPX register()rr}r(hUhjzubah#hubaubhPX$ view, passing the keyword argument rr}r(hX$ view, passing the keyword argument hjjubh)r}r(hX``success_url``h%}r(h)]h*]h(]h']h+]uhjjh]rhPX success_urlrr}r(hUhjubah#hubhPX.r}r(hX.hjjubeubaubh)r}r(hXOverride the default ``get_absolute_url()`` of the ``User`` model in your Django configuration, as covered in `Django's settings documentation `_. hjbhh!h#hh%}r(h)]h*]h(]h']h+]uh-Nh.hh]rhT)r}r(hXOverride the default ``get_absolute_url()`` of the ``User`` model in your Django configuration, as covered in `Django's settings documentation `_.hjhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K/h]r(hPXOverride the default rr}r(hXOverride the default hjubh)r}r(hX``get_absolute_url()``h%}r(h)]h*]h(]h']h+]uhjh]rhPXget_absolute_url()rr}r(hUhjubah#hubhPX of the rr}r(hX of the hjubh)r}r(hX``User``h%}r(h)]h*]h(]h']h+]uhjh]rhPXUserrr}r(hUhjubah#hubhPX3 model in your Django configuration, as covered in rr}r(hX3 model in your Django configuration, as covered in hjubcdocutils.nodes reference r)r}r(hXn`Django's settings documentation `_h%}r(UnameXDjango's settings documentationUrefurirXIhttp://docs.djangoproject.com/en/dev/ref/settings/#absolute-url-overridesrh']h(]h)]h*]h+]uhjh]rhPXDjango's settings documentationrr}r(hUhjubah#U referencerubh)r}r(hXL h%}r(Urefurijh']rhah(]h)]h*]h+]rh auhjh]h#h$ubhPX.r}r(hX.hjubeubaubeubhT)r}r(hXThe default form class used for account registration will be :class:`registration.forms.RegistrationForm`, although this can be overridden by supplying a custom URL pattern for the ``register()`` view and passing the keyword argument ``form_class``.hhhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K4h.hh]r(hPX=The default form class used for account registration will be rr}r(hX=The default form class used for account registration will be hjubh])r}r(hX,:class:`registration.forms.RegistrationForm`rhjhh!h#hah%}r(UreftypeXclasshchdX#registration.forms.RegistrationFormU refdomainXpyrh']h(]U refexplicith)]h*]h+]hfhgjvNjwjxuh-K4h]rh)r}r(hjh%}r(h)]h*]r(hnjXpy-classreh(]h']h+]uhjh]rhPX#registration.forms.RegistrationFormrr}r(hUhjubah#hubaubhPXL, although this can be overridden by supplying a custom URL pattern for the rr}r(hXL, although this can be overridden by supplying a custom URL pattern for the hjubh)r}r(hX``register()``h%}r(h)]h*]h(]h']h+]uhjh]rhPX register()rr}r(hUhjubah#hubhPX' view and passing the keyword argument rr}r(hX' view and passing the keyword argument hjubh)r}r(hX``form_class``h%}r(h)]h*]h(]h']h+]uhjh]rhPX form_classrr}r(hUhjubah#hubhPX.r}r(hX.hjubeubhT)r}r(hXNote that because this backend does not use an activation step, attempting to use the :func:`~registration.views.activate` view with this backend or calling the backend's ``activate()`` or ``post_activation_redirect()`` methods will raise ``NotImplementedError``.hhhh!h#hWh%}r(h)]h*]h(]h']h+]uh-K9h.hh]r(hPXVNote that because this backend does not use an activation step, attempting to use the rr}r(hXVNote that because this backend does not use an activation step, attempting to use the hjubh])r}r(hX$:func:`~registration.views.activate`rhjhh!h#hah%}r(UreftypeXfunchchdXregistration.views.activateU refdomainXpyrh']h(]U refexplicith)]h*]h+]hfhgjvNjwjxuh-K9h]rh)r}r(hjh%}r(h)]h*]r(hnjXpy-funcreh(]h']h+]uhjh]rhPX activate()rr}r(hUhjubah#hubaubhPX1 view with this backend or calling the backend's rr}r(hX1 view with this backend or calling the backend's hjubh)r}r(hX``activate()``h%}r(h)]h*]h(]h']h+]uhjh]rhPX activate()r r }r (hUhjubah#hubhPX or r r }r(hX or hjubh)r}r(hX``post_activation_redirect()``h%}r(h)]h*]h(]h']h+]uhjh]rhPXpost_activation_redirect()rr}r(hUhjubah#hubhPX methods will raise rr}r(hX methods will raise hjubh)r}r(hX``NotImplementedError``h%}r(h)]h*]h(]h']h+]uhjh]rhPXNotImplementedErrorrr}r(hUhjubah#hubhPX.r }r!(hX.hjubeubeubeubehUU transformerr"NU footnote_refsr#}r$Urefnamesr%}r&Usymbol_footnotesr']r(Uautofootnote_refsr)]r*Usymbol_footnote_refsr+]r,U citationsr-]r.h.hU current_liner/NUtransform_messagesr0]r1(cdocutils.nodes system_message r2)r3}r4(hUh%}r5(h)]UlevelKh']h(]Usourceh!h*]h+]UlineKUtypeUINFOr6uh]r7hT)r8}r9(hUh%}r:(h)]h*]h(]h']h+]uhj3h]r;hPX4Hyperlink target "simple-backend" is not referenced.r<r=}r>(hUhj8ubah#hWubah#Usystem_messager?ubj2)r@}rA(hUh%}rB(h)]UlevelKh']h(]Usourceh!h*]h+]UlineKUtypej6uh]rChT)rD}rE(hUh%}rF(h)]h*]h(]h']h+]uhj@h]rGhPX4Hyperlink target "simple-backend" is not referenced.rHrI}rJ(hUhjDubah#hWubah#j?ubj2)rK}rL(hUh%}rM(h)]UlevelKh']h(]Usourceh!h*]h+]UlineK/Utypej6uh]rNhT)rO}rP(hUh%}rQ(h)]h*]h(]h']h+]uhjKh]rRhPXEHyperlink target "django's settings documentation" is not referenced.rSrT}rU(hUhjOubah#hWubah#j?ubeUreporterrVNUid_startrWKU autofootnotesrX]rYU citation_refsrZ}r[Uindirect_targetsr\]r]Usettingsr^(cdocutils.frontend Values r_or`}ra(Ufootnote_backlinksrbKUrecord_dependenciesrcNU rfc_base_urlrdUhttp://tools.ietf.org/html/reU tracebackrfKUpep_referencesrgNUstrip_commentsrhNU toc_backlinksriUentryrjU language_coderkUenrlU datestamprmNU report_levelrnKU _destinationroNU halt_levelrpKU strip_classesrqNhMNUerror_encoding_error_handlerrrUbackslashreplacersUdebugrtNUembed_stylesheetruUoutput_encoding_error_handlerrvUstrictrwU sectnum_xformrxKUdump_transformsryNU docinfo_xformrzKUwarning_streamr{NUpep_file_url_templater|Upep-%04dr}Uexit_status_levelr~KUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUH/Users/james/dev/hg/personal/django-registration/docs/simple-backend.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjwUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrKU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h5h/hh/hhhhBhjuUsubstitution_namesr}rh#h.h%}r(h)]h']h(]Usourceh!h*]h+]uU footnotesr]rUrefidsr}rh]rhasub.django-registration-1.0/docs/_build/doctrees/upgrade.doctree0000644000076700007670000007314411733413132024565 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(XupgradeqKXbackwards-incompatible changesqNXchanges to registration viewsqNXchanges to registration formsq NX upgrade guideq NXdjango version requirementq NX(changes to the registrationprofile modelq NuUsubstitution_defsq }qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUupgradeqhUbackwards-incompatible-changesqhUchanges-to-registration-viewsqh Uchanges-to-registration-formsqh U upgrade-guideqh Udjango-version-requirementqh U(changes-to-the-registrationprofile-modelquUchildrenq]q(cdocutils.nodes target q)q }q!(U rawsourceq"X .. _upgrade:Uparentq#hUsourceq$cdocutils.nodes reprunicode q%XA/Users/james/dev/hg/personal/django-registration/docs/upgrade.rstq&q'}q(bUtagnameq)Utargetq*U attributesq+}q,(Uidsq-]Ubackrefsq.]Udupnamesq/]Uclassesq0]Unamesq1]Urefidq2huUlineq3KUdocumentq4hh]ubcdocutils.nodes section q5)q6}q7(h"Uh#hh$h'Uexpect_referenced_by_nameq8}q9hh sh)Usectionq:h+}q;(h/]h0]h.]h-]q<(hheh1]q=(h heuh3Kh4hUexpect_referenced_by_idq>}q?hh sh]q@(cdocutils.nodes title qA)qB}qC(h"X Upgrade guideqDh#h6h$h'h)UtitleqEh+}qF(h/]h0]h.]h-]h1]uh3Kh4hh]qGcdocutils.nodes Text qHX Upgrade guideqIqJ}qK(h"hDh#hBubaubcdocutils.nodes paragraph qL)qM}qN(h"XThe |version| release of django-registration represents a complete rewrite of the previous codebase, and introduces several new features which greatly enhance the customizability and extensibility of django-registration. Whenever possible, changes were made in ways which preserve backwards compatibility with previous releases, but some changes to existing installations will still be required in order to upgrade to |version|. This document provides a summary of those changes, and of the new features available in the |version| release.h#h6h$h'h)U paragraphqOh+}qP(h/]h0]h.]h-]h1]uh3Kh4hh]qQ(hHXThe qRqS}qT(h"XThe h#hMubhHX0.8qUqV}qW(h"U0.8qXh$Nh3Nh4hh#hMubhHX release of django-registration represents a complete rewrite of the previous codebase, and introduces several new features which greatly enhance the customizability and extensibility of django-registration. Whenever possible, changes were made in ways which preserve backwards compatibility with previous releases, but some changes to existing installations will still be required in order to upgrade to qYqZ}q[(h"X release of django-registration represents a complete rewrite of the previous codebase, and introduces several new features which greatly enhance the customizability and extensibility of django-registration. Whenever possible, changes were made in ways which preserve backwards compatibility with previous releases, but some changes to existing installations will still be required in order to upgrade to h#hMubhHX0.8q\q]}q^(h"hXh$Nh3Nh4hh#hMubhHX^. This document provides a summary of those changes, and of the new features available in the q_q`}qa(h"X^. This document provides a summary of those changes, and of the new features available in the h#hMubhHX0.8qbqc}qd(h"hXh$Nh3Nh4hh#hMubhHX release.qeqf}qg(h"X release.h#hMubeubh5)qh}qi(h"Uh#h6h$h'h)h:h+}qj(h/]h0]h.]h-]qkhah1]qlh auh3Kh4hh]qm(hA)qn}qo(h"XDjango version requirementqph#hhh$h'h)hEh+}qq(h/]h0]h.]h-]h1]uh3Kh4hh]qrhHXDjango version requirementqsqt}qu(h"hph#hnubaubhL)qv}qw(h"XAs of |version|, django-registration requires Django 1.3 or newer; older Django releases may work, but are officially unsupported.h#hhh$h'h)hOh+}qx(h/]h0]h.]h-]h1]uh3Kh4hh]qy(hHXAs of qzq{}q|(h"XAs of h#hvubhHX0.8q}q~}q(h"hXh$Nh3Nh4hh#hvubhHXs, django-registration requires Django 1.3 or newer; older Django releases may work, but are officially unsupported.qq}q(h"Xs, django-registration requires Django 1.3 or newer; older Django releases may work, but are officially unsupported.h#hvubeubeubh5)q}q(h"Uh#h6h$h'h)h:h+}q(h/]h0]h.]h-]qhah1]qhauh3Kh4hh]q(hA)q}q(h"XBackwards-incompatible changesqh#hh$h'h)hEh+}q(h/]h0]h.]h-]h1]uh3Kh4hh]qhHXBackwards-incompatible changesqq}q(h"hh#hubaubhL)q}q(h"XIf you're upgrading from an older release of django-registration, and if you were using the default setup (i.e., the included default URLconf and no custom URL patterns or custom arguments to views), most things will continue to work as normal (although you will need to create one new template; see the section on views below). However, the old default URLconf has been deprecated and will be removed in version 1.0 of django-registration, so it is recommended that you begin migrating now. To do so, change any use of ``registration.urls`` to ``registration.backends.default.urls``. For example, if you had the following in your root URLconf::h#hh$h'h)hOh+}q(h/]h0]h.]h-]h1]uh3Kh4hh]q(hHXIf you're upgrading from an older release of django-registration, and if you were using the default setup (i.e., the included default URLconf and no custom URL patterns or custom arguments to views), most things will continue to work as normal (although you will need to create one new template; see the section on views below). However, the old default URLconf has been deprecated and will be removed in version 1.0 of django-registration, so it is recommended that you begin migrating now. To do so, change any use of qq}q(h"XIf you're upgrading from an older release of django-registration, and if you were using the default setup (i.e., the included default URLconf and no custom URL patterns or custom arguments to views), most things will continue to work as normal (although you will need to create one new template; see the section on views below). However, the old default URLconf has been deprecated and will be removed in version 1.0 of django-registration, so it is recommended that you begin migrating now. To do so, change any use of h#hubcdocutils.nodes literal q)q}q(h"X``registration.urls``h+}q(h/]h0]h.]h-]h1]uh#hh]qhHXregistration.urlsqq}q(h"Uh#hubah)UliteralqubhHX to qq}q(h"X to h#hubh)q}q(h"X&``registration.backends.default.urls``h+}q(h/]h0]h.]h-]h1]uh#hh]qhHX"registration.backends.default.urlsqq}q(h"Uh#hubah)hubhHX=. For example, if you had the following in your root URLconf:qq}q(h"X=. For example, if you had the following in your root URLconf:h#hubeubcdocutils.nodes literal_block q)q}q(h"X.(r'^accounts/', include('registration.urls')),h#hh$h'h)U literal_blockqh+}q(U xml:spaceqUpreserveqh-]h.]h/]h0]h1]uh3K%h4hh]qhHX.(r'^accounts/', include('registration.urls')),qq}q(h"Uh#hubaubhL)q}q(h"Xyou should change it to::qh#hh$h'h)hOh+}q(h/]h0]h.]h-]h1]uh3K'h4hh]qhHXyou should change it to:qq}q(h"Xyou should change it to:h#hubaubh)q}q(h"X?(r'^accounts/', include('registration.backends.default.urls')),h#hh$h'h)hh+}q(hhh-]h.]h/]h0]h1]uh3K)h4hh]qhHX?(r'^accounts/', include('registration.backends.default.urls')),qŅq}q(h"Uh#hubaubhL)q}q(h"X1The older include will continue to work until django-registration 1.0; in |version| it raises a ``PendingDeprecationWarning`` (which is ignored by default in Python), in 0.9 it will raise ``DeprecationWarning`` (which will begin printing warning messages on import) and in 1.0 it will be removed entirely.h#hh$h'h)hOh+}q(h/]h0]h.]h-]h1]uh3K+h4hh]q(hHXJThe older include will continue to work until django-registration 1.0; in q̅q}q(h"XJThe older include will continue to work until django-registration 1.0; in h#hubhHX0.8qυq}q(h"hXh$Nh3Nh4hh#hubhHX it raises a q҅q}q(h"X it raises a h#hubh)q}q(h"X``PendingDeprecationWarning``h+}q(h/]h0]h.]h-]h1]uh#hh]qhHXPendingDeprecationWarningqمq}q(h"Uh#hubah)hubhHX? (which is ignored by default in Python), in 0.9 it will raise q܅q}q(h"X? (which is ignored by default in Python), in 0.9 it will raise h#hubh)q}q(h"X``DeprecationWarning``h+}q(h/]h0]h.]h-]h1]uh#hh]qhHXDeprecationWarningqㅁq}q(h"Uh#hubah)hubhHX_ (which will begin printing warning messages on import) and in 1.0 it will be removed entirely.q慁q}q(h"X_ (which will begin printing warning messages on import) and in 1.0 it will be removed entirely.h#hubeubh5)q}q(h"Uh#hh$h'h)h:h+}q(h/]h0]h.]h-]qhah1]qhauh3K3h4hh]q(hA)q}q(h"XChanges to registration viewsqh#hh$h'h)hEh+}q(h/]h0]h.]h-]h1]uh3K3h4hh]qhHXChanges to registration viewsqq}q(h"hh#hubaubhL)q}q(h"X:ref:`The views used to handle user registration ` have changed significantly as of django-registration |version|. Both views now require the keyword argument ``backend``, which specifies the :ref:`registration backend ` to use, and so any URL pattern for these views must supply that argument. The URLconf provided with :ref:`the default backend ` properly passes this argument.h#hh$h'h)hOh+}q(h/]h0]h.]h-]h1]uh3K5h4hh]q(csphinx.addnodes pending_xref q)q}q(h"X9:ref:`The views used to handle user registration `qh#hh$h'h)U pending_xrefqh+}r(UreftypeXrefUrefwarnrU reftargetrXviewsU refdomainXstdrh-]h.]U refexplicith/]h0]h1]UrefdocrUupgraderuh3K5h]rcdocutils.nodes emphasis r)r}r (h"hh+}r (h/]h0]r (Uxrefr jXstd-refr eh.]h-]h1]uh#hh]rhHX*The views used to handle user registrationrr}r(h"Uh#jubah)UemphasisrubaubhHX6 have changed significantly as of django-registration rr}r(h"X6 have changed significantly as of django-registration h#hubhHX0.8rr}r(h"hXh$Nh3Nh4hh#hubhHX.. Both views now require the keyword argument rr}r(h"X.. Both views now require the keyword argument h#hubh)r}r(h"X ``backend``h+}r(h/]h0]h.]h-]h1]uh#hh]rhHXbackendr r!}r"(h"Uh#jubah)hubhHX, which specifies the r#r$}r%(h"X, which specifies the h#hubh)r&}r'(h"X):ref:`registration backend `r(h#hh$h'h)hh+}r)(UreftypeXrefjjX backend-apiU refdomainXstdr*h-]h.]U refexplicith/]h0]h1]jjuh3K5h]r+j)r,}r-(h"j(h+}r.(h/]h0]r/(j j*Xstd-refr0eh.]h-]h1]uh#j&h]r1hHXregistration backendr2r3}r4(h"Uh#j,ubah)jubaubhHXe to use, and so any URL pattern for these views must supply that argument. The URLconf provided with r5r6}r7(h"Xe to use, and so any URL pattern for these views must supply that argument. The URLconf provided with h#hubh)r8}r9(h"X,:ref:`the default backend `r:h#hh$h'h)hh+}r;(UreftypeXrefjjXdefault-backendU refdomainXstdr<h-]h.]U refexplicith/]h0]h1]jjuh3K5h]r=j)r>}r?(h"j:h+}r@(h/]h0]rA(j j<Xstd-refrBeh.]h-]h1]uh#j8h]rChHXthe default backendrDrE}rF(h"Uh#j>ubah)jubaubhHX properly passes this argument.rGrH}rI(h"X properly passes this argument.h#hubeubhL)rJ}rK(h"XThe ``profile_callback`` argument of the :func:`~registration.views.register` view has been removed; the functionality it provided can now be implemented easily via a custom backend, or by connecting listeners to :ref:`the signals sent during the registration process `.h#hh$h'h)hOh+}rL(h/]h0]h.]h-]h1]uh3K=h4hh]rM(hHXThe rNrO}rP(h"XThe h#jJubh)rQ}rR(h"X``profile_callback``h+}rS(h/]h0]h.]h-]h1]uh#jJh]rThHXprofile_callbackrUrV}rW(h"Uh#jQubah)hubhHX argument of the rXrY}rZ(h"X argument of the h#jJubh)r[}r\(h"X$:func:`~registration.views.register`r]h#jJh$h'h)hh+}r^(UreftypeXfuncjjXregistration.views.registerU refdomainXpyr_h-]h.]U refexplicith/]h0]h1]jjUpy:classr`NU py:moduleraNuh3K=h]rbh)rc}rd(h"j]h+}re(h/]h0]rf(j j_Xpy-funcrgeh.]h-]h1]uh#j[h]rhhHX register()rirj}rk(h"Uh#jcubah)hubaubhHX view has been removed; the functionality it provided can now be implemented easily via a custom backend, or by connecting listeners to rlrm}rn(h"X view has been removed; the functionality it provided can now be implemented easily via a custom backend, or by connecting listeners to h#jJubh)ro}rp(h"XA:ref:`the signals sent during the registration process `rqh#jJh$h'h)hh+}rr(UreftypeXrefjjXsignalsU refdomainXstdrsh-]h.]U refexplicith/]h0]h1]jjuh3K=h]rtj)ru}rv(h"jqh+}rw(h/]h0]rx(j jsXstd-refryeh.]h-]h1]uh#joh]rzhHX0the signals sent during the registration processr{r|}r}(h"Uh#juubah)jubaubhHX.r~}r(h"X.h#jJubeubhL)r}r(h"X`The :func:`~registration.views.activate` view now issues a redirect upon successful activation; in the default backend this is to the URL pattern named ``registration_activation_complete``; in the default setup, this will redirect to a view which renders the template ``registration/activation_complete.html``, and so this template should be present when using the default backend and default configuration. Other backends can specify the location to redirect to through their ``post_activation_redirect()`` method, and this can be overridden on a case-by-case basis by passing the (new) keyword argument ``success_url`` to the ``activate()`` view. On unsuccessful activation, the ``activate()`` view still displays the same template, but its context has changed: the context will simply consist of any keyword arguments captured in the URL and passed to the view.h#hh$h'h)hOh+}r(h/]h0]h.]h-]h1]uh3KCh4hh]r(hHXThe rr}r(h"XThe h#jubh)r}r(h"X$:func:`~registration.views.activate`rh#jh$h'h)hh+}r(UreftypeXfuncjjXregistration.views.activateU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3KCh]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-funcreh.]h-]h1]uh#jh]rhHX activate()rr}r(h"Uh#jubah)hubaubhHXp view now issues a redirect upon successful activation; in the default backend this is to the URL pattern named rr}r(h"Xp view now issues a redirect upon successful activation; in the default backend this is to the URL pattern named h#jubh)r}r(h"X$``registration_activation_complete``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHX registration_activation_completerr}r(h"Uh#jubah)hubhHXP; in the default setup, this will redirect to a view which renders the template rr}r(h"XP; in the default setup, this will redirect to a view which renders the template h#jubh)r}r(h"X)``registration/activation_complete.html``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHX%registration/activation_complete.htmlrr}r(h"Uh#jubah)hubhHX, and so this template should be present when using the default backend and default configuration. Other backends can specify the location to redirect to through their rr}r(h"X, and so this template should be present when using the default backend and default configuration. Other backends can specify the location to redirect to through their h#jubh)r}r(h"X``post_activation_redirect()``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHXpost_activation_redirect()rr}r(h"Uh#jubah)hubhHXb method, and this can be overridden on a case-by-case basis by passing the (new) keyword argument rr}r(h"Xb method, and this can be overridden on a case-by-case basis by passing the (new) keyword argument h#jubh)r}r(h"X``success_url``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHX success_urlrr}r(h"Uh#jubah)hubhHX to the rr}r(h"X to the h#jubh)r}r(h"X``activate()``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHX activate()rr}r(h"Uh#jubah)hubhHX' view. On unsuccessful activation, the rr}r(h"X' view. On unsuccessful activation, the h#jubh)r}r(h"X``activate()``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHX activate()rr}r(h"Uh#jubah)hubhHX view still displays the same template, but its context has changed: the context will simply consist of any keyword arguments captured in the URL and passed to the view.rr}r(h"X view still displays the same template, but its context has changed: the context will simply consist of any keyword arguments captured in the URL and passed to the view.h#jubeubeubh5)r}r(h"Uh#hh$h'h)h:h+}r(h/]h0]h.]h-]rhah1]rh auh3KSh4hh]r(hA)r}r(h"XChanges to registration formsrh#jh$h'h)hEh+}r(h/]h0]h.]h-]h1]uh3KSh4hh]rhHXChanges to registration formsrr}r(h"jh#jubaubhL)r}r(h"XPreviously, the form used to collect data during registration was expected to implement a ``save()`` method which would create the new user account. This is no longer the case; creating the account is handled by the backend, and so any custom logic should be moved into a custom backend, or by connecting listeners to :ref:`the signals sent during the registration process `.h#jh$h'h)hOh+}r(h/]h0]h.]h-]h1]uh3KUh4hh]r(hHXZPreviously, the form used to collect data during registration was expected to implement a rr}r(h"XZPreviously, the form used to collect data during registration was expected to implement a h#jubh)r}r(h"X ``save()``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHXsave()rr}r(h"Uh#jubah)hubhHX method which would create the new user account. This is no longer the case; creating the account is handled by the backend, and so any custom logic should be moved into a custom backend, or by connecting listeners to rr}r(h"X method which would create the new user account. This is no longer the case; creating the account is handled by the backend, and so any custom logic should be moved into a custom backend, or by connecting listeners to h#jubh)r}r(h"XA:ref:`the signals sent during the registration process `rh#jh$h'h)hh+}r(UreftypeXrefjjXsignalsU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jjuh3KUh]rj)r}r(h"jh+}r(h/]h0]r(j jXstd-refreh.]h-]h1]uh#jh]rhHX0the signals sent during the registration processrr}r(h"Uh#jubah)jubaubhHX.r}r(h"X.h#jubeubeubh5)r}r(h"Uh#hh$h'h)h:h+}r(h/]h0]h.]h-]rhah1]r h auh3K^h4hh]r (hA)r }r (h"XFChanges to the :class:`~registration.models.RegistrationProfile` modelr h#jh$h'h)hEh+}r(h/]h0]h.]h-]h1]uh3K^h4hh]r(hHXChanges to the rr}r(h"XChanges to the rh#j ubh)r}r(h"X1:class:`~registration.models.RegistrationProfile`rh#j h$h'h)hh+}r(UreftypeXclassjjX'registration.models.RegistrationProfileU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3K]h]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-classreh.]h-]h1]uh#jh]rhHXRegistrationProfiler r!}r"(h"Uh#jubah)hubaubhHX modelr#r$}r%(h"X modelr&h#j ubeubhL)r'}r((h"X{The :meth:`~registration.models.RegistrationManager.create_inactive_user` method of :class:`~registration.models.RegistrationManager` now has an additional required argument: ``site``. This allows django-registration to easily be used regardless of whether ``django.contrib.sites`` is installed, since a ``RequestSite`` object can be passed in place of a regular ``Site`` object.h#jh$h'h)hOh+}r)(h/]h0]h.]h-]h1]uh3K`h4hh]r*(hHXThe r+r,}r-(h"XThe h#j'ubh)r.}r/(h"XE:meth:`~registration.models.RegistrationManager.create_inactive_user`r0h#j'h$h'h)hh+}r1(UreftypeXmethjjX<registration.models.RegistrationManager.create_inactive_userU refdomainXpyr2h-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3K`h]r3h)r4}r5(h"j0h+}r6(h/]h0]r7(j j2Xpy-methr8eh.]h-]h1]uh#j.h]r9hHXcreate_inactive_user()r:r;}r<(h"Uh#j4ubah)hubaubhHX method of r=r>}r?(h"X method of h#j'ubh)r@}rA(h"X1:class:`~registration.models.RegistrationManager`rBh#j'h$h'h)hh+}rC(UreftypeXclassjjX'registration.models.RegistrationManagerU refdomainXpyrDh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3K`h]rEh)rF}rG(h"jBh+}rH(h/]h0]rI(j jDXpy-classrJeh.]h-]h1]uh#j@h]rKhHXRegistrationManagerrLrM}rN(h"Uh#jFubah)hubaubhHX* now has an additional required argument: rOrP}rQ(h"X* now has an additional required argument: h#j'ubh)rR}rS(h"X``site``h+}rT(h/]h0]h.]h-]h1]uh#j'h]rUhHXsiterVrW}rX(h"Uh#jRubah)hubhHXJ. This allows django-registration to easily be used regardless of whether rYrZ}r[(h"XJ. This allows django-registration to easily be used regardless of whether h#j'ubh)r\}r](h"X``django.contrib.sites``h+}r^(h/]h0]h.]h-]h1]uh#j'h]r_hHXdjango.contrib.sitesr`ra}rb(h"Uh#j\ubah)hubhHX is installed, since a rcrd}re(h"X is installed, since a h#j'ubh)rf}rg(h"X``RequestSite``h+}rh(h/]h0]h.]h-]h1]uh#j'h]rihHX RequestSiterjrk}rl(h"Uh#jfubah)hubhHX, object can be passed in place of a regular rmrn}ro(h"X, object can be passed in place of a regular h#j'ubh)rp}rq(h"X``Site``h+}rr(h/]h0]h.]h-]h1]uh#j'h]rshHXSitertru}rv(h"Uh#jpubah)hubhHX object.rwrx}ry(h"X object.h#j'ubeubhL)rz}r{(h"X\The :data:`~registration.signals.user_registered` signal is no longer sent by ``create_inactive_user()``, and the :data:`~registration.signals.user_activated` signal is no longer sent by :meth:`~registration.models.RegistrationManager.activate_user`; these signals are now sent by the backend after these methods have been called. Note that :ref:`these signals ` were added after the django-registration 0.7 release but before the refactoring which introduced :ref:`the backend API `, so only installations which were tracking the in-development codebase will have made use of them.h#jh$h'h)hOh+}r|(h/]h0]h.]h-]h1]uh3Khh4hh]r}(hHXThe r~r}r(h"XThe h#jzubh)r}r(h"X-:data:`~registration.signals.user_registered`rh#jzh$h'h)hh+}r(UreftypeXdatajjX$registration.signals.user_registeredU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3Khh]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-datareh.]h-]h1]uh#jh]rhHXuser_registeredrr}r(h"Uh#jubah)hubaubhHX signal is no longer sent by rr}r(h"X signal is no longer sent by h#jzubh)r}r(h"X``create_inactive_user()``h+}r(h/]h0]h.]h-]h1]uh#jzh]rhHXcreate_inactive_user()rr}r(h"Uh#jubah)hubhHX , and the rr}r(h"X , and the h#jzubh)r}r(h"X,:data:`~registration.signals.user_activated`rh#jzh$h'h)hh+}r(UreftypeXdatajjX#registration.signals.user_activatedU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3Khh]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-datareh.]h-]h1]uh#jh]rhHXuser_activatedrr}r(h"Uh#jubah)hubaubhHX signal is no longer sent by rr}r(h"X signal is no longer sent by h#jzubh)r}r(h"X>:meth:`~registration.models.RegistrationManager.activate_user`rh#jzh$h'h)hh+}r(UreftypeXmethjjX5registration.models.RegistrationManager.activate_userU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3Khh]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-methreh.]h-]h1]uh#jh]rhHXactivate_user()rr}r(h"Uh#jubah)hubaubhHX\; these signals are now sent by the backend after these methods have been called. Note that rr}r(h"X\; these signals are now sent by the backend after these methods have been called. Note that h#jzubh)r}r(h"X:ref:`these signals `rh#jzh$h'h)hh+}r(UreftypeXrefjjXsignalsU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jjuh3Khh]rj)r}r(h"jh+}r(h/]h0]r(j jXstd-refreh.]h-]h1]uh#jh]rhHX these signalsrr}r(h"Uh#jubah)jubaubhHXb were added after the django-registration 0.7 release but before the refactoring which introduced rr}r(h"Xb were added after the django-registration 0.7 release but before the refactoring which introduced h#jzubh)r}r(h"X$:ref:`the backend API `rh#jzh$h'h)hh+}r(UreftypeXrefjjX backend-apiU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jjuh3Khh]rj)r}r(h"jh+}r(h/]h0]r(j jXstd-refreh.]h-]h1]uh#jh]rhHXthe backend APIrr}r(h"Uh#jubah)jubaubhHXc, so only installations which were tracking the in-development codebase will have made use of them.rr}r(h"Xc, so only installations which were tracking the in-development codebase will have made use of them.h#jzubeubhL)r}r(h"XThe sending of activation emails has been factored out of ``create_inactive_user()``, and now exists as the method :meth:`~registration.models.RegistrationProfile.send_activation_email` on instances of ``RegistrationProfile``.h#jh$h'h)hOh+}r(h/]h0]h.]h-]h1]uh3Ksh4hh]r(hHX:The sending of activation emails has been factored out of rr}r(h"X:The sending of activation emails has been factored out of h#jubh)r}r(h"X``create_inactive_user()``h+}r(h/]h0]h.]h-]h1]uh#jh]rhHXcreate_inactive_user()rr}r(h"Uh#jubah)hubhHX, and now exists as the method rr}r(h"X, and now exists as the method h#jubh)r}r(h"XF:meth:`~registration.models.RegistrationProfile.send_activation_email`rh#jh$h'h)hh+}r(UreftypeXmethjjX=registration.models.RegistrationProfile.send_activation_emailU refdomainXpyrh-]h.]U refexplicith/]h0]h1]jjj`NjaNuh3Ksh]rh)r}r(h"jh+}r(h/]h0]r(j jXpy-methreh.]h-]h1]uh#jh]rhHXsend_activation_email()rr}r(h"Uh#jubah)hubaubhHX on instances of rr}r(h"X on instances of h#jubh)r}r (h"X``RegistrationProfile``h+}r (h/]h0]h.]h-]h1]uh#jh]r hHXRegistrationProfiler r }r(h"Uh#jubah)hubhHX.r}r(h"X.h#jubeubeubeubeubeh"UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh4hU current_linerNUtransform_messagesr]r cdocutils.nodes system_message r!)r"}r#(h"Uh+}r$(h/]UlevelKh-]h.]Usourceh'h0]h1]UlineKUtypeUINFOr%uh]r&hL)r'}r((h"Uh+}r)(h/]h0]h.]h-]h1]uh#j"h]r*hHX-Hyperlink target "upgrade" is not referenced.r+r,}r-(h"Uh#j'ubah)hOubah)Usystem_messager.ubaUreporterr/NUid_startr0KU autofootnotesr1]r2U citation_refsr3}r4Uindirect_targetsr5]r6Usettingsr7(cdocutils.frontend Values r8or9}r:(Ufootnote_backlinksr;KUrecord_dependenciesr<NU rfc_base_urlr=Uhttp://tools.ietf.org/html/r>U tracebackr?KUpep_referencesr@NUstrip_commentsrANU toc_backlinksrBUentryrCU language_coderDUenrEU datestamprFNU report_levelrGKU _destinationrHNU halt_levelrIKU strip_classesrJNhENUerror_encoding_error_handlerrKUbackslashreplacerLUdebugrMNUembed_stylesheetrNUoutput_encoding_error_handlerrOUstrictrPU sectnum_xformrQKUdump_transformsrRNU docinfo_xformrSKUwarning_streamrTNUpep_file_url_templaterUUpep-%04drVUexit_status_levelrWKUconfigrXNUstrict_visitorrYNUcloak_email_addressesrZUtrim_footnote_reference_spacer[Uenvr\NUdump_pseudo_xmlr]NUexpose_internalsr^NUsectsubtitle_xformr_U source_linkr`NUrfc_referencesraNUoutput_encodingrbUutf-8rcU source_urlrdNUinput_encodingreU utf-8-sigrfU_disable_configrgNU id_prefixrhUU tab_widthriKUerror_encodingrjUUTF-8rkU_sourcerlUA/Users/james/dev/hg/personal/django-registration/docs/upgrade.rstrmUgettext_compactrnU generatorroNUdump_internalsrpNU pep_base_urlrqUhttp://www.python.org/dev/peps/rrUinput_encoding_error_handlerrsjPUauto_id_prefixrtUidruUdoctitle_xformrvUstrip_elements_with_classesrwNU _config_filesrx]Ufile_insertion_enabledryKU raw_enabledrzKU dump_settingsr{NubUsymbol_footnote_startr|KUidsr}}r~(hjhh6hh6hhhhhjhhhuUsubstitution_namesr}rh)h4h+}r(h/]h-]h.]Usourceh'h0]h1]uU footnotesr]rUrefidsr}rh]rh asub.django-registration-1.0/docs/_build/doctrees/views.doctree0000644000076700007670000012421411733412410024264 0ustar jamesjames00000000000000cdocutils.nodes document q)q}q(U nametypesq}q(Xregistration.views.registerqKXregistration viewsqNXdjango's "redirect" shortcutqKXregistration.views.activateq KXviewsq KuUsubstitution_defsq }q Uparse_messagesq ]q(cdocutils.nodes system_message q)q}q(U rawsourceqUU attributesq}q(Udupnamesq]UlevelKUidsq]qUid1qaUbackrefsq]qUid2qaUsourcecdocutils.nodes reprunicode qX?/Users/james/dev/hg/personal/django-registration/docs/views.rstqq}qbUclassesq ]Unamesq!]UlineK4UtypeUWARNINGq"uUparentq#cdocutils.nodes paragraph q$)q%}q&(hUh}q'(h]h ]h]h]h!]uh#cdocutils.nodes list_item q()q)}q*(hUh}q+(h]h ]h]h]h!]uh#cdocutils.nodes bullet_list q,)q-}q.(hUh}q/(h]h ]h]h]h!]uh#cdocutils.nodes field_body q0)q1}q2(hUh}q3(h]h ]h]h]h!]uh#cdocutils.nodes field q4)q5}q6(hUh}q7(h]h ]h]h]h!]uh#cdocutils.nodes field_list q8)q9}q:(hUh#csphinx.addnodes desc_content q;)q<}q=(hUh#csphinx.addnodes desc q>)q?}q@(hUh#cdocutils.nodes section qA)qB}qC(hUh#hUsourceqDhUtagnameqEUsectionqFh}qG(h]h ]h]h]qHUregistration-viewsqIah!]qJhauUlineqKKUdocumentqLhUchildrenqM]qN(cdocutils.nodes title qO)qP}qQ(hXRegistration viewsqRh#hBhDhhEUtitleqSh}qT(h]h ]h]h]h!]uhKKhLhhM]qUcdocutils.nodes Text qVXRegistration viewsqWqX}qY(hhRh#hPubaubh$)qZ}q[(hXIn order to allow users to register using whatever workflow is implemented by the :ref:`registration backend ` in use, django-registration provides two views. Both are designed to allow easy configurability without writing or rewriting view code.h#hBhDhhEU paragraphq\h}q](h]h ]h]h]h!]uhKKhLhhM]q^(hVXRIn order to allow users to register using whatever workflow is implemented by the q_q`}qa(hXRIn order to allow users to register using whatever workflow is implemented by the h#hZubcsphinx.addnodes pending_xref qb)qc}qd(hX):ref:`registration backend `qeh#hZhDhhEU pending_xrefqfh}qg(UreftypeXrefUrefwarnqhU reftargetqiX backend-apiU refdomainXstdqjh]h]U refexplicith]h ]h!]UrefdocqkUviewsqluhKKhM]qmcdocutils.nodes emphasis qn)qo}qp(hheh}qq(h]h ]qr(UxrefqshjXstd-refqteh]h]h!]uh#hchM]quhVXregistration backendqvqw}qx(hUh#houbahEUemphasisqyubaubhVX in use, django-registration provides two views. Both are designed to allow easy configurability without writing or rewriting view code.qzq{}q|(hX in use, django-registration provides two views. Both are designed to allow easy configurability without writing or rewriting view code.h#hZubeubcsphinx.addnodes index q})q~}q(hUh#hBhDNhEUindexqh}q(h]h]h]h ]h!]Uentries]q(UsingleqX)activate() (in module registration.views)h UtqauhKNhLhhM]ubh?h})q}q(hUh#hBhDNhEhh}q(h]h]h]h ]h!]Uentries]q(hX)register() (in module registration.views)hUtqauhKNhLhhM]ubh>)q}q(hUh#hBhDNhEUdescqh}q(UnoindexqUdomainqXpyqh]h]h]h ]h!]UobjtypeqXfunctionqUdesctypeqhuhKNhLhhM]q(csphinx.addnodes desc_signature q)q}q(hXkregister(request, backend[, success_url[, form_class[, disallowed_url[, template_name[, extra_context]]]]])h#hhDhhEUdesc_signatureqh}q(h]qhaUmoduleqXregistration.viewsqh]h]h ]h!]qhaUfullnameqXregisterqUclassqUUfirstquhKKzhLhhM]q(csphinx.addnodes desc_addname q)q}q(hXregistration.views.h#hhDhhEU desc_addnameqh}q(h]h ]h]h]h!]uhKKzhLhhM]qhVXregistration.views.qq}q(hUh#hubaubcsphinx.addnodes desc_name q)q}q(hhh#hhDhhEU desc_nameqh}q(h]h ]h]h]h!]uhKKzhLhhM]qhVXregisterqq}q(hUh#hubaubcsphinx.addnodes desc_parameterlist q)q}q(hUh#hhDhhEUdesc_parameterlistqh}q(h]h ]h]h]h!]uhKKzhLhhM]q(csphinx.addnodes desc_parameter q)q}q(hXrequesth}q(h]h ]h]h]h!]uh#hhM]qhVXrequestqq}q(hUh#hubahEUdesc_parameterqubh)q}q(hXbackendh}q(h]h ]h]h]h!]uh#hhM]qhVXbackendqȅq}q(hUh#hubahEhubcsphinx.addnodes desc_optional q)q}q(hUh}q(h]h ]h]h]h!]uh#hhM]q(h)q}q(hX success_urlh}q(h]h ]h]h]h!]uh#hhM]qhVX success_urlqԅq}q(hUh#hubahEhubh)q}q(hUh}q(h]h ]h]h]h!]uh#hhM]q(h)q}q(hX form_classh}q(h]h ]h]h]h!]uh#hhM]qhVX form_classq߅q}q(hUh#hubahEhubh)q}q(hUh}q(h]h ]h]h]h!]uh#hhM]q(h)q}q(hXdisallowed_urlh}q(h]h ]h]h]h!]uh#hhM]qhVXdisallowed_urlqꅁq}q(hUh#hubahEhubh)q}q(hUh}q(h]h ]h]h]h!]uh#hhM]q(h)q}q(hX template_nameh}q(h]h ]h]h]h!]uh#hhM]qhVX template_nameqq}q(hUh#hubahEhubh)q}q(hUh}q(h]h ]h]h]h!]uh#hhM]qh)q}q(hX extra_contexth}q(h]h ]h]h]h!]uh#hhM]qhVX extra_contextrr}r(hUh#hubahEhubahEU desc_optionalrubehEjubehEjubehEjubehEjubeubeubh;)r}r(hUh#hhDhhEU desc_contentrh}r(h]h ]h]h]h!]uhKKzhLhhM]r(h$)r }r (hX(Allow a new user to register an account.r h#jhDhhEh\h}r (h]h ]h]h]h!]uhKK;hLhhM]r hVX(Allow a new user to register an account.rr}r(hj h#j ubaubh$)r}r(hXThe actual registration of the account will be delegated to the backend specified by the ``backend`` keyword argument. The backend is used as follows:h#jhDhhEh\h}r(h]h ]h]h]h!]uhKK=hLhhM]r(hVXYThe actual registration of the account will be delegated to the backend specified by the rr}r(hXYThe actual registration of the account will be delegated to the backend specified by the h#jubcdocutils.nodes literal r)r}r(hX ``backend``h}r(h]h ]h]h]h!]uh#jhM]rhVXbackendrr}r(hUh#jubahEUliteralr ubhVX2 keyword argument. The backend is used as follows:r!r"}r#(hX2 keyword argument. The backend is used as follows:h#jubeubcdocutils.nodes enumerated_list r$)r%}r&(hUh#jhDhhEUenumerated_listr'h}r((Usuffixr)U.h]h]h]Uprefixr*Uh ]h!]Uenumtyper+Uarabicr,uhKKAhLhhM]r-(h()r.}r/(hXThe backend's ``registration_allowed()`` method will be called, passing the ``HttpRequest``, to determine whether registration of an account is to be allowed; if not, a redirect is issued to a page indicating that registration is not permitted. h#j%hDhhEU list_itemr0h}r1(h]h ]h]h]h!]uhKNhLhhM]r2h$)r3}r4(hXThe backend's ``registration_allowed()`` method will be called, passing the ``HttpRequest``, to determine whether registration of an account is to be allowed; if not, a redirect is issued to a page indicating that registration is not permitted.h#j.hDhhEh\h}r5(h]h ]h]h]h!]uhKKAhM]r6(hVXThe backend's r7r8}r9(hXThe backend's h#j3ubj)r:}r;(hX``registration_allowed()``h}r<(h]h ]h]h]h!]uh#j3hM]r=hVXregistration_allowed()r>r?}r@(hUh#j:ubahEj ubhVX$ method will be called, passing the rArB}rC(hX$ method will be called, passing the h#j3ubj)rD}rE(hX``HttpRequest``h}rF(h]h ]h]h]h!]uh#j3hM]rGhVX HttpRequestrHrI}rJ(hUh#jDubahEj ubhVX, to determine whether registration of an account is to be allowed; if not, a redirect is issued to a page indicating that registration is not permitted.rKrL}rM(hX, to determine whether registration of an account is to be allowed; if not, a redirect is issued to a page indicating that registration is not permitted.h#j3ubeubaubh()rN}rO(hXThe form to use for account registration will be obtained by calling the backend's ``get_form_class()`` method, passing the ``HttpRequest``. To override this, pass the keyword argument ``form_class``. h#j%hDhhEj0h}rP(h]h ]h]h]h!]uhKNhLhhM]rQh$)rR}rS(hXThe form to use for account registration will be obtained by calling the backend's ``get_form_class()`` method, passing the ``HttpRequest``. To override this, pass the keyword argument ``form_class``.h#jNhDhhEh\h}rT(h]h ]h]h]h!]uhKKFhM]rU(hVXSThe form to use for account registration will be obtained by calling the backend's rVrW}rX(hXSThe form to use for account registration will be obtained by calling the backend's h#jRubj)rY}rZ(hX``get_form_class()``h}r[(h]h ]h]h]h!]uh#jRhM]r\hVXget_form_class()r]r^}r_(hUh#jYubahEj ubhVX method, passing the r`ra}rb(hX method, passing the h#jRubj)rc}rd(hX``HttpRequest``h}re(h]h ]h]h]h!]uh#jRhM]rfhVX HttpRequestrgrh}ri(hUh#jcubahEj ubhVX.. To override this, pass the keyword argument rjrk}rl(hX.. To override this, pass the keyword argument h#jRubj)rm}rn(hX``form_class``h}ro(h]h ]h]h]h!]uh#jRhM]rphVX form_classrqrr}rs(hUh#jmubahEj ubhVX.rt}ru(hX.h#jRubeubaubh()rv}rw(hXIf valid, the form's ``cleaned_data`` will be passed (as keyword arguments, and along with the ``HttpRequest``) to the backend's ``register()`` method, which should return a ``User`` object representing the new account. h#j%hDhhEj0h}rx(h]h ]h]h]h!]uhKNhLhhM]ryh$)rz}r{(hXIf valid, the form's ``cleaned_data`` will be passed (as keyword arguments, and along with the ``HttpRequest``) to the backend's ``register()`` method, which should return a ``User`` object representing the new account.h#jvhDhhEh\h}r|(h]h ]h]h]h!]uhKKKhM]r}(hVXIf valid, the form's r~r}r(hXIf valid, the form's h#jzubj)r}r(hX``cleaned_data``h}r(h]h ]h]h]h!]uh#jzhM]rhVX cleaned_datarr}r(hUh#jubahEj ubhVX: will be passed (as keyword arguments, and along with the rr}r(hX: will be passed (as keyword arguments, and along with the h#jzubj)r}r(hX``HttpRequest``h}r(h]h ]h]h]h!]uh#jzhM]rhVX HttpRequestrr}r(hUh#jubahEj ubhVX) to the backend's rr}r(hX) to the backend's h#jzubj)r}r(hX``register()``h}r(h]h ]h]h]h!]uh#jzhM]rhVX register()rr}r(hUh#jubahEj ubhVX method, which should return a rr}r(hX method, which should return a h#jzubj)r}r(hX``User``h}r(h]h ]h]h]h!]uh#jzhM]rhVXUserrr}r(hUh#jubahEj ubhVX% object representing the new account.rr}r(hX% object representing the new account.h#jzubeubaubh()r}r(hXUpon successful registration, the backend's ``post_registration_redirect()`` method will be called, passing the ``HttpRequest`` and the new ``User``, to determine the URL to redirect to. To override this, pass the keyword argument ``success_url``. h#j%hDhhEj0h}r(h]h ]h]h]h!]uhKNhLhhM]rh$)r}r(hXUpon successful registration, the backend's ``post_registration_redirect()`` method will be called, passing the ``HttpRequest`` and the new ``User``, to determine the URL to redirect to. To override this, pass the keyword argument ``success_url``.h#jhDhhEh\h}r(h]h ]h]h]h!]uhKKPhM]r(hVX,Upon successful registration, the backend's rr}r(hX,Upon successful registration, the backend's h#jubj)r}r(hX ``post_registration_redirect()``h}r(h]h ]h]h]h!]uh#jhM]rhVXpost_registration_redirect()rr}r(hUh#jubahEj ubhVX$ method will be called, passing the rr}r(hX$ method will be called, passing the h#jubj)r}r(hX``HttpRequest``h}r(h]h ]h]h]h!]uh#jhM]rhVX HttpRequestrr}r(hUh#jubahEj ubhVX and the new rr}r(hX and the new h#jubj)r}r(hX``User``h}r(h]h ]h]h]h!]uh#jhM]rhVXUserrr}r(hUh#jubahEj ubhVXS, to determine the URL to redirect to. To override this, pass the keyword argument rr}r(hXS, to determine the URL to redirect to. To override this, pass the keyword argument h#jubj)r}r(hX``success_url``h}r(h]h ]h]h]h!]uh#jhM]rhVX success_urlrr}r(hUh#jubahEj ubhVX.r}r(hX.h#jubeubaubeubh$)r}r(hX **Context**rh#jhDhhEh\h}r(h]h ]h]h]h!]uhKKVhLhhM]rcdocutils.nodes strong r)r}r(hjh}r(h]h ]h]h]h!]uh#jhM]rhVXContextrr}r(hUh#jubahEUstrongrubaubcdocutils.nodes definition_list r)r}r(hUh#jhDhhEUdefinition_listrh}r(h]h ]h]h]h!]uhKNhLhhM]rcdocutils.nodes definition_list_item r)r}r(hXD``form`` The form instance being used to collect registration data. h#jhDhhEUdefinition_list_itemrh}r(h]h ]h]h]h!]uhKKYhM]r(cdocutils.nodes term r)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]rj)r}r(hX``form``rh}r(h]h ]h]h]h!]uh#jhM]rhVXformrr}r(hUh#jubahEj ubahEUtermrubcdocutils.nodes definition r)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]rh$)r}r (hX:The form instance being used to collect registration data.r h#jhDhhEh\h}r (h]h ]h]h]h!]uhKKYhM]r hVX:The form instance being used to collect registration data.r r}r(hj h#jubaubahEU definitionrubeubaubh$)r}r(hXtThis view uses ``RequestContext``, so variables populated by context processors will also be present in the context.h#jhDhhEh\h}r(h]h ]h]h]h!]uhKK[hLhhM]r(hVXThis view uses rr}r(hXThis view uses h#jubj)r}r(hX``RequestContext``h}r(h]h ]h]h]h!]uh#jhM]rhVXRequestContextrr}r(hUh#jubahEj ubhVXS, so variables populated by context processors will also be present in the context.rr }r!(hXS, so variables populated by context processors will also be present in the context.h#jubeubh8)r"}r#(hUh#jhDNhEU field_listr$h}r%(h]h ]h]h]h!]uhKNhLhhM]r&h4)r'}r((hUh}r)(h]h ]h]h]h!]uh#j"hM]r*(cdocutils.nodes field_name r+)r,}r-(hUh}r.(h]h ]h]h]h!]uh#j'hM]r/hVX Parametersr0r1}r2(hUh#j,ubahEU field_namer3ubh0)r4}r5(hUh}r6(h]h ]h]h]h!]uh#j'hM]r7h,)r8}r9(hUh}r:(h]h ]h]h]h!]uh#j4hM]r;(h()r<}r=(hUh}r>(h]h ]h]h]h!]uh#j8hM]r?h$)r@}rA(hUh}rB(h]h ]h]h]h!]uh#j<hM]rC(j)rD}rE(hXbackendh}rF(h]h ]h]h]h!]uh#j@hM]rGhVXbackendrHrI}rJ(hUh#jDubahEjubhVX (rKrL}rM(hUh#j@ubhb)rN}rO(hUh}rP(UreftypeUobjrQU reftargetXstringrRU refdomainhh]h]U refexplicith]h ]h!]uh#j@hM]rShn)rT}rU(hjRh}rV(h]h ]h]h]h!]uh#jNhM]rWhVXstringrXrY}rZ(hUh#jTubahEhyubahEhfubhVX)r[}r\(hUh#j@ubhVX -- r]r^}r_(hUh#j@ubhVX3The dotted Python path to the backend class to use.r`ra}rb(hX3The dotted Python path to the backend class to use.rch#j@ubehEh\ubahEj0ubh()rd}re(hUh}rf(h]h ]h]h]h!]uh#j8hM]rgh$)rh}ri(hUh}rj(h]h ]h]h]h!]uh#jdhM]rk(j)rl}rm(hXdisallowed_urlh}rn(h]h ]h]h]h!]uh#jhhM]rohVXdisallowed_urlrprq}rr(hUh#jlubahEjubhVX (rsrt}ru(hUh#jhubhb)rv}rw(hUh}rx(UreftypejQU reftargetXstringryU refdomainhh]h]U refexplicith]h ]h!]uh#jhhM]rzhn)r{}r|(hjyh}r}(h]h ]h]h]h!]uh#jvhM]r~hVXstringrr}r(hUh#j{ubahEhyubahEhfubhVX)r}r(hUh#jhubhVX -- rr}r(hUh#jhubhVXThe URL to redirect to if registration is not permitted (e.g., if registration is closed). This should be a string suitable for passing as the rr}r(hXThe URL to redirect to if registration is not permitted (e.g., if registration is closed). This should be a string suitable for passing as the h#jhubj)r}r(hX``to``h}r(h]h ]h]h]h!]uh#jhhM]rhVXtorr}r(hUh#jubahEj ubhVX argument to rr}r(hX argument to h#jhubcdocutils.nodes reference r)r}r(hXf`Django's "redirect" shortcut `_h}r(UnameXDjango's "redirect" shortcutUrefurirXDhttp://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirectrh]h]h]h ]h!]uh#jhhM]rhVXDjango's "redirect" shortcutrr}r(hUh#jubahEU referencerubcdocutils.nodes target r)r}r(hXG h}r(Urefurijh]rUdjango-s-redirect-shortcutrah]h]h ]h!]rhauh#jhhM]hEUtargetrubhVX). If not specified, this will default to rr}r(hX). If not specified, this will default to h#jhubj)r}r(hX``registration_disallowed``h}r(h]h ]h]h]h!]uh#jhhM]rhVXregistration_disallowedrr}r(hUh#jubahEj ubhVX.r}r(hX.h#jhubehEh\ubahEj0ubh()r}r(hUh}r(h]h ]h]h]h!]uh#j8hM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(j)r}r(hX extra_contexth}r(h]h ]h]h]h!]uh#jhM]rhVX extra_contextrr}r(hUh#jubahEjubhVX (rr}r(hUh#jubhb)r}r(hUh}r(UreftypejQU reftargetXdictrU refdomainhh]h]U refexplicith]h ]h!]uh#jhM]rhn)r}r(hjh}r(h]h ]h]h]h!]uh#jhM]rhVXdictrr}r(hUh#jubahEhyubahEhfubhVX)r}r(hUh#jubhVX -- rr}r(hUh#jubhVXOptionally, variables to add to the template context. Any callable object in this dictionary will be called to produce the final result which appears in the context.rr}r(hXOptionally, variables to add to the template context. Any callable object in this dictionary will be called to produce the final result which appears in the context.rh#jubehEh\ubahEj0ubh()r}r(hUh}r(h]h ]h]h]h!]uh#j8hM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(j)r}r(hX form_classh}r(h]h ]h]h]h!]uh#jhM]rhVX form_classrr}r(hUh#jubahEjubhVX (rr}r(hUh#jubhVX subclass of rr}r(hX subclass of h#jubj)r}r(hX``django.forms.Form``h}r(h]h ]h]h]h!]uh#jhM]rhVXdjango.forms.Formrr}r(hUh#jubahEj ubhVX)r}r(hUh#jubhVX -- rr}r(hUh#jubhVXHThe form class to use for registration; this should be some subclass of rr}r(hXHThe form class to use for registration; this should be some subclass of h#jubj)r}r(hX``django.forms.Form``h}r(h]h ]h]h]h!]uh#jhM]rhVXdjango.forms.Formrr}r(hUh#jubahEj ubhVX". If not specified, the backend's rr}r(hX". If not specified, the backend's h#jubj)r}r (hX``get_form_class()``h}r (h]h ]h]h]h!]uh#jhM]r hVXget_form_class()r r }r(hUh#jubahEj ubhVX0 method will be called to obtain the form class.rr}r(hX0 method will be called to obtain the form class.h#jubehEh\ubahEj0ubh()r}r(hUh}r(h]h ]h]h]h!]uh#j8hM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(j)r}r(hX success_urlh}r(h]h ]h]h]h!]uh#jhM]rhVX success_urlrr}r (hUh#jubahEjubhVX (r!r"}r#(hUh#jubhb)r$}r%(hUh}r&(UreftypejQU reftargetXstringr'U refdomainhh]h]U refexplicith]h ]h!]uh#jhM]r(hn)r)}r*(hj'h}r+(h]h ]h]h]h!]uh#j$hM]r,hVXstringr-r.}r/(hUh#j)ubahEhyubahEhfubhVX)r0}r1(hUh#jubhVX -- r2r3}r4(hUh#jubh$)r5}r6(hXNThe URL to redirect to after successful registration. This should be a string suitable for passing as the ``to`` argument to `Django's "redirect" shortcut `_. If not specified, the backend's ``post_registration_redirect()`` method will be called to obtain the URL.h#jhDhhEh\h}r7(h]h ]h]h]h!]uhKKphM]r8(hVXjThe URL to redirect to after successful registration. This should be a string suitable for passing as the r9r:}r;(hXjThe URL to redirect to after successful registration. This should be a string suitable for passing as the h#j5ubj)r<}r=(hX``to``h}r>(h]h ]h]h]h!]uh#j5hM]r?hVXtor@rA}rB(hUh#j<ubahEj ubhVX argument to rCrD}rE(hX argument to h#j5ubj)rF}rG(hXf`Django's "redirect" shortcut `_h}rH(UnameXDjango's "redirect" shortcutjXDhttp://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirectrIh]h]h]h ]h!]uh#j5hM]rJhVXDjango's "redirect" shortcutrKrL}rM(hUh#jFubahEjubj)rN}rO(hXG U referencedrPKh#j5hEjh}rQ(UrefurijIh]rRUid3rSah]h]rTXdjango's "redirect" shortcutrUah ]h!]uhM]ubhVX". If not specified, the backend's rVrW}rX(hX". If not specified, the backend's h#j5ubj)rY}rZ(hX ``post_registration_redirect()``h}r[(h]h ]h]h]h!]uh#j5hM]r\hVXpost_registration_redirect()r]r^}r_(hUh#jYubahEj ubhVX) method will be called to obtain the URL.r`ra}rb(hX) method will be called to obtain the URL.h#j5ubeubehEh\ubahEj0ubh()rc}rd(hUh}re(h]h ]h]h]h!]uh#j8hM]rfh$)rg}rh(hUh}ri(h]h ]h]h]h!]uh#jchM]rj(j)rk}rl(hX template_nameh}rm(h]h ]h]h]h!]uh#jghM]rnhVX template_namerorp}rq(hUh#jkubahEjubhVX (rrrs}rt(hUh#jgubhb)ru}rv(hUh}rw(UreftypejQU reftargetXstringrxU refdomainhh]h]U refexplicith]h ]h!]uh#jghM]ryhn)rz}r{(hjxh}r|(h]h ]h]h]h!]uh#juhM]r}hVXstringr~r}r(hUh#jzubahEhyubahEhfubhVX)r}r(hUh#jgubhVX -- rr}r(hUh#jgubhVXPOptional. A custom template name to use. If not specified, this will default to rr}r(hXPOptional. A custom template name to use. If not specified, this will default to h#jgubj)r}r(hX'``registration/registration_form.html``h}r(h]h ]h]h]h!]uh#jghM]rhVX#registration/registration_form.htmlrr}r(hUh#jubahEj ubhVX.r}r(hX.h#jgubehEh\ubahEj0ubehEU bullet_listrubahEU field_bodyrubehEUfieldrubaubeubeubeubhDNhEhh}r(hhXpyrh]h]h]h ]h!]hXfunctionrhjuhKNhLhhM]r(h)r}r(hXWactivate(request, backend[, template_name[, success_url[, extra_context[, **kwargs]]]])h#h?hDhhEhh}r(h]rh ahhh]h]h ]h!]rh ahXactivaterhUhuhKK8hLhhM]r(h)r}r(hXregistration.views.h#jhDhhEhh}r(h]h ]h]h]h!]uhKK8hLhhM]rhVXregistration.views.rr}r(hUh#jubaubh)r}r(hjh#jhDhhEhh}r(h]h ]h]h]h!]uhKK8hLhhM]rhVXactivaterr}r(hUh#jubaubh)r}r(hUh#jhDhhEhh}r(h]h ]h]h]h!]uhKK8hLhhM]r(h)r}r(hXrequesth}r(h]h ]h]h]h!]uh#jhM]rhVXrequestrr}r(hUh#jubahEhubh)r}r(hXbackendh}r(h]h ]h]h]h!]uh#jhM]rhVXbackendrr}r(hUh#jubahEhubh)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(h)r}r(hX template_nameh}r(h]h ]h]h]h!]uh#jhM]rhVX template_namerr}r(hUh#jubahEhubh)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(h)r}r(hX success_urlh}r(h]h ]h]h]h!]uh#jhM]rhVX success_urlrr}r(hUh#jubahEhubh)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]r(h)r}r(hX extra_contexth}r(h]h ]h]h]h!]uh#jhM]rhVX extra_contextrr}r(hUh#jubahEhubh)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]rh)r}r(hX**kwargsh}r(h]h ]h]h]h!]uh#jhM]rhVX**kwargsrr}r(hUh#jubahEhubahEjubehEjubehEjubehEjubeubeubh}r?(hX$ method will be called, passing the h#j/ubj)r@}rA(hX``HttpRequest``h}rB(h]h ]h]h]h!]uh#j/hM]rChVX HttpRequestrDrE}rF(hUh#j@ubahEj ubhVX and the activated rGrH}rI(hX and the activated h#j/ubj)rJ}rK(hX``User``h}rL(h]h ]h]h]h!]uh#j/hM]rMhVXUserrNrO}rP(hUh#jJubahEj ubhVXS to determine the URL to redirect the user to. To override this, pass the argument rQrR}rS(hXS to determine the URL to redirect the user to. To override this, pass the argument h#j/ubj)rT}rU(hX``success_url``h}rV(h]h ]h]h]h!]uh#j/hM]rWhVX success_urlrXrY}rZ(hUh#jTubahEj ubhVX (see below).r[r\}r](hX (see below).h#j/ubeubh$)r^}r_(hXOn unsuccessful activation, will render the template ``registration/activate.html`` to display an error message; to override thise, pass the argument ``template_name`` (see below).h#h(hUh}r?(h]h ]h]h]h!]uh#hhM]r@hVX.Inline strong start-string without end-string.rArB}rC(hUh#j=ubahEh\ubahEUsystem_messagerDubh)rE}rF(hUh}rG(h]UlevelKh]h]rHjSaUsourcehh ]h!]UlineKUtypeUINFOrIuh#jhM]rJh$)rK}rL(hUh}rM(h]h ]h]h]h!]uh#jEhM]rNhVX?Duplicate explicit target name: "django's "redirect" shortcut".rOrP}rQ(hUh#jKubahEh\ubahEjDubeUcurrent_sourcerRNU decorationrSNUautofootnote_startrTKUnameidsrU}rV(hhhhIhjh h h UviewsrWuhM]rX(j)rY}rZ(hX .. _views:h#hhDhhEjh}r[(h]h]h]h ]h!]Urefidr\jWuhKKhLhhM]ubj)r]}r^(hUh#hhDhUexpect_referenced_by_namer_}r`h jYshEjh}ra(h]h]rb(Xmodule-registration.viewsrcjWeh]Uismodh ]h!]rdh auhKKhLhUexpect_referenced_by_idre}rfjWjYshM]ubh})rg}rh(hUh#hhDhhEhh}ri(h]h]h]h ]h!]Uentries]rj(hXregistration.views (module)Xmodule-registration.viewsUtrkauhKKhLhhM]ubhBehUU transformerrlNU footnote_refsrm}rnUrefnamesro}rpUsymbol_footnotesrq]rrUautofootnote_refsrs]rtUsymbol_footnote_refsru]rvU citationsrw]rxhLhU current_lineryNUtransform_messagesrz]r{(h)r|}r}(hUh}r~(h]UlevelKh]h]Usourcehh ]h!]UlineKUtypejIuhM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#j|hM]rhVX+Hyperlink target "views" is not referenced.rr}r(hUh#jubahEh\ubahEjDubh)r}r(hUh}r(h]UlevelKh]h]Usourcehh ]h!]UlineKUtypejIuhM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]rhVX+Hyperlink target "views" is not referenced.rr}r(hUh#jubahEh\ubahEjDubh)r}r(hUh}r(h]UlevelKh]h]Usourcehh ]h!]UlineKzUtypejIuhM]rh$)r}r(hUh}r(h]h ]h]h]h!]uh#jhM]rhVXBHyperlink target "django's "redirect" shortcut" is not referenced.rr}r(hUh#jubahEh\ubahEjDubeUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrKUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhSNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerU?/Users/james/dev/hg/personal/django-registration/docs/views.rstrUgettext_compactrU generatorrNUdump_internalsrNU pep_base_urlrUhttp://www.python.org/dev/peps/rUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrKU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhjWj]hIhBh jhcdocutils.nodes problematic r)r}r(hX**h}r(h]rhah]h]h ]h!]Urefidhuh#j+)r}r(hXparam **kwargsh}r(h]h ]h]h]h!]uh#h4)r}r(hUh#h8)r}r(hUh#h(j+)r?}r@(hXtype extra_contextrAh}rB(h]h ]h]h]h!]uh#j;hM]rChVXtype extra_contextrDrE}rF(hjAh#j?ubahEj3ubh0)rG}rH(hXdictrIh}rJ(h]h ]h]h]h!]uh#j;hM]rKh$)rL}rM(hjIh#jGhDhhEh\h}rN(h]h ]h]h]h!]uhKK/hM]rOhVXdictrPrQ}rR(hjIh#jLubaubahEjubeubh4)rS}rT(hUh#jhDhhEjh}rU(h]h ]h]h]h!]uhKK0hLhhM]rV(j+)rW}rX(hXparam template_namerYh}rZ(h]h ]h]h]h!]uh#jShM]r[hVXparam template_namer\r]}r^(hjYh#jWubahEj3ubh0)r_}r`(hXoOptional. A custom template name to use. If not specified, this will default to ``registration/activate.html``.h}ra(h]h ]h]h]h!]uh#jShM]rbh$)rc}rd(hXoOptional. A custom template name to use. If not specified, this will default to ``registration/activate.html``.h#j_hDhhEh\h}re(h]h ]h]h]h!]uhKK0hM]rf(jjjeubahEjubeubh4)rg}rh(hUh#jhDhhEjh}ri(h]h ]h]h]h!]uhKK3hLhhM]rj(j+)rk}rl(hXtype template_namermh}rn(h]h ]h]h]h!]uh#jghM]rohVXtype template_namerprq}rr(hjmh#jkubahEj3ubh0)rs}rt(hXstringruh}rv(h]h ]h]h]h!]uh#jghM]rwh$)rx}ry(hjuh#jshDhhEh\h}rz(h]h ]h]h]h!]uhKK3hM]r{hVXstringr|r}}r~(hjuh#jxubaubahEjubeubjeubhDhhEjh}r(h]h ]h]h]h!]uhKK4hLhhM]r(jh0)r}r(hXAny keyword arguments captured from the URL, such as an activation key, which will be passed to the backend's ``activate()`` method.h}r(h]h ]h]h]h!]uh#jhM]r(hj+ehEjubeubhM]r(hVXparam rr}r(hXparam h#jubjhVXkwargsrr}r(hXkwargsh#jubehEj3ubhM]rhVX**rr}r(hUh#jubahEU problematicrubjSjNjcj]jjhhuUsubstitution_namesr}rhEhLh}r(h]h]h]Usourcehh ]h!]uU footnotesr]rUrefidsr}rjW]rjYasub.django-registration-1.0/docs/_build/html/0000755000076700007670000000000012157545727020733 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/html/.buildinfo0000644000076700007670000000034611733413133022672 0ustar jamesjames00000000000000# Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. config: 48145152c8af5312ea76cc0685b415a6 tags: fbb0d17656682115ca4d033fb2f83ba1 django-registration-1.0/docs/_build/html/_sources/0000755000076700007670000000000012157545727022555 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/html/_sources/backend-api.txt0000644000076700007670000001753511264555224025456 0ustar jamesjames00000000000000.. _backend-api: User registration backends ========================== At its core, django-registration is built around the idea of pluggable backends which can implement different workflows for user registration. Although :ref:`the default backend ` uses a common two-phase system (registration followed by activation), backends are generally free to implement any workflow desired by their authors. This is deliberately meant to be complementary to Django's own `pluggable authentication backends `_; a site which uses an OpenID authentication backend, for example, can and should make use of a registration backend which handles signups via OpenID. And, like a Django authentication backend, a registration backend is simply a class which implements a particular standard API (described below). This allows for a great deal of flexibility in the actual workflow of registration; backends can, for example, implement any of the following (not an exhaustive list): * One-step (register, and done) or multi-step (register and activate) signup. * Invitation-based registration. * Selectively allowing or disallowing registration (e.g., by requiring particular credentials to register). * Enabling/disabling registration entirely. * Registering via sources other than a standard username/password, such as OpenID. * Selective customization of the registration process (e.g., using different forms or imposing different requirements for different types of users). Specifying the backend to use ----------------------------- To determine which backend to use, the :ref:`views in django-registration ` accept a keyword argument ``backend``; in all cases, this should be a string containing the full dotted Python import path to the backend class to be used. So, for example, to use the default backend, you'd pass the string ``'registration.backends.default.DefaultBackend'`` as the value of the ``backend`` argument (and the default URLconf included with that backend does so). The specified backend class will then be imported and instantiated (by calling its constructor with no arguments), and the resulting instance will be used for all backend-specific functionality. If the specified backend class cannot be imported, django-registration will raise ``django.core.exceptions.ImproperlyConfigured``. Backend API ----------- To be used as a registration backend, a class must implement the following methods. For many cases, subclassing the default backend and selectively overriding behavior will be suitable, but for other situations (e.g., workflows significantly different from the default) a full implementation is needed. register(request, \*\*kwargs) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This method implements the logic of actually creating the new user account. Often, but not necessarily always, this will involve creating an instance of ``django.contrib.auth.models.User`` from the supplied data. This method will only be called after a signup form has been displayed, and the data collected by the form has been properly validated. Arguments to this method are: ``request`` The Django `HttpRequest `_ object in which a new user is attempting to register. ``**kwargs`` A dictionary of the ``cleaned_data`` from the signup form. After creating the new user account, this method should create or obtain an instance of ``django.contrib.auth.models.User`` representing that account. It should then send the signal :data:`registration.signals.user_registered`, with three arguments: ``sender`` The backend class (e.g., ``self.__class__``). ``user`` The ``User`` instance representing the new account. ``request`` The ``HttpRequest`` in which the user registered. Finally, this method should return the ``User`` instance. activate(request, \*\*kwargs) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For workflows which require a separate activation step, this method should implement the necessary logic for account activation. Arguments to this method are: ``request`` The Django ``HttpRequest`` object in which the account is being activated. ``**kwargs`` A dictionary of any additional arguments (e.g., information captured from the URL, such as an activation key) received by the :func:`~registration.views.activate` view. The combination of the ``HttpRequest`` and this additional information must be sufficient to identify the account which will be activated. If the account cannot be successfully activated (for example, in the default backend if the activation period has expired), this method should return ``False``. If the account is successfully activated, this method should create or obtain an instance of ``django.contrib.auth.models.User`` representing the activated account. It should then send the signal :data:`registration.signals.user_activated`, with three arguments: ``sender`` The backend class. ``user`` The ``User`` instance representing the activated account. ``request`` The ``HttpRequest`` in which the user activated. This method should then return the ``User`` instance. For workflows which do not require a separate activation step, this method can and should raise ``NotImplementedError``. registration_allowed(request) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This method returns a boolean value indicating whether the given ``HttpRequest`` is permitted to register a new account (``True`` if registration is permitted, ``False`` otherwise). It may determine this based on some aspect of the ``HttpRequest`` (e.g., the presence or absence of an invitation code in the URL), based on a setting (in the default backend, a setting can be used to disable registration), information in the database or any other information it can access. Arguments to this method are: ``request`` The Django ``HttpRequest`` object in which a new user is attempting to register. If this method returns ``False``, the :func:`~registration.views.register` view will not display a form for account creation; instead, it will issue a redirect to a URL explaining that registration is not permitted. get_form_class(request) ~~~~~~~~~~~~~~~~~~~~~~~ This method should return a form class -- a subclass of ``django.forms.Form`` -- suitable for use in registering users with this backend. As such, it should collect and validate any information required by the backend's ``register`` method. Arguments to this method are: ``request`` The Django ``HttpRequest`` object in which a new user is attempting to register. post_registration_redirect(request, user) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This method should return a location to which the user will be redirected after successful registration. This should be a tuple of ``(to, args, kwargs)``, suitable for use as the arguments to `Django's "redirect" shortcut `_. Arguments to this method are: ``request`` The Django ``HttpRequest`` object in which the user registered. ``user`` The ``User`` instance representing the new user account. post_activation_redirect(request, user) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For workflows which require a separate activation step, this method should return a location to which the user will be redirected after successful activation. This should be a tuple of ``(to, args, kwargs)``, suitable for use as the arguments to `Django's "redirect" shortcut `_. Arguments to this method are: ``request`` The Django ``HttpRequest`` object in which the user activated. ``user`` The ``User`` instance representing the activated user account. For workflows which do not require a separate activation step, this method can and should raise ``NotImplementedError``. django-registration-1.0/docs/_build/html/_sources/default-backend.txt0000644000076700007670000002222511264556062026322 0ustar jamesjames00000000000000.. _default-backend: .. module:: registration.backends.default The default backend =================== A default :ref:`registration backend ` is bundled with django-registration, as the class ``registration.backends.default.DefaultBackend``, and implements a simple two-step workflow in which a new user first registers, then confirms and activates the new account by following a link sent to the email address supplied during registration. Default behavior and configuration ---------------------------------- This backend makes use of the following settings: ``ACCOUNT_ACTIVATION_DAYS`` This is the number of days users will have to activate their accounts after registering. Failing to activate during that period will leave the account inactive (and possibly subject to deletion). This setting is required, and must be an integer. ``REGISTRATION_OPEN`` A boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. This setting is optional, and a default of ``True`` will be assumed if it is not supplied. By default, this backend uses :class:`registration.forms.RegistrationForm` as its form class for user registration; this can be overridden by passing the keyword argument ``form_class`` to the :func:`~registration.views.register` view. Upon successful registration -- not activation -- the default redirect is to the URL pattern named ``registration_complete``; this can be overridden by passing the keyword argument ``success_url`` to the :func:`~registration.views.register` view. Upon successful activation, the default redirect is to the URL pattern named ``registration_activation_complete``; this can be overridden by passing the keyword argument ``success_url`` to the :func:`~registration.views.activate` view. How account data is stored for activation ----------------------------------------- During registration, a new instance of ``django.contrib.auth.models.User`` is created to represent the new account, with the ``is_active`` field set to ``False``. An email is then sent to the email address of the account, containing a link the user must click to activate the account; at that point the ``is_active`` field is set to ``True``, and the user may log in normally. Activation is handled by generating and storing an activation key in the database, using the following model: .. currentmodule:: registration.models .. class:: RegistrationProfile A simple representation of the information needed to activate a new user account. This is **not** a user profile; it simply provides a place to temporarily store the activation key and determine whether a given account has been activated. Has the following fields: .. attribute:: user A ``ForeignKey`` to ``django.contrib.auth.models.User``, representing the user account for which activation information is being stored. .. attribute:: activation_key A 40-character ``CharField``, storing the activation key for the account. Initially, the activation key is the hexdigest of a SHA1 hash; after activation, this is reset to :attr:`ACTIVATED`. Additionally, one class attribute exists: .. attribute:: ACTIVATED A constant string used as the value of :attr:`activation_key` for accounts which have been activated. And the following methods: .. method:: activation_key_expired() Determines whether this account's activation key has expired, and returns a boolean (``True`` if expired, ``False`` otherwise). Uses the following algorithm: 1. If :attr:`activation_key` is :attr:`ACTIVATED`, the account has already been activated and so the key is considered to have expired. 2. Otherwise, the date of registration (obtained from the ``date_joined`` field of :attr:`user`) is compared to the current date; if the span between them is greater than the value of the setting ``ACCOUNT_ACTIVATION_DAYS``, the key is considered to have expired. :rtype: bool .. method:: send_activation_email(site) Sends an activation email to the address of the account. The activation email will make use of two templates: ``registration/activation_email_subject.txt`` and ``registration/activation_email.txt``, which are used for the subject of the email and the body of the email, respectively. Each will receive the following context: ``activation_key`` The value of :attr:`activation_key`. ``expiration_days`` The number of days the user has to activate, taken from the setting ``ACCOUNT_ACTIVATION_DAYS``. ``site`` An object representing the site on which the account was registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. Because email subjects must be a single line of text, the rendered output of ``registration/activation_email_subject.txt`` will be forcibly condensed to a single line. :param site: An object representing the site on which account was registered. :type site: ``django.contrib.sites.models.Site`` or ``django.contrib.sites.models.RequestSite`` :rtype: ``None`` Additionally, :class:`RegistrationProfile` has a custom manager (accessed as ``RegistrationProfile.objects``): .. class:: RegistrationManager This manager provides several convenience methods for creating and working with instances of :class:`RegistrationProfile`: .. method:: activate_user(activation_key) Validates ``activation_key`` and, if valid, activates the associated account by setting its ``is_active`` field to ``True``. To prevent re-activation of accounts, the :attr:`~RegistrationProfile.activation_key` of the :class:`RegistrationProfile` for the account will be set to :attr:`RegistrationProfile.ACTIVATED` after successful activation. Returns the ``User`` instance representing the account if activation is successful, ``False`` otherwise. :param activation_key: The activation key to use for the activation. :type activation_key: string, a 40-character SHA1 hexdigest :rtype: ``User`` or bool .. method:: delete_expired_users Removes expired instances of :class:`RegistrationProfile`, and their associated user accounts, from the database. This is useful as a periodic maintenance task to clean out accounts which registered but never activated. Accounts to be deleted are identified by searching for instances of :class:`RegistrationProfile` with expired activation keys and with associated user accounts which are inactive (have their ``is_active`` field set to ``False``). To disable a user account without having it deleted, simply delete its associated :class:`RegistrationProfile`; any ``User`` which does not have an associated :class:`RegistrationProfile` will not be deleted. A custom management command is provided which will execute this method, suitable for use in cron jobs or other scheduled maintenance tasks: ``manage.py cleanupregistration``. :rtype: ``None`` .. method:: create_inactive_user(username, email, password, site[, send_email]) Creates a new, inactive user account and an associated instance of :class:`RegistrationProfile`, sends the activation email and returns the new ``User`` object representing the account. :param username: The username to use for the new account. :type username: string :param email: The email address to use for the new account. :type email: string :param password: The password to use for the new account. :type password: string :param site: An object representing the site on which the account is being registered. :type site: ``django.contrib.sites.models.Site`` or ``django.contrib.sites.models.RequestSite`` :param send_email: If ``True``, the activation email will be sent to the account (by calling :meth:`RegistrationProfile.send_activation_email`). If ``False``, no email will be sent (but the account will still be inactive) :type send_email: bool :rtype: ``User`` .. method:: create_profile(user) Creates and returns a :class:`RegistrationProfile` instance for the account represented by ``user``. The ``RegistrationProfile`` created by this method will have its :attr:`~RegistrationProfile.activation_key` set to a SHA1 hash generated from a combination of the account's username and a random salt. :param user: The user account; an instance of ``django.contrib.auth.models.User``. :type user: ``User`` :rtype: ``RegistrationProfile`` django-registration-1.0/docs/_build/html/_sources/faq.txt0000644000076700007670000002130611264557260024060 0ustar jamesjames00000000000000.. _faq: Frequently-asked questions ========================== The following are miscellaneous common questions and answers related to installing/using django-registration, culled from bug reports, emails and other sources. General ------- **What license is django-registration under?** django-registration is offered under a three-clause BSD-style license; this is `an OSI-approved open-source license `_, and allows you a large degree of freedom in modifiying and redistributing the code. For the full terms, see the file ``LICENSE`` which came with your copy of django-registration; if you did not receive a copy of this file, you can view it online at . **Why are the forms and models for the default backend not in the default backend?** The model and manager used by :ref:`the default backend ` are in ``registration.models``, and the default form class (and various subclasses) are in ``registration.forms``; logically, they might be expected to exist in ``registration.backends.default``, but there are several reasons why that's not such a good idea: 1. Older versions of django-registration made use of the model and form classes, and moving them would create an unnecessary backwards incompatibility: ``import`` statements would need to be changed, and some database updates would be needed to reflect the new location of the :class:`~registration.models.RegistrationProfile` model. 2. Due to the design of Django's ORM, the ``RegistrationProfile`` model would end up with an ``app_label`` of ``default``, which isn't particularly descriptive and may conflict with other applications. By keeping it in ``registration.models``, it retains an ``app_label`` of ``registration``, which more accurately reflects what it does and is less likely to cause problems. 3. Although the ``RegistrationProfile`` model and the various :ref:`form classes ` are used by the default backend, they can and are meant to be reused as needed by other backends. Any backend which uses an activation step should feel free to reuse the ``RegistrationProfile`` model, for example, and the registration form classes are in no way tied to a specific backend (and cover a number of common use cases which will crop up regardless of the specific backend logic in use). Installation and setup ---------------------- **How do I install django-registration?** Full instructions are available in :ref:`the quick start guide `. **Do I need to put a copy of django-registration in every project I use it in?** No; putting applications in your project directory is a very bad habit, and you should stop doing it. If you followed the instructions mentioned above, django-registration was installed into a location that's on your Python import path, so you'll only ever need to add ``registration`` to your ``INSTALLED_APPS`` setting (in any project, or in any number of projects), and it will work. **Does django-registration come with any sample templates I can use right away?** No, for two reasons: 1. Providing default templates with an application is generally hard to impossible, because different sites can have such wildly different design and template structure. Any attempt to provide templates which would work with all the possibilities would probably end up working with none of them. 2. A number of things in django-registration depend on the specific :ref:`registration backend ` you use, including the variables which end up in template contexts. Since django-registration has no way of knowing in advance what backend you're going to be using, it also has no way of knowing what your templates will need to look like. Fortunately, however, django-registration has good documentation which explains what context variables will be available to templates, and so it should be easy for anyone who knows Django's template system to create templates which integrate with their own site. Configuration ------------- **Do I need to rewrite the views to change the way they behave?** No. There are several ways you can customize behavior without making any changes whatsoever: * Pass custom arguments -- e.g., to specify forms, template names, etc. -- to :ref:`the registration views `. * Use the :ref:`signals ` sent by the views to add custom behavior. * Write a custom :ref:`registration backend ` which implements the behavior you need, and have the views use your backend. If none of these are sufficient, your best option is likely to simply write your own views; however, it is hoped that the level of customization exposed by these options will be sufficient for nearly all user-registration workflows. **How do I pass custom arguments to the views?** Part 3 of the official Django tutorial, when it `introduces generic views `_, covers the necessary mechanism: simply provide a dictionary of keyword arguments in your URLconf. **Does that mean I should rewrite django-registration's default URLconf?** No; if you'd like to pass custom arguments to the registration views, simply write and include your own URLconf instead of including the default one provided with django-registration. **I don't want to write my own URLconf because I don't want to write patterns for all the auth views!** You're in luck, then; django-registration provides a URLconf which *only* contains the patterns for the auth views, and which you can include in your own URLconf anywhere you'd like; it lives at ``registration.auth_urls``. **I don't like the names you've given to the URL patterns!** In that case, you should feel free to set up your own URLconf which uses the names you want. Troubleshooting --------------- **I've got functions listening for the registration/activation signals, but they're not getting called!** The most common cause of this is placing django-registration in a sub-directory that's on your Python import path, rather than installing it directly onto the import path as normal. Importing from django-registration in that case can cause various issues, including incorrectly connecting signal handlers. For example, if you were to place django-registration inside a directory named ``django_apps``, and refer to it in that manner, you would end up with a situation where your code does this:: from django_apps.registration.signals import user_registered But django-registration will be doing:: from registration.signals import user_registered From Python's point of view, these import statements refer to two different objects in two different modules, and so signal handlers connected to the signal from the first import will not be called when the signal is sent using the second import. To avoid this problem, follow the standard practice of installing django-registration directly on your import path and always referring to it by its own module name: ``registration`` (and in general, it is always a good idea to follow normal Python practices for installing and using Django applications). Tips and tricks --------------- **How do I log a user in immediately after registration or activation?** You can most likely do this simply by writing a function which listens for the appropriate :ref:`signal `; your function should set the ``backend`` attribute of the user to the correct authentication backend, and then call ``django.contrib.auth.login()`` to log the user in. **How do I re-send an activation email?** Assuming you're using :ref:`the default backend `, a `custom admin action `_ is provided for this; in the admin for the :class:`~registration.models.RegistrationProfile` model, simply click the checkbox for the user(s) you'd like to re-send the email for, then select the "Re-send activation emails" action. **How do I manually activate a user?** In the default backend, a custom admin action is provided for this. In the admin for the ``RegistrationProfile`` model, click the checkbox for the user(s) you'd like to activate, then select the "Activate users" action.django-registration-1.0/docs/_build/html/_sources/forms.txt0000644000076700007670000000550611263617413024437 0ustar jamesjames00000000000000.. _forms: .. module:: registration.forms Forms for user registration =========================== Several form classes are provided with django-registration, covering common cases for gathering account information and implementing common constraints for user registration. These forms were designed with django-registration's :ref:`default backend ` in mind, but may also be useful in other situations. .. class:: RegistrationForm A simple form for registering an account. Has the following fields, all of which are required: ``username`` The username to use for the new account. This is represented as a text input which validates that the username is unique, consists entirely of alphanumeric characters and underscores and is at most 30 characters in length. ``email`` The email address to use for the new account. This is represented as a text input which accepts email addresses up to 75 characters in length. ``password1`` The password to use for the new account. This represented as a password input (``input type="password"`` in the rendered HTML). ``password2`` The password to use for the new account. This represented as a password input (``input type="password"`` in the rendered HTML). The constraints on usernames and email addresses match those enforced by Django's default authentication backend for instances of ``django.contrib.auth.models.User``. The repeated entry of the password serves to catch typos. Because it does not apply to any single field of the form, the validation error for mismatched passwords is attached to the form itself, and so must be accessed via the form's ``non_field_errors()`` method. .. class:: RegistrationFormTermsOfService A subclass of :class:`RegistrationForm` which adds one additional, required field: ``tos`` A checkbox indicating agreement to the site's terms of service/user agreement. .. class:: RegistrationFormUniqueEmail A subclass of :class:`RegistrationForm` which enforces uniqueness of email addresses in addition to uniqueness of usernames. .. class:: RegistrationFormNoFreeEmail A subclass of :class:`RegistrationForm` which disallows registration using addresses from some common free email providers. This can, in some cases, cut down on automated registration by spambots. By default, the following domains are disallowed for email addresses: * ``aim.com`` * ``aol.com`` * ``email.com`` * ``gmail.com`` * ``googlemail.com`` * ``hotmail.com`` * ``hushmail.com`` * ``msn.com`` * ``mail.ru`` * ``mailinator.com`` * ``live.com`` * ``yahoo.com`` To change this, subclass this form and set the class attribute ``bad_domains`` to a list of domains you wish to disallow. django-registration-1.0/docs/_build/html/_sources/index.txt0000644000076700007670000000351111342420545024406 0ustar jamesjames00000000000000.. django-registration documentation master file, created by sphinx-quickstart on Mon Jun 22 02:57:42 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. django-registration 0.8 documentation ===================================== This documentation covers the 0.8 release of django-registration, a simple but extensible application providing user registration functionality for `Django `_-powered websites. Although nearly all aspects of the registration process are customizable, the default setup of django-registration attempts to cover the most common use case: two-phase registration, consisting of initial signup followed by a confirmation email which contains instructions for activating the new account. To get up and running quickly, consult the :ref:`quick-start guide `, which describes all the necessary steps to install django-registration and configure it for the default workflow. For more detailed information, including how to customize the registration process (and support for alternate registration systems), read through the documentation listed below. If you are upgrading from a previous release, please read the :ref:`upgrade guide ` for information on what's changed. Contents: .. toctree:: :maxdepth: 1 quickstart release-notes upgrade backend-api default-backend simple-backend forms views signals faq .. seealso:: * `Django's authentication documentation `_; Django's authentication system is used by django-registration's default configuration. * `django-profiles `_, an application which provides simple user-profile management. django-registration-1.0/docs/_build/html/_sources/quickstart.txt0000644000076700007670000002641111263617413025501 0ustar jamesjames00000000000000.. _quickstart: Quick start guide ================= Before installing django-registration, you'll need to have a copy of `Django `_ already installed. For the |version| release, Django 1.1 or newer is required. For further information, consult the `Django download page `_, which offers convenient packaged downloads and installation instructions. Installing django-registration ------------------------------ There are several ways to install django-registration: * Automatically, via a package manager. * Manually, by downloading a copy of the release package and installing it yourself. * Manually, by performing a Mercurial checkout of the latest code. It is also highly recommended that you learn to use `virtualenv `_ for development and deployment of Python software; ``virtualenv`` provides isolated Python environments into which collections of software (e.g., a copy of Django, and the necessary settings and applications for deploying a site) can be installed, without conflicting with other installed software. This makes installation, testing, management and deployment far simpler than traditional site-wide installation of Python packages. Automatic installation via a package manager ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Several automatic package-installation tools are available for Python; the most popular are `easy_install `_ and `pip `_. Either can be used to install django-registration. Using ``easy_install``, type:: easy_install -Z django-registration Note that the ``-Z`` flag is required, to tell ``easy_install`` not to create a zipped package; zipped packages prevent certain features of Django from working properly. Using ``pip``, type:: pip install django-registration It is also possible that your operating system distributor provides a packaged version of django-registration (for example, `Debian GNU/Linux `_ provides a package, installable via ``apt-get-install python-django-registration``). Consult your operating system's package list for details, but be aware that third-party distributions may be providing older versions of django-registration, and so you should consult the documentation which comes with your operating system's package. Manual installation from a downloaded package ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you prefer not to use an automated package installer, you can download a copy of django-registration and install it manually. The latest release package can be downloaded from `django-registration's listing on the Python Package Index `_. Once you've downloaded the package, unpack it (on most operating systems, simply double-click; alternately, type ``tar zxvf django-registration-0.8.tar.gz`` at a command line on Linux, Mac OS X or other Unix-like systems). This will create the directory ``django-registration-0.8``, which contains the ``setup.py`` installation script. From a command line in that directory, type:: python setup.py install Note that on some systems you may need to execute this with administrative privileges (e.g., ``sudo python setup.py install``). Manual installation from a Mercurial checkout ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you'd like to try out the latest in-development code, you can obtain it from the django-registration repository, which is hosted at `Bitbucket `_ and uses `Mercurial `_ for version control. To obtain the latest code and documentation, you'll need to have Mercurial installed, at which point you can type:: hg clone http://bitbucket.org/ubernostrum/django-registration/ You can also obtain a copy of a particular release of django-registration by specifying the ``-r`` argument to ``hg clone``; each release is given a tag of the form ``vX.Y``, where "X.Y" is the release number. So, for example, to check out a copy of the 0.8 release, type:: hg clone -r v0.8 http://bitbucket.org/ubernostrum/django-registration/ In either case, this will create a copy of the django-registration Mercurial repository on your computer; you can then add the ``django-registration`` directory inside the checkout your Python import path, or use the ``setup.py`` script to install as a package. Basic configuration and use --------------------------- Once installed, you can add django-registration to any Django-based project you're developing. The default setup will enable user registration with the following workflow: 1. A user signs up for an account by supplying a username, email address and password. 2. From this information, a new ``User`` object is created, with its ``is_active`` field set to ``False``. Additionally, an activation key is generated and stored, and an email is sent to the user containing a link to click to activate the account. 3. Upon clicking the activation link, the new account is made active (the ``is_active`` field is set to ``True``); after this, the user can log in. Note that the default workflow requires ``django.contrib.auth`` to be installed, and it is recommended that ``django.contrib.sites`` be installed as well. You will also need to have a working mail server (for sending activation emails), and provide Django with the necessary settings to make use of this mail server (consult `Django's email-sending documentation `_ for details). Required settings ~~~~~~~~~~~~~~~~~ Begin by adding ``registration`` to the ``INSTALLED_APPS`` setting of your project, and specifying one additional setting: ``ACCOUNT_ACTIVATION_DAYS`` This is the number of days users will have to activate their accounts after registering. If a user does not activate within that period, the account will remain permanently inactive and may be deleted by maintenance scripts provided in django-registration. For example, you might have something like the following in your Django settings file:: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.sites', 'registration', # ...other installed applications... ) ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value. Once you've done this, run ``manage.py syncdb`` to install the model used by the default setup. Setting up URLs ~~~~~~~~~~~~~~~ The :ref:`default backend ` includes a Django ``URLconf`` which sets up URL patterns for :ref:`the views in django-registration `, as well as several useful views in ``django.contrib.auth`` (e.g., login, logout, password change/reset). This ``URLconf`` can be found at ``registration.backends.default.urls``, and so can simply be included in your project's root URL configuration. For example, to place the URLs under the prefix ``/accounts/``, you could add the following to your project's root ``URLconf``:: (r'^accounts/', include('registration.backends.default.urls')), Users would then be able to register by visiting the URL ``/accounts/register/``, login (once activated) at ``/accounts/login/``, etc. Required templates ~~~~~~~~~~~~~~~~~~ In the default setup, you will need to create several templates required by django-registration, and possibly additional templates required by views in ``django.contrib.auth``. The templates requires by django-registration are as follows; note that, with the exception of the templates used for account activation emails, all of these are rendered using a ``RequestContext`` and so will also receive any additional variables provided by `context processors `_. **registration/registration_form.html** Used to show the form users will fill out to register. By default, has the following context: ``form`` The registration form. This will be an instance of some subclass of ``django.forms.Form``; consult `Django's forms documentation `_ for information on how to display this in a template. **registration/registration_complete.html** Used after successful completion of the registration form. This template has no context variables of its own, and should simply inform the user that an email containing account-activation information has been sent. **registration/activate.html** Used if account activation fails. With the default setup, has the following context: ``activation_key`` The activation key used during the activation attempt. **registration/activation_complete.html** Used after successful account activation. This template has no context variables of its own, and should simply inform the user that their account is now active. **registration/activation_email_subject.txt** Used to generate the subject line of the activation email. Because the subject line of an email must be a single line of text, any output from this template will be forcibly condensed to a single line before being used. This template has the following context: ``activation_key`` The activation key for the new account. ``expiration_days`` The number of days remaining during which the account may be activated. ``site`` An object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. **registration/activation_email.txt** Used to generate the body of the activation email. Should display a link the user can click to activate the account. This template has the following context: ``activation_key`` The activation key for the new account. ``expiration_days`` The number of days remaining during which the account may be activated. ``site`` An object representing the site on which the user registered; depending on whether ``django.contrib.sites`` is installed, this may be an instance of either ``django.contrib.sites.models.Site`` (if the sites application is installed) or ``django.contrib.sites.models.RequestSite`` (if not). Consult `the documentation for the Django sites framework `_ for details regarding these objects' interfaces. Note that the templates used to generate the account activation email use the extension ``.txt``, not ``.html``. Due to widespread antipathy toward and interoperability problems with HTML email, django-registration defaults to plain-text email, and so these templates should simply output plain text rather than HTML. To make use of the views from ``django.contrib.auth`` (which are set up for you by the default URLconf mentioned above), you will also need to create the templates required by those views. Consult `the documentation for Django's authentication system `_ for details regarding these templates. django-registration-1.0/docs/_build/html/_sources/release-notes.txt0000644000076700007670000000474011342420534026050 0ustar jamesjames00000000000000.. _release-notes: Release notes ============= The |version| release of django-registration represents a complete rewrite of the previous codebase, and as such introduces a number of new features and greatly enhances the flexibility and customizability of django-registration. This document summarizes those features; for a list of changes which impact existing installations, consult :ref:`the upgrade guide `. The backend system ------------------ The largest overall change consists of factoring out the logic of user registration into pluggable/swappable backend classes. The :ref:`registration views ` now accept a (required) argument, ``backend``, which indicates the backend class to use, and that class has full control over the registration (and, if needed, activation) process, including: * Determining whether registration will be allowed at all, on a per-request basis. * Specifying a form class to use for account registration. * Implementing the actual process of account creation. * Determining whether a separate activation step is needed, and if so what it will entail. * Specifying actions to take (e.g., redirects, automatic login, etc.) following successful registration or activation. For full details, see the documentation for :ref:`the backend API `. The workflow used by previous releases of django-registration (two-step registration/activation) has been implemented using this system, and is shipped as :ref:`the default backend ` in django-registration |version|. Other new features ------------------ An alternate :ref:`one-step registration system ` is provided, for use by sites which do not require a two-step registration/activation system. During the registration and (optional) activation process, :ref:`custom signals ` are now sent, allowing easy injection of custom processing into the registration workflow without needing to write a full backend. The default backend now supplies several `custom admin actions `_ to make the process of administering a site with django-registration simpler. The :func:`~registration.views.activate` view now supplies any captured keyword arguments from the URL (in the case of the default backend, this is the activation key) to its template in case of unsuccessful activation; this greatly simplifies the process of determining why activation failed and displaying appropriate error messages. django-registration-1.0/docs/_build/html/_sources/signals.txt0000644000076700007670000000352411263617413024747 0ustar jamesjames00000000000000.. _signals: .. module:: registration.signals Custom signals used by django-registration ========================================== Much of django-registration's customizability comes through the ability to write and use :ref:`registration backends ` implementing different workflows for user registration. However, there are many cases where only a small bit of additional logic needs to be injected into the registration process, and writing a custom backend to support this represents an unnecessary amount of work. A more lightweight customization option is provided through two custom signals which backends are required to send at specific points during the registration process; functions listening for these signals can then add whatever logic is needed. For general documentation on signals and the Django dispatcher, consult `Django's signals documentation `_. This documentation assumes that you are familiar with how signals work and the process of writing and connecting functions which will listen for signals. .. data:: user_activated Sent when a user account is activated (not applicable to all backends). Provides the following arguments: ``sender`` The backend class used to activate the user. ``user`` An instance of ``django.contrib.auth.models.User`` representing the activated account. ``request`` The ``HttpRequest`` in which the account was activated. .. data:: user_registered Sent when a new user account is registered. Provides the following arguments: ``sender`` The backend class used to register the account. ``user`` An instance of ``django.contrib.auth.models.User`` representing the new account. ``request`` The ``HttpRequest`` in which the new account was registered. django-registration-1.0/docs/_build/html/_sources/simple-backend.txt0000644000076700007670000000442211342417110026151 0ustar jamesjames00000000000000.. _simple-backend: .. module:: registration.backends.simple The "simple" (one-step) backend =============================== As an alternative to :ref:`the default backend `, and an example of writing :ref:`registration backends `, django-registration bundles a one-step registration system in ``registration.backend.simple``. This backend's workflow is deliberately as simple as possible: 1. A user signs up by filling out a registration form. 2. The user's account is created and is active immediately, with no intermediate confirmation or activation step. 3. The new user is logged in immediately. Configuration ------------- To use this backend, simply include the URLconf ``registration.backends.simple.urls`` somewhere in your site's own URL configuration. For example:: (r'^accounts/', include('registration.backends.simple.urls')), No additional settings are required, but one optional setting is supported: ``REGISTRATION_OPEN`` A boolean (either ``True`` or ``False``) indicating whether registration of new accounts is currently permitted. A default of ``True`` will be assumed if this setting is not supplied. Upon successful registration, the default redirect is to the URL specified by the ``get_absolute_url()`` method of the newly-created ``User`` object; by default, this will be ``/users//``, although it can be overridden in either of two ways: 1. Specify a custom URL pattern for the :func:`~registration.views.register` view, passing the keyword argument ``success_url``. 2. Override the default ``get_absolute_url()`` of the ``User`` model in your Django configuration, as covered in `Django's settings documentation `_. The default form class used for account registration will be :class:`registration.forms.RegistrationForm`, although this can be overridden by supplying a custom URL pattern for the ``register()`` view and passing the keyword argument ``form_class``. Note that because this backend does not use an activation step, attempting to use the :func:`~registration.views.activate` view with this backend or calling the backend's ``activate()`` or ``post_activation_redirect()`` methods will raise ``NotImplementedError``. django-registration-1.0/docs/_build/html/_sources/upgrade.txt0000644000076700007670000001237311733412635024741 0ustar jamesjames00000000000000.. _upgrade: Upgrade guide ============= The |version| release of django-registration represents a complete rewrite of the previous codebase, and introduces several new features which greatly enhance the customizability and extensibility of django-registration. Whenever possible, changes were made in ways which preserve backwards compatibility with previous releases, but some changes to existing installations will still be required in order to upgrade to |version|. This document provides a summary of those changes, and of the new features available in the |version| release. Django version requirement -------------------------- As of |version|, django-registration requires Django 1.3 or newer; older Django releases may work, but are officially unsupported. Backwards-incompatible changes ------------------------------ If you're upgrading from an older release of django-registration, and if you were using the default setup (i.e., the included default URLconf and no custom URL patterns or custom arguments to views), most things will continue to work as normal (although you will need to create one new template; see the section on views below). However, the old default URLconf has been deprecated and will be removed in version 1.0 of django-registration, so it is recommended that you begin migrating now. To do so, change any use of ``registration.urls`` to ``registration.backends.default.urls``. For example, if you had the following in your root URLconf:: (r'^accounts/', include('registration.urls')), you should change it to:: (r'^accounts/', include('registration.backends.default.urls')), The older include will continue to work until django-registration 1.0; in |version| it raises a ``PendingDeprecationWarning`` (which is ignored by default in Python), in 0.9 it will raise ``DeprecationWarning`` (which will begin printing warning messages on import) and in 1.0 it will be removed entirely. Changes to registration views ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :ref:`The views used to handle user registration ` have changed significantly as of django-registration |version|. Both views now require the keyword argument ``backend``, which specifies the :ref:`registration backend ` to use, and so any URL pattern for these views must supply that argument. The URLconf provided with :ref:`the default backend ` properly passes this argument. The ``profile_callback`` argument of the :func:`~registration.views.register` view has been removed; the functionality it provided can now be implemented easily via a custom backend, or by connecting listeners to :ref:`the signals sent during the registration process `. The :func:`~registration.views.activate` view now issues a redirect upon successful activation; in the default backend this is to the URL pattern named ``registration_activation_complete``; in the default setup, this will redirect to a view which renders the template ``registration/activation_complete.html``, and so this template should be present when using the default backend and default configuration. Other backends can specify the location to redirect to through their ``post_activation_redirect()`` method, and this can be overridden on a case-by-case basis by passing the (new) keyword argument ``success_url`` to the ``activate()`` view. On unsuccessful activation, the ``activate()`` view still displays the same template, but its context has changed: the context will simply consist of any keyword arguments captured in the URL and passed to the view. Changes to registration forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Previously, the form used to collect data during registration was expected to implement a ``save()`` method which would create the new user account. This is no longer the case; creating the account is handled by the backend, and so any custom logic should be moved into a custom backend, or by connecting listeners to :ref:`the signals sent during the registration process `. Changes to the :class:`~registration.models.RegistrationProfile` model ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The :meth:`~registration.models.RegistrationManager.create_inactive_user` method of :class:`~registration.models.RegistrationManager` now has an additional required argument: ``site``. This allows django-registration to easily be used regardless of whether ``django.contrib.sites`` is installed, since a ``RequestSite`` object can be passed in place of a regular ``Site`` object. The :data:`~registration.signals.user_registered` signal is no longer sent by ``create_inactive_user()``, and the :data:`~registration.signals.user_activated` signal is no longer sent by :meth:`~registration.models.RegistrationManager.activate_user`; these signals are now sent by the backend after these methods have been called. Note that :ref:`these signals ` were added after the django-registration 0.7 release but before the refactoring which introduced :ref:`the backend API `, so only installations which were tracking the in-development codebase will have made use of them. The sending of activation emails has been factored out of ``create_inactive_user()``, and now exists as the method :meth:`~registration.models.RegistrationProfile.send_activation_email` on instances of ``RegistrationProfile``. django-registration-1.0/docs/_build/html/_sources/views.txt0000644000076700007670000001262611263660412024444 0ustar jamesjames00000000000000.. _views: .. module:: registration.views Registration views ================== In order to allow users to register using whatever workflow is implemented by the :ref:`registration backend ` in use, django-registration provides two views. Both are designed to allow easy configurability without writing or rewriting view code. .. function:: activate(request, backend[, template_name[, success_url[, extra_context[, **kwargs]]]]) Activate a user's account, for workflows which require a separate activation step. The actual activation of the account will be delegated to the backend specified by the ``backend`` keyword argument; the backend's ``activate()`` method will be called, passing the ``HttpRequest`` and any keyword arguments captured from the URL, and will be assumed to return a ``User`` if activation was successful, or a value which evaluates to ``False`` in boolean context if not. Upon successful activation, the backend's ``post_activation_redirect()`` method will be called, passing the ``HttpRequest`` and the activated ``User`` to determine the URL to redirect the user to. To override this, pass the argument ``success_url`` (see below). On unsuccessful activation, will render the template ``registration/activate.html`` to display an error message; to override thise, pass the argument ``template_name`` (see below). **Context** The context will be populated from the keyword arguments captured in the URL. This view uses ``RequestContext``, so variables populated by context processors will also be present in the context. :param backend: The dotted Python path to the backend class to use. :type backend: string :param extra_context: Optionally, variables to add to the template context. Any callable object in this dictionary will be called to produce the final result which appears in the context. :type extra_context: dict :param template_name: Optional. A custom template name to use. If not specified, this will default to ``registration/activate.html``. :type template_name: string :param **kwargs: Any keyword arguments captured from the URL, such as an activation key, which will be passed to the backend's ``activate()`` method. .. function:: register(request, backend[, success_url[, form_class[, disallowed_url[, template_name[, extra_context]]]]]) Allow a new user to register an account. The actual registration of the account will be delegated to the backend specified by the ``backend`` keyword argument. The backend is used as follows: 1. The backend's ``registration_allowed()`` method will be called, passing the ``HttpRequest``, to determine whether registration of an account is to be allowed; if not, a redirect is issued to a page indicating that registration is not permitted. 2. The form to use for account registration will be obtained by calling the backend's ``get_form_class()`` method, passing the ``HttpRequest``. To override this, pass the keyword argument ``form_class``. 3. If valid, the form's ``cleaned_data`` will be passed (as keyword arguments, and along with the ``HttpRequest``) to the backend's ``register()`` method, which should return a ``User`` object representing the new account. 4. Upon successful registration, the backend's ``post_registration_redirect()`` method will be called, passing the ``HttpRequest`` and the new ``User``, to determine the URL to redirect to. To override this, pass the keyword argument ``success_url``. **Context** ``form`` The form instance being used to collect registration data. This view uses ``RequestContext``, so variables populated by context processors will also be present in the context. :param backend: The dotted Python path to the backend class to use. :type backend: string :param disallowed_url: The URL to redirect to if registration is not permitted (e.g., if registration is closed). This should be a string suitable for passing as the ``to`` argument to `Django's "redirect" shortcut `_. If not specified, this will default to ``registration_disallowed``. :type disallowed_url: string :param extra_context: Optionally, variables to add to the template context. Any callable object in this dictionary will be called to produce the final result which appears in the context. :type extra_context: dict :param form_class: The form class to use for registration; this should be some subclass of ``django.forms.Form``. If not specified, the backend's ``get_form_class()`` method will be called to obtain the form class. :type form_class: subclass of ``django.forms.Form`` :param success_url: The URL to redirect to after successful registration. This should be a string suitable for passing as the ``to`` argument to `Django's "redirect" shortcut `_. If not specified, the backend's ``post_registration_redirect()`` method will be called to obtain the URL. :type success_url: string :param template_name: Optional. A custom template name to use. If not specified, this will default to ``registration/registration_form.html``. :type template_name: string django-registration-1.0/docs/_build/html/_static/0000755000076700007670000000000012157545727022361 5ustar jamesjames00000000000000django-registration-1.0/docs/_build/html/_static/ajax-loader.gif0000644000076700007670000000124111733410667025226 0ustar jamesjames00000000000000GIF89aU|NU|l!Created with ajaxload.info! ! NETSCAPE2.0,30Ikc:Nf E1º.`q-[9ݦ9 JkH! ,4N!  DqBQT`1 `LE[|ua C%$*! ,62#+AȐ̔V/cNIBap ̳ƨ+Y2d! ,3b%+2V_ ! 1DaFbR]=08,Ȥr9L! ,2r'+JdL &v`\bThYB)@<&,ȤR! ,3 9tڞ0!.BW1  sa50 m)J! ,2 ٜU]qp`a4AF0` @1Α! ,20IeBԜ) q10ʰPaVڥ ub[;django-registration-1.0/docs/_build/html/_static/basic.css0000644000076700007670000002041711733413133024140 0ustar jamesjames00000000000000/* * basic.css * ~~~~~~~~~ * * Sphinx stylesheet -- basic theme. * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /* -- main layout ----------------------------------------------------------- */ div.clearer { clear: both; } /* -- relbar ---------------------------------------------------------------- */ div.related { width: 100%; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } /* -- sidebar --------------------------------------------------------------- */ div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-size: 90%; } div.sphinxsidebar ul { list-style: none; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #98dbcc; font-family: sans-serif; font-size: 1em; } div.sphinxsidebar #searchbox input[type="text"] { width: 170px; } div.sphinxsidebar #searchbox input[type="submit"] { width: 30px; } img { border: 0; } /* -- search page ----------------------------------------------------------- */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #888; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* -- index page ------------------------------------------------------------ */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* -- general index --------------------------------------------------------- */ table.indextable { width: 100%; } table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } div.modindex-jumpbox { border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; margin: 1em 0 1em 0; padding: 0.4em; } div.genindex-jumpbox { border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; margin: 1em 0 1em 0; padding: 0.4em; } /* -- general body styles --------------------------------------------------- */ a.headerlink { visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } p.rubric { margin-top: 30px; font-weight: bold; } img.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } img.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } img.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } .align-left { text-align: left; } .align-center { text-align: center; } .align-right { text-align: right; } /* -- sidebars -------------------------------------------------------------- */ div.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px 7px 0 7px; background-color: #ffe; width: 40%; float: right; } p.sidebar-title { font-weight: bold; } /* -- topics ---------------------------------------------------------------- */ div.topic { border: 1px solid #ccc; padding: 7px 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* -- admonitions ----------------------------------------------------------- */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; } div.body p.centered { text-align: center; margin-top: 25px; } /* -- tables ---------------------------------------------------------------- */ table.docutils { border: 0; border-collapse: collapse; } table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #aaa; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } th { text-align: left; padding-right: 5px; } table.citation { border-left: solid 1px gray; margin-left: 1px; } table.citation td { border-bottom: none; } /* -- other body styles ----------------------------------------------------- */ ol.arabic { list-style: decimal; } ol.loweralpha { list-style: lower-alpha; } ol.upperalpha { list-style: upper-alpha; } ol.lowerroman { list-style: lower-roman; } ol.upperroman { list-style: upper-roman; } dl { margin-bottom: 15px; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } dt:target, .highlighted { background-color: #fbe54e; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } .refcount { color: #060; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } .system-message { background-color: #fda; padding: 5px; border: 3px solid red; } .footnote:target { background-color: #ffa; } .line-block { display: block; margin-top: 1em; margin-bottom: 1em; } .line-block .line-block { margin-top: 0; margin-bottom: 0; margin-left: 1.5em; } .guilabel, .menuselection { font-family: sans-serif; } .accelerator { text-decoration: underline; } .classifier { font-style: oblique; } abbr, acronym { border-bottom: dotted 1px; cursor: help; } /* -- code displays --------------------------------------------------------- */ pre { overflow: auto; overflow-y: hidden; /* fixes display issues on Chrome browsers */ } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .viewcode-link { float: right; } .viewcode-back { float: right; font-family: sans-serif; } div.viewcode-block:target { margin: -1px -10px; padding: 0 10px; } /* -- math display ---------------------------------------------------------- */ img.math { vertical-align: middle; } div.body div.math p { text-align: center; } span.eqno { float: right; } /* -- printout stylesheet --------------------------------------------------- */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0 !important; width: 100%; } div.sphinxsidebar, div.related, div.footer, #top-link { display: none; } }django-registration-1.0/docs/_build/html/_static/comment-bright.png0000644000076700007670000000665411733410667026012 0ustar jamesjames00000000000000PNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME 6 B\<IDAT8˅Kh]es1mA`jh[-E(FEaA!bIȐ*BX"؁4)NURZ!Mhjssm؋^-\gg ]o|Ҭ[346>zd ]#8Oݺt{5uIXN!I=@Vf=v1}e>;fvnvxaHrʪJF`D¹WZ]S%S)WAb |0K=So7D~\~q-˟\aMZ,S'*} F`Nnz674U H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME!,IDAT8e_Hu?}s3y˕U2MvQ֊FE.łĊbE$DDZF5b@Q":2{n.s<_ y?mwV@tR`}Z _# _=_@ w^R%6gC-έ(K>| ${} H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME 1;VIDAT8ukU?sg4h`G1 RQܸp%Bn"bЍXJ .4V iZ##T;m!4bP~7r>ιbwc;m;oӍAΆ ζZ^/|s{;yR=9(rtVoG1w#_ө{*E&!(LVuoᲵ‘D PG4 :&~*ݳreu: S-,U^E&JY[P!RB ŖޞʖR@_ȐdBfNvHf"2T]R j'B1ddAak/DIJD D2H&L`&L $Ex,6|~_\P $MH`I=@Z||ttvgcЕWTZ'3rje"ܵx9W> mb|byfFRx{w%DZC$wdցHmWnta(M<~;9]C/_;Տ#}o`zSڷ_>:;x컓?yݩ|}~wam-/7=0S5RP"*֯ IENDB`django-registration-1.0/docs/_build/html/_static/default.css0000644000076700007670000000771011733413133024504 0ustar jamesjames00000000000000/* * default.css_t * ~~~~~~~~~~~~~ * * Sphinx stylesheet -- default theme. * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ body { font-family: sans-serif; font-size: 100%; background-color: #11303d; color: #000; margin: 0; padding: 0; } div.document { background-color: #1c4e63; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: #ffffff; color: #000000; padding: 0 20px 30px 20px; } div.footer { color: #ffffff; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: #ffffff; text-decoration: underline; } div.related { background-color: #133f52; line-height: 30px; color: #ffffff; } div.related a { color: #ffffff; } div.sphinxsidebar { } div.sphinxsidebar h3 { font-family: 'Trebuchet MS', sans-serif; color: #ffffff; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; } div.sphinxsidebar h3 a { color: #ffffff; } div.sphinxsidebar h4 { font-family: 'Trebuchet MS', sans-serif; color: #ffffff; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: #ffffff; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; padding: 0; color: #ffffff; } div.sphinxsidebar a { color: #98dbcc; } div.sphinxsidebar input { border: 1px solid #98dbcc; font-family: sans-serif; font-size: 1em; } /* -- hyperlink styles ------------------------------------------------------ */ a { color: #355f7c; text-decoration: none; } a:visited { color: #355f7c; text-decoration: none; } a:hover { text-decoration: underline; } /* -- body styles ----------------------------------------------------------- */ div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: 'Trebuchet MS', sans-serif; background-color: #f2f2f2; font-weight: normal; color: #20435c; border-bottom: 1px solid #ccc; margin: 20px -20px 10px -20px; padding: 3px 0 3px 10px; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; } a.headerlink:hover { background-color: #c60f0f; color: white; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.admonition p.admonition-title + p { display: inline; } div.admonition p { margin-bottom: 5px; } div.admonition pre { margin-bottom: 5px; } div.admonition ul, div.admonition ol { margin-bottom: 5px; } div.note { background-color: #eee; border: 1px solid #ccc; } div.seealso { background-color: #ffc; border: 1px solid #ff6; } div.topic { background-color: #eee; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre { padding: 5px; background-color: #eeffcc; color: #333333; line-height: 120%; border: 1px solid #ac9; border-left: none; border-right: none; } tt { background-color: #ecf0f3; padding: 0 1px 0 1px; font-size: 0.95em; } th { background-color: #ede; } .warning tt { background: #efc2c2; } .note tt { background: #d6d6d6; } .viewcode-back { font-family: sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; }django-registration-1.0/docs/_build/html/_static/doctools.js0000644000076700007670000001527011733410667024543 0ustar jamesjames00000000000000/* * doctools.js * ~~~~~~~~~~~ * * Sphinx JavaScript utilities for all documentation. * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /** * select a different prefix for underscore */ $u = _.noConflict(); /** * make the code below compatible with browsers without * an installed firebug like debugger if (!window.console || !console.firebug) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}; } */ /** * small helper function to urldecode strings */ jQuery.urldecode = function(x) { return decodeURIComponent(x).replace(/\+/g, ' '); } /** * small helper function to urlencode strings */ jQuery.urlencode = encodeURIComponent; /** * This function returns the parsed url parameters of the * current request. Multiple values per key are supported, * it will always return arrays of strings for the value parts. */ jQuery.getQueryParameters = function(s) { if (typeof s == 'undefined') s = document.location.search; var parts = s.substr(s.indexOf('?') + 1).split('&'); var result = {}; for (var i = 0; i < parts.length; i++) { var tmp = parts[i].split('=', 2); var key = jQuery.urldecode(tmp[0]); var value = jQuery.urldecode(tmp[1]); if (key in result) result[key].push(value); else result[key] = [value]; } return result; }; /** * small function to check if an array contains * a given item. */ jQuery.contains = function(arr, item) { for (var i = 0; i < arr.length; i++) { if (arr[i] == item) return true; } return false; }; /** * highlight a given string on a jquery object by wrapping it in * span elements with the given class name. */ jQuery.fn.highlightText = function(text, className) { function highlight(node) { if (node.nodeType == 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { var span = document.createElement("span"); span.className = className; span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { highlight(this); }); } } return this.each(function() { highlight(this); }); }; /** * Small JavaScript module for the documentation. */ var Documentation = { init : function() { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); }, /** * i18n support */ TRANSLATIONS : {}, PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, LOCALE : 'unknown', // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; if (typeof translated == 'undefined') return string; return (typeof translated == 'string') ? translated : translated[0]; }, ngettext : function(singular, plural, n) { var translated = Documentation.TRANSLATIONS[singular]; if (typeof translated == 'undefined') return (n == 1) ? singular : plural; return translated[Documentation.PLURALEXPR(n)]; }, addTranslations : function(catalog) { for (var key in catalog.messages) this.TRANSLATIONS[key] = catalog.messages[key]; this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); this.LOCALE = catalog.locale; }, /** * add context elements like header anchor links */ addContextElements : function() { $('div[id] > :header:first').each(function() { $('\u00B6'). attr('href', '#' + this.id). attr('title', _('Permalink to this headline')). appendTo(this); }); $('dt[id]').each(function() { $('\u00B6'). attr('href', '#' + this.id). attr('title', _('Permalink to this definition')). appendTo(this); }); }, /** * workaround a firefox stupidity */ fixFirefoxAnchorBug : function() { if (document.location.hash && $.browser.mozilla) window.setTimeout(function() { document.location.href += ''; }, 10); }, /** * highlight the search words provided in the url in the text */ highlightSearchWords : function() { var params = $.getQueryParameters(); var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; if (terms.length) { var body = $('div.body'); window.setTimeout(function() { $.each(terms, function() { body.highlightText(this.toLowerCase(), 'highlighted'); }); }, 10); $('') .appendTo($('#searchbox')); } }, /** * init the domain index toggle buttons */ initIndexTable : function() { var togglers = $('img.toggler').click(function() { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); $('tr.cg-' + idnum).toggle(); if (src.substr(-9) == 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); }).css('display', ''); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { togglers.click(); } }, /** * helper function to hide the search marks again */ hideSearchWords : function() { $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); }, /** * make the url absolute */ makeURL : function(relativeURL) { return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; }, /** * get the current relative url */ getCurrentURL : function() { var path = document.location.pathname; var parts = path.split(/\//); $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { if (this == '..') parts.pop(); }); var url = parts.join('/'); return path.substring(url.lastIndexOf('/') + 1, path.length - 1); } }; // quick alias for translations _ = Documentation.gettext; $(document).ready(function() { Documentation.init(); }); django-registration-1.0/docs/_build/html/_static/down-pressed.png0000644000076700007670000000056011733410667025473 0ustar jamesjames00000000000000PNG  IHDRasRGBbKGDC pHYs B(xtIME -vF#IDAT8!OAJ, ++@I vbÿ@W7F HN#48646TMvv޼7Dsax1U q;< E-f)j%po4xF78G>)- EYm4%7YTk-Qa"NWAo-yeq,) Ypt\hqmszG]Nar߶s^l vh\2%0EeRvIENDB`django-registration-1.0/docs/_build/html/_static/down.png0000644000076700007670000000055311733410667024032 0ustar jamesjames00000000000000PNG  IHDRasRGBbKGDC pHYs B(xtIME"U{IDAT8ҡNCAJ, ++@4>/U^,~T&3M^^^PM6ٹs*RJa)eG*W<"F Fg78G>q OIp:sAj5GنyD^+yU:p_%G@D|aOs(yM,"msx:.b@D|`Vٟ۲иeKſ/G!IENDB`django-registration-1.0/docs/_build/html/_static/file.png0000644000076700007670000000061011733410667023774 0ustar jamesjames00000000000000PNG  IHDRabKGD pHYs  tIME  )TIDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,2mj [klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~IENDB`django-registration-1.0/docs/_build/html/_static/jquery.js0000644000076700007670000021475611733410667024246 0ustar jamesjames00000000000000/*! * jQuery JavaScript Library v1.4.2 * http://jquery.com/ * * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Sat Feb 13 22:33:48 2010 -0500 */ (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& (d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== "find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, "_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== "="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); (function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= {},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== "string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== 1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, ""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", ""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, "border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== "string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? "&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== 1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== "json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== "number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": "pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); django-registration-1.0/docs/_build/html/_static/minus.png0000644000076700007670000000030711733410667024213 0ustar jamesjames00000000000000PNG  IHDR &q pHYs  tIME <8tEXtComment̖RIDATcz(BpipPc |IENDB`django-registration-1.0/docs/_build/html/_static/pygments.css0000644000076700007670000000753411733413133024732 0ustar jamesjames00000000000000.highlight .hll { background-color: #ffffcc } .highlight { background: #eeffcc; } .highlight .c { color: #408090; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #FF0000 } /* Error */ .highlight .k { color: #007020; font-weight: bold } /* Keyword */ .highlight .o { color: #666666 } /* Operator */ .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #007020 } /* Comment.Preproc */ .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #FF0000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ .highlight .go { color: #303030 } /* Generic.Output */ .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .highlight .gt { color: #0040D0 } /* Generic.Traceback */ .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #007020 } /* Keyword.Pseudo */ .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #902000 } /* Keyword.Type */ .highlight .m { color: #208050 } /* Literal.Number */ .highlight .s { color: #4070a0 } /* Literal.String */ .highlight .na { color: #4070a0 } /* Name.Attribute */ .highlight .nb { color: #007020 } /* Name.Builtin */ .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ .highlight .no { color: #60add5 } /* Name.Constant */ .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ .highlight .ne { color: #007020 } /* Name.Exception */ .highlight .nf { color: #06287e } /* Name.Function */ .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #bb60d5 } /* Name.Variable */ .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mf { color: #208050 } /* Literal.Number.Float */ .highlight .mh { color: #208050 } /* Literal.Number.Hex */ .highlight .mi { color: #208050 } /* Literal.Number.Integer */ .highlight .mo { color: #208050 } /* Literal.Number.Oct */ .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ .highlight .sc { color: #4070a0 } /* Literal.String.Char */ .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ .highlight .s2 { color: #4070a0 } /* Literal.String.Double */ .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ .highlight .sx { color: #c65d09 } /* Literal.String.Other */ .highlight .sr { color: #235388 } /* Literal.String.Regex */ .highlight .s1 { color: #4070a0 } /* Literal.String.Single */ .highlight .ss { color: #517918 } /* Literal.String.Symbol */ .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */django-registration-1.0/docs/_build/html/_static/searchtools.js0000644000076700007670000003725311733413133025237 0ustar jamesjames00000000000000/* * searchtools.js_t * ~~~~~~~~~~~~~~~~ * * Sphinx JavaScript utilties for the full-text search. * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /** * helper function to return a node containing the * search summary for a given text. keywords is a list * of stemmed words, hlwords is the list of normal, unstemmed * words. the first one is used to find the occurance, the * latter for highlighting it. */ jQuery.makeSearchSummary = function(text, keywords, hlwords) { var textLower = text.toLowerCase(); var start = 0; $.each(keywords, function() { var i = textLower.indexOf(this.toLowerCase()); if (i > -1) start = i; }); start = Math.max(start - 120, 0); var excerpt = ((start > 0) ? '...' : '') + $.trim(text.substr(start, 240)) + ((start + 240 - text.length) ? '...' : ''); var rv = $('
').text(excerpt); $.each(hlwords, function() { rv = rv.highlightText(this, 'highlighted'); }); return rv; } /** * Porter Stemmer */ var Stemmer = function() { var step2list = { ational: 'ate', tional: 'tion', enci: 'ence', anci: 'ance', izer: 'ize', bli: 'ble', alli: 'al', entli: 'ent', eli: 'e', ousli: 'ous', ization: 'ize', ation: 'ate', ator: 'ate', alism: 'al', iveness: 'ive', fulness: 'ful', ousness: 'ous', aliti: 'al', iviti: 'ive', biliti: 'ble', logi: 'log' }; var step3list = { icate: 'ic', ative: '', alize: 'al', iciti: 'ic', ical: 'ic', ful: '', ness: '' }; var c = "[^aeiou]"; // consonant var v = "[aeiouy]"; // vowel var C = c + "[^aeiouy]*"; // consonant sequence var V = v + "[aeiou]*"; // vowel sequence var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 var s_v = "^(" + C + ")?" + v; // vowel in stem this.stemWord = function (w) { var stem; var suffix; var firstch; var origword = w; if (w.length < 3) return w; var re; var re2; var re3; var re4; firstch = w.substr(0,1); if (firstch == "y") w = firstch.toUpperCase() + w.substr(1); // Step 1a re = /^(.+?)(ss|i)es$/; re2 = /^(.+?)([^s])s$/; if (re.test(w)) w = w.replace(re,"$1$2"); else if (re2.test(w)) w = w.replace(re2,"$1$2"); // Step 1b re = /^(.+?)eed$/; re2 = /^(.+?)(ed|ing)$/; if (re.test(w)) { var fp = re.exec(w); re = new RegExp(mgr0); if (re.test(fp[1])) { re = /.$/; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = new RegExp(s_v); if (re2.test(stem)) { w = stem; re2 = /(at|bl|iz)$/; re3 = new RegExp("([^aeiouylsz])\\1$"); re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re2.test(w)) w = w + "e"; else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } else if (re4.test(w)) w = w + "e"; } } // Step 1c re = /^(.+?)y$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(s_v); if (re.test(stem)) w = stem + "i"; } // Step 2 re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step2list[suffix]; } // Step 3 re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step3list[suffix]; } // Step 4 re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; re2 = /^(.+?)(s|t)(ion)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); if (re.test(stem)) w = stem; } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = new RegExp(mgr1); if (re2.test(stem)) w = stem; } // Step 5 re = /^(.+?)e$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); re2 = new RegExp(meq1); re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) w = stem; } re = /ll$/; re2 = new RegExp(mgr1); if (re.test(w) && re2.test(w)) { re = /.$/; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") w = firstch.toLowerCase() + w.substr(1); return w; } } /** * Search Module */ var Search = { _index : null, _queued_query : null, _pulse_status : -1, init : function() { var params = $.getQueryParameters(); if (params.q) { var query = params.q[0]; $('input[name="q"]')[0].value = query; this.performSearch(query); } }, loadIndex : function(url) { $.ajax({type: "GET", url: url, data: null, success: null, dataType: "script", cache: true}); }, setIndex : function(index) { var q; this._index = index; if ((q = this._queued_query) !== null) { this._queued_query = null; Search.query(q); } }, hasIndex : function() { return this._index !== null; }, deferQuery : function(query) { this._queued_query = query; }, stopPulse : function() { this._pulse_status = 0; }, startPulse : function() { if (this._pulse_status >= 0) return; function pulse() { Search._pulse_status = (Search._pulse_status + 1) % 4; var dotString = ''; for (var i = 0; i < Search._pulse_status; i++) dotString += '.'; Search.dots.text(dotString); if (Search._pulse_status > -1) window.setTimeout(pulse, 500); }; pulse(); }, /** * perform a search for something */ performSearch : function(query) { // create the required interface elements this.out = $('#search-results'); this.title = $('

' + _('Searching') + '

').appendTo(this.out); this.dots = $('').appendTo(this.title); this.status = $('

').appendTo(this.out); this.output = $('