Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jnoortheen/django-utils-plus
Reusable Django app with various mixins and utility functions.
https://github.com/jnoortheen/django-utils-plus
django django-models django-routing django-urls django-utilities middleware mixins readable-urls routing urlpatterns urls
Last synced: 16 days ago
JSON representation
Reusable Django app with various mixins and utility functions.
- Host: GitHub
- URL: https://github.com/jnoortheen/django-utils-plus
- Owner: jnoortheen
- License: mit
- Created: 2017-07-02T16:15:38.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-10-09T20:18:04.000Z (about 1 year ago)
- Last Synced: 2024-10-11T23:48:52.554Z (about 1 month ago)
- Topics: django, django-models, django-routing, django-urls, django-utilities, middleware, mixins, readable-urls, routing, urlpatterns, urls
- Language: Python
- Homepage:
- Size: 273 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# utils-plus
A simple reusable Django app with various mixins and utility functions.-------
[![PyPi Version](https://img.shields.io/pypi/v/pconf.svg?style=flat)](https://pypi.python.org/pypi/pconf)
[![Python Version](https://img.shields.io/pypi/pyversions/returns.svg)](https://pypi.org/project/returns/)-------
# 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
1. klass
1. [unpkg](#unpkg)
1. [jsdelivr](#jsdelivr) (combined support as well)
### serve static files using npm
it is convenient to keep track of all external `js` libraries in project using
a `package.json`. It is used to keep latest version of available packages.
The following template tags can be used to serve these packages right from CDN on production and
`node_modules` during development#### unpkg
Alternative to standard `static` template tag. When you are using external static files/libraries
like bootstrap, jquery you may want to load them from CDNs instead of managing them yourself in production.
This tag helps you to do that. When `settings.DEBUG` is false, this will return paths that resolved from
`package.json` to versioned `unpkg.com`. Otherwise it will resolve to `node_modules` locally.#### jsdelivr
like `unpkg` adds support for using https://www.jsdelivr.com/#### Usage:
load the template tags and use `unpkg` like `static` tag,
```
{% load static utils_plus_tags %}```
#### Note:
1. the package.json should be present in the project ROOT DIR.
1. When DEBUG is True the packages must be installed and should be available already inside `node_modules`.
## 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\d+)/edit/$', EditView.as_view(), name='edit-student-doc'),
url(r'^studenteditordocument/(?P\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
urlpatterns = list(
url('editor')[
url.int('doc_pk')[
url('edit', DocEditorView.as_view(), 'edit-doc'),
url('export', DocExporterView.as_view(), 'export-doc'),
]
]
+ url('docs', Docs.as_view(), 'student-documents')
+ url('publish', DeleteOrPublistDocument.as_view(), 'publish_document', action='publish')
+ url('delete', DeleteOrPublistDocument.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 field3. `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 QueryManagerclass 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## Views
1. **CreateUpdateView**:
- combines CreateView and UpdateView# Testing the project
- clone the repo and run migrations after installing dependencies
- `inv test` will run all the test for the app