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
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
File details
Details for the file django_namespaces-0.0.27.tar.gz
.
File metadata
- Download URL: django_namespaces-0.0.27.tar.gz
- Upload date:
- Size: 38.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
9f80ac164e081c0f0917ee45444adaeeb6c493f4379170b273377f3f0b67f75a
|
|
MD5 |
ec31426fd4d74a23664b3eea5178b0c8
|
|
BLAKE2b-256 |
fef49596c3c196fc15286cc52dabe4d1e7ef792e63bd0826e697fec9546df3fb
|
Provenance
The following attestation bundles were made for django_namespaces-0.0.27.tar.gz
:
Publisher:
main.yaml
on jmitchel3/django-namespaces
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
django_namespaces-0.0.27.tar.gz
-
Subject digest:
9f80ac164e081c0f0917ee45444adaeeb6c493f4379170b273377f3f0b67f75a
- Sigstore transparency entry: 163577295
- Sigstore integration time:
-
Permalink:
jmitchel3/django-namespaces@bbbb1d9dae43a686b3d9a4981e67f1b562fad936
-
Branch / Tag:
refs/tags/v0.0.27
- Owner: https://github.com/jmitchel3
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
main.yaml@bbbb1d9dae43a686b3d9a4981e67f1b562fad936
-
Trigger Event:
push
-
Statement type:
File details
Details for the file django_namespaces-0.0.27-py3-none-any.whl
.
File metadata
- Download URL: django_namespaces-0.0.27-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
df519e5e76270b2181445cb595ea734b0b1a0d1ff5f387909a21a44b03e22cf3
|
|
MD5 |
8920d24ea826c128c7f0be4f80577f50
|
|
BLAKE2b-256 |
35f65fe6794b1622652a9e60be388e25e224c0b10db1eb60734ce3f3bf2ab42a
|
Provenance
The following attestation bundles were made for django_namespaces-0.0.27-py3-none-any.whl
:
Publisher:
main.yaml
on jmitchel3/django-namespaces
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
django_namespaces-0.0.27-py3-none-any.whl
-
Subject digest:
df519e5e76270b2181445cb595ea734b0b1a0d1ff5f387909a21a44b03e22cf3
- Sigstore transparency entry: 163577296
- Sigstore integration time:
-
Permalink:
jmitchel3/django-namespaces@bbbb1d9dae43a686b3d9a4981e67f1b562fad936
-
Branch / Tag:
refs/tags/v0.0.27
- Owner: https://github.com/jmitchel3
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
main.yaml@bbbb1d9dae43a686b3d9a4981e67f1b562fad936
-
Trigger Event:
push
-
Statement type: