Group accounts for Django
Project description
Summary |
Groups and multi-user account management |
---|---|
Author |
Ben Lopatin (http://benlopatin.com / https://wellfire.co) |
Status |
Separate individual user identity from accounts and subscriptions. Django Organizations adds user-managed, multi-user groups to your Django project. Use Django Organizations whether your site needs organizations that function like social groups or multi-user account objects to provide account and subscription functionality beyond the individual user.
Works with your existing user model, whether django.contrib.auth or a custom model. No additional user or authentication functionality required.
Users can be belong to and own more than one organization (account, group)
Invitation and registration functionality works out of the box for many situations and can be extended as need to fit specific requirements.
Start with the base models or use your own for greater customization.
Documentation is on Read the Docs
Installing
First add the application to your Python path. The easiest way is to use pip:
pip install django-organizations
You can also install by downloading the source and running:
$ python setup.py install
By default you will need to install django-extensions or comparable libraries if you plan on adding Django Organizations as an installed app to your Django project. See below on configuring.
Configuring
Make sure you have django.contrib.auth installed, and add the organizations application to your INSTALLED_APPS list:
INSTALLED_APPS = ( ... 'django.contrib.auth', 'organizations', )
Then ensure that your project URL conf is updated. You should hook in the main application URL conf as well as your chosen invitation backend URLs:
from organizations.backends import invitation_backend urlpatterns = [ ... url(r'^accounts/', include('organizations.urls')), url(r'^invitations/', include(invitation_backend().get_urls())), ]
Auto slug field
The standard way of using Django Organizations is to use it as an installed app in your Django project. Django Organizations will need to use an auto slug field which are not included. By default it will try to import these from django-extensions, but you can configure your own in settings. The default:
ORGS_SLUGFIELD = 'django_extensions.db.fields.AutoSlugField'
Alternative:
ORGS_SLUGFIELD = 'autoslug.fields.AutoSlugField'
Previous versions allowed you to specify an ORGS_TIMESTAMPED_MODEL path. This is now ignored and the functionality satisifed by a vendored solution. A warning will be given but this should not have any effect on your code.
Registration & invitation backends
You can specify a different invitation backend in your project settings, and the invitation_backend function will provide the URLs defined by that backend:
INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'
Usage Overview
For most use cases it should be sufficient to include the app views directly using the default URL conf file. You can customize their functionality or access controls by extending the base views.
There are three models:
Organization The group object. This is what you would associate your own app’s functionality with, e.g. subscriptions, repositories, projects, etc.
OrganizationUser A custom through model for the ManyToMany relationship between the Organization model and the User model. It stores additional information about the user specific to the organization and provides a convenient link for organization ownership.
OrganizationOwner The user with rights over the life and death of the organization. This is a one to one relationship with the OrganizationUser model. This allows User objects to own multiple organizations and makes it easy to enforce ownership from within the organization’s membership.
The underlying organizations API is simple:
>>> from organizations.utils import create_organization >>> chris = User.objects.get(username="chris") >>> soundgarden = create_organization(chris, "Soundgarden", org_user_defaults={'is_admin': True}) >>> soundgarden.is_member(chris) True >>> soundgarden.is_admin(chris) True >>> soundgarden.owner.organization_user <OrganizationUser: Chris Cornell> >>> soundgarden.owner.organization_user.user >>> <User: chris> >>> audioslave = create_organization(chris, "Audioslave") >>> tom = User.objects.get(username="tom") >>> audioslave.add_user(tom, is_admin=True) <OrganizationUser: Tom Morello>
Custom models
Django-organizations can act as a base library (not installed in your project) and used to create unique organization model sets using custom tables. See the Cooking with Django Organizations section in the documentation for advice on proceeding.
Development & Contributing
Development is on-going. To-do items have been moved to the wiki for the time being.
The basic functionality should not need much extending. Current dev priorities for me and contributors should include:
Improving the tests and test coverage (ideally moving them back out of the main module and executable using the setup.py file)
Improving the backends and backends concept so that additional invitation and registration backends can be used
Documentation
Ensuring all application text is translatable
Python 3 readiness
Please use the project’s issues tracker to report bugs, doc updates, or other requests/suggestions.
Targets & testing
The codebase is targeted and tested against:
Django 1.8.x against Python 2.7, 3.4, 3.5, and PyPy
Django 1.9.x against Python 2.7, 3.4, 3.5, and PyPy
Django 1.10.x against Python 2.7, 3.4, 3.5, 3.6, and PyPy
Django 1.11.x against Python 2.7, 3.4, 3.5, 3.6, and PyPy
To run the tests against all target environments, install tox and then execute the command:
tox
Fast testing
Testing each change on all the environments takes some time, you may want to test faster and avoid slowing down development by using pytest against your current environment:
pip install -r requirements-test.txt py.test
Supply the -x option for failfast mode:
py.test -x
Submitting
These submission guidelines will make it more likely your submissions will be reviewed and make it into the project:
Ensure they match the project goals and are sufficiently generalized
Please try to follow Django coding style. The code base style isn’t all up to par, but I’d like it to move in that direction
Also please try to include good commit log messages.
Pull requests should include an amount of code and commits that are reasonable to review, are logically grouped, and based off clean feature branches.
Code contributions are expected to pass in all target environments, and pull requests should be made from branches with passing builds on Travis CI.
Project goals
django-organizations should be backend agnostic:
Authentication agnostic
Registration agnostic
Invitation agnostic
User messaging agnostic
Etc.
License
Anyone is free to use or modify this software under the terms of the BSD license.
History
0.9.3
Create username value for user if username field exists (custom user models)
0.9.2
Decouple concrete organizations.Organization model from the invitation/registration backends
0.9.1
Fixes missing migration. Migration was created due to non-schema changes in models
0.9.0
Add notification to users when added to an organization
New abstract models create separation between ‘plain’ base models and abstract models that include abstracted functionality previously included only in concrete models
Python 3.6 and Django 1.11 test support
0.8.2
Updates setup classifiers information
0.8.1
Fixes [lack of] validation bug in backend registration form
0.8.0
Adds Django 1.10 support
0.7.0
Fixes some issues which may require some users to clear out extraneous migrations produced by using configurable base classes.
Fixes condition where create_organization produces an owner who is not an admin user.
Fixes issue in slug field import resulting in spurious migrations.
Immediately deprecates configurable TimeStampedModel import. This caused serious problems with Django’s migration library which were not easily resolved for a feature that added little value.
0.6.1
Fixes email parsing from settings
0.6.0
Adds Django 1.9 support
Drops support for Django 1.7
Fixes migration issue related to incomplete support for configurable model fields and base model. If you are upgrading (especially from a fork of the development version of django-organization) you may have an extra migration, 0002_auto_20151005_1823, which has been removed.
0.5.3
Fixes migrations problem in build
0.5.2
Fixes packaging bug
0.5.1
Cleaned up installation instructions
0.5.0
Drops testing support for Django 1.5 and Django 1.6
Adds native Django database migrations
Adds tested support for Django 1.7 and Django 1.8
0.4.3
Adds app specific signals
0.4.2
Various related name fixes in models, registration backends
0.4.1
Support for older Django versions with outdated versions of six
0.4.0
Allows for configurable TimeStampModel (base mixin for default Organization model) and AutoSlugField (field on default Organization model).
0.3.0
Initial Django 1.7 compatability release
0.2.3
Fix issue validating organziation ownership for custom organization models inheriting directly from the Organization class.
0.2.2
Packaging fix
0.2.1
Packaging fix
0.2.0
Abstract base models. These allow for custom organization models without relying on mulit-table inheritence, as well as custom organization user models, all on an app-by-app basis.
0.1.10
Packaging fix
0.1.9
Restructures tests to remove from installed module, should reduce installed package size
0.1.8
Fixes another bug in email invitations
0.1.7
Fixes bug in email invitation
0.1.6
Extends organizaton name length
Increase email field max length
Adds get_or_add_user method to Organization
Email character escaping
0.1.5
Use raw ID fields in admin
Fixes template variable names
Allow superusers access to all organization views
Activate related organizations when activating an owner user
0.1.4a
Bug fix for user model import
0.1.4
Bugfixes for deleting organization users
Removes additional auth.User references in app code
0.1.3b
Changes SlugField to an AutoSlugField from django-extensions
Base models on TimeStampedModel from django-extensions
ForeignKey to user model based on configurable user selection
0.1.3
Manage organization models with South
Added configurable context variable names to view mixins
Added a base backend class which the Invitation and Registration backends extend
Lengthed Organization name and slug fields
Makes mixin model classes configurable
Improved admin display
Removes initial passwords
0.1.2
Added registration backend
Various bug fixes
0.1.1
Add RequestContext to default invitation registration view
Fix invitations
0.1.0
Initial alpha application
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-organizations-0.9.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f64cfffdb7f53df6d4a91becbfd323763fdbe694f9f8ad893feec959dbde50d |
|
MD5 | a60f371bd80781db95637c863569a75d |
|
BLAKE2b-256 | bd54a62cc2554f4181261327b7a4cb66027fb1d0ae75c11a2c123b0abd83b328 |
Hashes for django_organizations-0.9.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 681e2d2214e64fffec0713e6c89b6b880d8fe1f4d42f49025452ae64b4178104 |
|
MD5 | 8ff74f50c9aab5febd0907608ba27492 |
|
BLAKE2b-256 | ae5e179aa630159c237b1da4e31aaacb7b4d3e3e79305c4d328af8c8d2ef22a8 |