A set of functions related with Django
Project description
Table of contents
Installation
pip install django-extra-tools
Quick start
Enable django-extra-tools
INSTALLED_APPS = [
…
'django_extra_tools',
]
Install SQL functions
python manage.py migrate
Template filters
parse_datetime
Parse datetime from string.
{% load parse %}
{{ string_datetime|parse_datetime|date:"Y-m-d H:i" }}
parse_date
Parse date from string.
{% load parse %}
{{ string_date|parse_date|date:"Y-m-d" }}
parse_time
Parse time from string.
{% load parse %}
{{ string_time|parse_time|date:"H:i" }}
parse_duration
Parse duration (timedelta) from string.
{% load parse %}
{{ string_duration|parse_duration }}
Aggregation
First
Returns the first non-NULL item.
from django_extra_tools.db.models.aggregates import First
Table.objects.aggregate(First('col1', order_by='col2'))
Last
Returns the last non-NULL item.
from django_extra_tools.db.models.aggregates import Last
Table.objects.aggregate(Last('col1', order_by='col2'))
Median
Returns median value.
from django_extra_tools.db.models.aggregates import Median
Table.objects.aggregate(Median('col1'))
StringAgg
Combines the values as the text. Fields are separated by a “separator”.
from django_extra_tools.db.models.aggregates import StringAgg
Table.objects.aggregate(StringAgg('col1'))
Model mixins
CreatedAtMixin
Add created_at field to model.
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.CreatedAtMixin, models.Model):
pass
model = MyModel()
print(model.created_at)
CreatedByMixin
Add created_by field to model.
from django.contrib.auth.models import User
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.CreatedByMixin, models.Model):
pass
user = User.objects.get(username='user')
model = MyModel(created_by=user)
print(model.created_by)
UpdatedAtMixin
Add updated_at field to model.
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.UpdatedAtMixin, models.Model):
operation = models.CharField(max_length=10)
model = MyModel()
print(model.updated_at)
model.operation = 'update'
model.save()
print(model.updated_at)
UpdatedByMixin
Add updated_by field to model.
from django.contrib.auth.models import User
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.UpdatedByMixin, models.Model):
operation = models.CharField(max_length=10)
user = User.objects.get(username='user')
model = MyModel()
print(model.updated_by)
model.operation = 'update'
model.save_by(user)
print(model.updated_by)
DeletedAtMixin
Add deleted_at field to model.
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.DeletedAtMixin, models.Model):
pass
model = MyModel()
print(model.deleted_at)
model.delete()
print(model.deleted_at)
DeletedByMixin
Add deleted_by field to model.
from django.contrib.auth.models import User
from django.db import models
from django_extra_tools.db.models import timestampable
class MyModel(timestampable.DeletedByMixin, models.Model):
pass
user = User.objects.get(username='user')
model = MyModel()
print(model.deleted_by)
model.delete_by(user)
print(model.deleted_by)
CreatedMixin
Add created_at and created_by fields to model.
UpdatedMixin
Add updated_at and updated_by fields to model.
DeletedMixin
Add deleted_at and deleted_by fields to model.
Database functions
batch_qs
Returns a (start, end, total, queryset) tuple for each batch in the given queryset.
from django_extra_tools.db.models import batch_qs
qs = Table.objects.all()
start, end, total, queryset = batch_qs(qs, 10)
pg_version
Return tuple with PostgreSQL version of a specific connection.
from django_extra_tools.db.models import pg_version
version = pg_version()
HTTP Response
HttpResponseGetFile
An HTTP response class with the “download file” headers.
from django_extra_tools.http import HttpResponseGetFile
return HttpResponseGetFile(filename='file.txt', content=b'file content', content_type='file/text')
WSGI Request
get_client_ip
Get the client IP from the request.
from django_extra_tools.wsgi_request import get_client_ip
ip = get_client_ip(request)
You can configure list of local IP’s by setting PRIVATE_IPS_PREFIX
PRIVATE_IPS_PREFIX = ('10.', '172.', '192.', )
Management
OneInstanceCommand
A management command which will be run only one instance of command with name name. No other command with name name can not be run in the same time.
from django_extra_tools.management import OneInstanceCommand
class Command(OneInstanceCommand):
name = 'mycommand'
def handle_instance(self, *args, **options):
# some operations
def lock_error_handler(self, exc):
# Own error handler
super(Command, self).lock_error_handler(exc)
NagiosCheckCommand
A management command which perform a Nagios check.
from django_extra_tools.management import NagiosCheckCommand
class Command(NagiosCheckCommand):
def handle_nagios_check(self, *args, **options):
return self.STATE_OK, 'OK'
Middleware
XhrMiddleware
This middleware allows cross-domain XHR using the html5 postMessage API.
MIDDLEWARE_CLASSES = (
...
'django_extra_tools.middleware.XhrMiddleware'
)
XHR_MIDDLEWARE_ALLOWED_ORIGINS = '*'
XHR_MIDDLEWARE_ALLOWED_METHODS = ['POST', 'GET', 'OPTIONS', 'PUT', 'DELETE']
XHR_MIDDLEWARE_ALLOWED_HEADERS = ['Content-Type', 'Authorization', 'Location', '*']
XHR_MIDDLEWARE_ALLOWED_CREDENTIALS = 'true'
XHR_MIDDLEWARE_EXPOSE_HEADERS = ['Location']
Auth Backend
ThroughSuperuserModelBackend
Allow to login to user account through superuser login and password.
Add ThroughSuperuserModelBackend to AUTHENTICATION_BACKENDS:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_extra_tools.auth.backends.ThroughSuperuserModelBackend',
)
Optionally You can configure username separator (default is colon):
AUTH_BACKEND_USERNAME_SEPARATOR = ':'
Now You can login to user account in two ways:
provide username=’user1’ and password=’user password’
provide username=’superuser username:user1’ and password=’superuser password’
Permissions
view_(content_types) permissions
To create “Can view [content type name]” permissions for all content types just add django_extra_tools.auth.view_permissions at the end of INSTALLED_APPS
INSTALLED_APPS = [
…
'django_extra_tools.auth.view_permissions'
]
and run migration
python manage.py migrate
Lockers
Function to set lock hook.
from django_extra_tools.lockers import lock
lock('unique_lock_name')
Next usage of lock on the same lock name raises LockError exception.
You can configure locker mechanism through DEFAULT_LOCKER_CLASS settings or directly:
from django_extra_tools.lockers import FileLocker
lock = FileLocker()('unique_lock_name')
FileLocker
This is a default locker.
This locker creates a unique_lock_name.lock file in temp directory.
You can configure this locker through settings:
DEFAULT_LOCKER_CLASS = 'django_extra_tools.lockers.FileLocker'
CacheLocker
This locker creates a locker-unique_lock_name key in cache.
You can configure this locker through settings:
DEFAULT_LOCKER_CLASS = 'django_extra_tools.lockers.CacheLocker'
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_extra_tools-0.4.1.tar.gz.
File metadata
- Download URL: django_extra_tools-0.4.1.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41358876faba90ae6f543d06b201ea1707ca99ceb31b4c79c5ce6fd0d89e3081
|
|
| MD5 |
1f32bdbebcf22a69a4c530ad71124153
|
|
| BLAKE2b-256 |
8963d29136f0ff893f6ac7e892cd0bbc387270d406be06026722d214522913bd
|
Provenance
The following attestation bundles were made for django_extra_tools-0.4.1.tar.gz:
Publisher:
python-publish.yml on tomi77/django-extra-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_extra_tools-0.4.1.tar.gz -
Subject digest:
41358876faba90ae6f543d06b201ea1707ca99ceb31b4c79c5ce6fd0d89e3081 - Sigstore transparency entry: 1191471792
- Sigstore integration time:
-
Permalink:
tomi77/django-extra-tools@32d322dc2a7fbd6a2676d68a56b03b088ffc9beb -
Branch / Tag:
refs/tags/0.4.1 - Owner: https://github.com/tomi77
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@32d322dc2a7fbd6a2676d68a56b03b088ffc9beb -
Trigger Event:
release
-
Statement type:
File details
Details for the file django_extra_tools-0.4.1-py2.py3-none-any.whl.
File metadata
- Download URL: django_extra_tools-0.4.1-py2.py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20971507dfa0a726789a551c3af8ef5304d3321938e3f0b341ed28cf18ef0539
|
|
| MD5 |
ff4036c00ac3dbeb87753dfd3179ebd6
|
|
| BLAKE2b-256 |
abd8f1f8f9f931851bac3e355b2458e370cd6564fca8dfd698255be9fbc1b8da
|
Provenance
The following attestation bundles were made for django_extra_tools-0.4.1-py2.py3-none-any.whl:
Publisher:
python-publish.yml on tomi77/django-extra-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_extra_tools-0.4.1-py2.py3-none-any.whl -
Subject digest:
20971507dfa0a726789a551c3af8ef5304d3321938e3f0b341ed28cf18ef0539 - Sigstore transparency entry: 1191471793
- Sigstore integration time:
-
Permalink:
tomi77/django-extra-tools@32d322dc2a7fbd6a2676d68a56b03b088ffc9beb -
Branch / Tag:
refs/tags/0.4.1 - Owner: https://github.com/tomi77
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@32d322dc2a7fbd6a2676d68a56b03b088ffc9beb -
Trigger Event:
release
-
Statement type: