Skip to main content

Generic extensible django user profiles.

Project description

## Extensible user profiles for Django

This is an extensible user profile system for Django, designed to provide a
simple user Profile model that is extensible.

The concept (and some code) is borrowed from the FeinCMS
(https://github.com/matthiask/feincms) page model.

To use the profiles module add profiles to your `INSTALLED_APPS`.

Before proceeding with manage.py syncdb, you must add some profile extensions.
The profiles module does not add anything to the User model by default.


### Profile extension modules

Extensions are a way to add often-used functionality the `Profile` model. The
extensions are standard python modules with a `register()` method which will be
called upon registering the extension. The `register()` method receives the
`Profile` class itself and the model admin class `ProfileAdmin` as arguments.

There are two ways to set up the extensions. Either you can use the FeinCMS
approach of registering extensions directly:

from profiles.models import Profile
Profile.register_extensions('title', 'picture', 'address', 'profiles.modules.options.extensions.options')

or you can simply use a setting:

PROFILE_EXTENSIONS = ('title', 'picture', 'address', 'profiles.modules.options.extensions.options')

If the extension requires it's own models (like the options extension) then the
app containing the models will also need to be added to your `INSTALLED_APPS`.

### Adding extensions

To add an extension create a python module that defines a register function
that accepts the `Profile class` and the `ProfileAdmin` class as arguments and
modifies them as required.

Here is the address extension (`profiles/extensions/address.py`):


from django.db import models
from django.utils.translation import ugettext_lazy as _

def register(cls, admin_cls):
cls.add_to_class('address1', models.CharField(max_length=255, verbose_name=_('address'), null=True, blank=True))
cls.add_to_class('address2', models.CharField(max_length=255, verbose_name=_('address 2'), null=True, blank=True))
cls.add_to_class('city', models.CharField(max_length=255, verbose_name=_('town/city'), null=True, blank=True))
cls.add_to_class('region', models.CharField(max_length=255, verbose_name=_('county/state/province'), null=True, blank=True))
cls.add_to_class('postcode', models.CharField(max_length=15, verbose_name=_('postcode'), null=True))
cls.add_to_class('country', models.ForeignKey('countries.Country', null=True, blank=True))
cls.add_to_class('telephone', models.CharField(max_length=32, verbose_name=_('mobile number'), null=True, blank=True))

if admin_cls:
admin_cls.search_fields += ['address1', 'address2', 'city', 'region', 'postcode']
admin_cls.list_display_filter += ['country', ]

if admin_cls.fieldsets:
admin_cls.fieldsets.append((_('Address'), {
'fields': ['address1', 'address2','city', 'region', 'postcode', 'country', 'telephone'],
'classes': ('collapse',),
}))


### Dependencies

The address extension requires
[`incuna-countries`](http://github.com/incuna/incuna-countries). Add
`countries` to your `INSTALLED_APPS`.

The options and notification extensions require
[`django-orderable`](http://github.com/incuna/django-orderable). Add
`orderable` to your `INSTALLED_APPS`.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-extensible-profiles-1.0.5.tar.gz (12.0 kB view details)

Uploaded Source

File details

Details for the file django-extensible-profiles-1.0.5.tar.gz.

File metadata

File hashes

Hashes for django-extensible-profiles-1.0.5.tar.gz
Algorithm Hash digest
SHA256 85cdfdbd9e60606256ab4c9731ee876317ecca7c6d00915249bda321678abf03
MD5 10e9a0143e86c8e55f814487c51b6485
BLAKE2b-256 25a687025089e23c42aa6731a07e429377444b48b720eb0bfc32ed5e13b25d34

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page