Skip to main content

A reusable Django app 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.


PyPi Version Python Version


Installation

install the package using the below command

pip install django-utils-plus

or install the development version using

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
  2. unpkg
  3. 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 %}
<link rel="stylesheet" type="text/css" href="{% unpkg 'bootstrap/dist/css/bootstrap.min.css' %}"/>
<script src="{% unpkg 'bootstrap/dist/js/bootstrap.min.js' %}"></script>
<script src="{% unpkg 'jquery/dist/jquery.min.js' %}"></script>

Note:

  1. the package.json should be present in the project ROOT DIR.
  2. 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

### 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

### 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

### 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

  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
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

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

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.7.3.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

django_utils_plus-0.7.3-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django-utils-plus-0.7.3.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.5 CPython/3.8.2 Linux/5.5.11-1-MANJARO

File hashes

Hashes for django-utils-plus-0.7.3.tar.gz
Algorithm Hash digest
SHA256 7f997b7d4cde34eb350db2f9289b1cd5ab1a2bdbc73a19d16eecaa3be80ace17
MD5 1ed52eb38371aea27633ff1fea6340fe
BLAKE2b-256 27206d7795c28fad86117f650fbd57cc3690fcc6a0f4c244d422bace590f87bf

See more details on using hashes here.

File details

Details for the file django_utils_plus-0.7.3-py3-none-any.whl.

File metadata

  • Download URL: django_utils_plus-0.7.3-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.5 CPython/3.8.2 Linux/5.5.11-1-MANJARO

File hashes

Hashes for django_utils_plus-0.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8f99e37b9de1effaccf91250da34af44f16e4001f455db8cf1be1e15b6598361
MD5 0b7e55a4926fd3beea9a8921e6a914aa
BLAKE2b-256 c26359462e91315349f3b5e549ad3f1fd29e4c971444e3488a3f496b1a3a5a1d

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