Git Product home page Git Product logo

django-organizations's Introduction

django-organizations

Info

Groups and multi-user account management

Version

0.5.1

Author

Ben Lopatin (http://benlopatin.com)

Build Status

Current PyPI release

Download count

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.

Note

If you are using Django<=1.4.10, you will need to install an up-to-date version of the six package. Previous Django versions included an older version of six with which Django Organizations is incompatible.

Note

If you are using South you must use 1.0+. Django Organizations is incompatible with earlier versions of South, as this project uses the south_migrations folder for South schema migrations in order to maintain Django native migrations compatability.

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 = patterns('',
    ...
    url(r'^accounts/', include('organizations.urls')),
    url(r'^invitations/', include(invitation_backend().get_urls())),
)

Timestamped models and auto slug fields

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 a TimeStampedModel and 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 defaults:

ORGS_SLUGFIELD = 'django_extensions.db.fields.AutoSlugField'
ORGS_TIMESTAMPED_MODEL = 'django_extensions.db.models.TimeStampedModel'

Alternatives:

ORGS_SLUGFIELD = 'autoslug.fields.AutoSlugField'
ORGS_TIMESTAMPED_MODEL = 'model_utils.models.TimeStampedModels'

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:

ORGS_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 at tested against:

  • Django 1.4.x against Python 2.7
  • Django 1.7.x against Python 2.7, 3.3, 3.4
  • Django 1.8.x against Python 2.7, 3.3, 3.4

To run the tests against all target environments, install tox and then execute the command:

tox

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:

  1. Authentication agnostic
  2. Registration agnostic
  3. Invitation agnostic
  4. User messaging agnostic

Etc.

License

Anyone is free to use or modify this software under the terms of the BSD license.

django-organizations's People

Contributors

avelis avatar bennylope avatar floydwch avatar gauthamgoli avatar jellyfang avatar krillr avatar mauricioabreu avatar philmcmahon avatar rfj001 avatar sannies avatar tdavis avatar thedrow avatar vitriolix avatar zeevg avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.