Skip to main content

Add namespaces to your Django requests. Helps with project isolation.

Project description

django-namespaces

Use namespaces in requests using Django.

Motivation

With django-namespaces, we get a new way to group resources based on request.namespace.

Installation

Use a virtual environment whenever using Python packages. The built-in venv module is great.

python3 -m venv venv
source venv/bin/activate
$(venv) python -m pip install django-namespaces --upgrade

Django Settings (settings.py)

Installed Apps

Add django_namespaces to INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "django_namespaces",
]

Middleware

Update MIDDLEWARE:

MIDDLEWARE = [
    # ...
    "django_namespaces.middleware.NamespaceMiddleware",
]

This gives us access to the request.namespace object in our views.

Template Context Processors

Add django_namespaces.context_processors.user_namespaces to TEMPLATE_CONTEXT_PROCESSORS:

TEMPLATE_CONTEXT_PROCESSORS = [
    # ...
    "django_namespaces.context_processors.user_namespaces",
]

Usage Usage

from django.contrib.auth import get_user_model
from django_namespaces.models import Namespace

User = get_user_model()
user = User.objects.create_user(username="jon.snow", password="youknowsomething")

namespace = Namespace.objects.create(handle="winterfell", user=user)
namespace2 = Namespace.objects.create(handle="thewall", user=user)
import django_namespaces

django_namespaces.activate("winterfell")

This will add a namespace to the request object.

def my_hello_world_view(request):
    print(request.namespace)  # <Namespace: winterfell>
    print(request.namespace.handle)  # winterfell
    return HttpResponse("Hello World")
from django.db import models
from django_namespaces.models import Namespace


class Location(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)
    namespace = models.ForeignKey(Namespace, on_delete=models.CASCADE)

Custom Namespace Model

If you want to use a custom namespace model, you can do so by setting the DJANGO_NAMESPACES_NAMESPACE_MODEL setting.

DJANGO_NAMESPACES_NAMESPACE_MODEL = "orgs.Organization"

Example model in orgs.models.py:

from django.db import models


class Organization(models.Model):
    handle = models.CharField(max_length=255, unique=True)
  • handle is the only required field to swap the model.

Optional Views

Using views are optional. You can also use the activate function to activate a namespace.

Update URLconf

Update urls.py to include namespaces.urls:

urlpatterns = [
    # ...
    path("namespaces/", include("django_namespaces.urls")),
]

Create a Namespace

Create a namespace by visiting http://localhost:8000/namespaces/create/ and filling out the form.

Activate a Namespace

Activate a namespace by visiting http://localhost:8000/namespaces/ and hitting activate on your newly created namespace.

You can also use:

Update URLconf

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_namespaces-0.0.26.tar.gz (37.9 kB view details)

Uploaded Source

Built Distribution

django_namespaces-0.0.26-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file django_namespaces-0.0.26.tar.gz.

File metadata

  • Download URL: django_namespaces-0.0.26.tar.gz
  • Upload date:
  • Size: 37.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for django_namespaces-0.0.26.tar.gz
Algorithm Hash digest
SHA256 69de62fadc60755eafc75c9816b9851cf1acca23e17c0c587d116464ca1c1a95
MD5 86b051adfb03b29e5ce496d20a015a34
BLAKE2b-256 88addff4b31b8ccd31b2739fddc4d0c4944707a14e0b931bf850ebaf4c294f8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_namespaces-0.0.26.tar.gz:

Publisher: main.yaml on jmitchel3/django-namespaces

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_namespaces-0.0.26-py3-none-any.whl.

File metadata

File hashes

Hashes for django_namespaces-0.0.26-py3-none-any.whl
Algorithm Hash digest
SHA256 e96c411eb103dd18a4df1d998e05c3a7723a9bcd88e6a4363fa7607169736eb9
MD5 8f5c54e13cf9ef486e0d4aacaff7a012
BLAKE2b-256 957b2f8fbb744f0d21bb5168ba54edb5234f7343fb1281249d7f93b065729665

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_namespaces-0.0.26-py3-none-any.whl:

Publisher: main.yaml on jmitchel3/django-namespaces

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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