Skip to main content

A Django with small set of utilities for urls, viewsets, commands and more

Project description

# utils-plus
A simple reusable Django app with various mixins and utility functions.

# Installation
install the package using the below command

```commandline
pip install django-utils-plus
```

or install the development version using
```commandline
pip install git://github.com/jnoortheen/django-utils-plus.git@master#egg=django-utils-plus
```

# Utils

## Management Commands
- clear_records
- create_admin
- test_mail
- cleardata
- create_middleware

## Template tags
- klass

## Middleware
- login_required_middleware

## Urls & Routing with ease

An elegant and DRY way to define urlpatterns. It has easier to nest many levels deeper and still have the readability.
It is just a wrapper behind the standard url(), include() methods.

This is how your urls.py may look
```python
### urls.py ###
urlpatterns = [
url(r'^studenteditordocument/(?P<doc_pk>\d+)/edit/$', EditView.as_view(), name='edit-student-doc'),
url(r'^studenteditordocument/(?P<doc_pk>\d+)/export/$', ExportView.as_view(), name='export-editore-doc'),

url(r'^docs/$', Docs.as_view(), name='student-documents'),
url(r'^publish/$', PulishOrDelete.as_view(), {'action': 'publish'}, name="publish_document"),
url(r'^delete/$', PulishOrDelete.as_view(), name='delete_document'),
]
```

after using `Url`
```python
### urls.py ###

from utils_plus.router import Url

with Url('editor') as u:
with u.int('doc_pk'):
u('edit', EditView.as_view(), 'edit-doc')
u('export', ExportView.as_view(), 'export-doc')
u('docs', Docs.as_view(), 'student-documents')
u('publish', PulishOrDelete.as_view(), 'publish_document', action='publish')
u('delete', PulishOrDelete.as_view(), 'delete_document')

urlpatterns = u.urlpatterns
```

you could also do this if you aren't afraid of typing more. There is no need to define the urlpatterns variable
separately
```python
### urls.py ###

from utils_plus.router import Url

with Url('editor') as urlpatterns:
with urlpatterns.int('doc_pk'):
urlpatterns('edit', EditView.as_view(), 'edit-doc')
urlpatterns('export', ExportView.as_view(), 'export-doc')
urlpatterns('docs', Docs.as_view(), 'student-documents')
urlpatterns('publish', PulishOrDelete.as_view(), 'publish_document', action='publish')
urlpatterns('delete', PulishOrDelete.as_view(), 'delete_document')
```

see `tests/test_router.py` for more use cases

## Model

1. `CheckDeletableModelMixin`
adds a `is_deletable` method which then can be used to check any affected related records before actually deleting them.
originally it is copied from this [gist](https://gist.github.com/freewayz/69d1b8bcb3c225bea57bd70ee1e765f8)

2. `ChoicesEnum`
Enumerator class for use with the django ORM choices field

3. `QueryManager`
A DRYer way to set select_related, prefetch_related & filters to queryset.
- this has `first_or_create` method similar to get_or_create

```python
from django.db import models
from utils_plus.models import QueryManager

class Post(models.Model):
author = models.ForeignKey('Author')
comments = models.ManyToManyField('Comment')
published = models.BooleanField()
pub_date = models.DateField()

# custom managers
objects = QueryManager() # equivalent to models.Manager
public_posts = QueryManager(published=True).order_by('-pub_date')
rel_objects = QueryManager().selects('author').prefetches('comments')
```

## Config Option

1. `URL_GROUP_TRAIL_SLASH`
- By default all the urls generated by this class will have trailing slash
- Set this to False in settings.py to change this behaviour

## Testing

- clone the repo and run migrations
- `python manage.py test` will run all the test for the utils_plus app

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-utils-plus-0.3.0.tar.gz (13.4 kB view details)

Uploaded Source

File details

Details for the file django-utils-plus-0.3.0.tar.gz.

File metadata

File hashes

Hashes for django-utils-plus-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4e12e3bd38aefe6023b036c563c9cac298c05e2bcfb2ddcc660aac212af773fe
MD5 3f6448f0052d8498a5ed84f3d1086d98
BLAKE2b-256 2d61b9fb8529e5943423ae43380749b5ad4019fc876537bbba61486c588a4f6f

See more details on using hashes here.

Supported by

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