Usage

Helpers

get_object_or_none

useful.helpers.get_object_or_none(model, *args, **kwargs)

Like get_object_or_404, but doesn’t throw an exception.

Allows querying for an object that might not exist without triggering an exception.

Sample usage:

from django.contrib.auth.models import User
from useful.helpers import get_object_or_none

user = get_object_or_none(User, username='test')

if not user:
    pass  # ... do something

While withouth the shortcut you would do something like:

try:
    user = User.objects.get(username='test')
except User.does_not_exist:
    user = None

This also simplifying more advanced cases:

user = get_object_or_none(SomeModel, field='value1') \
        or get_object_or_none(SomeModel, field='value2')

json_response

useful.helpers.json_response(data, status=200, serializer=None)

Returns an HttpResponse object containing JSON serialized data.

The mime-type is set to application/json, and the charset to UTF-8.

Sample usage:

# views.py
from useful.helpers import json_response

def some_view(request):
    data = {'a': 'b', 'key': 'value'}

    return json_response(data)  # Returns an HttpResponse object
                                # With `data` encoded as json.

Return a different status code:

# views.py
from useful.helpers import json_response

def some_view(request):
    return json_response(data={
        'status': 'error',
        'message': 'something terrible happened!',
    }, status=500)

Or use a custom JSON serializer:

# views.py
import datetime
from useful.helpers import json_response

def some_view(request):
    data = {'date': datetime.datetime.now()}

    dthandler = lambda x: (x.isoformat()
                           if isinstance(x, datetime.datetime) else x)

    return json_response(data, serializer=dthandler)

jsonp_response

useful.helpers.jsonp_response(data, callback='f', status=200, serializer=None)

Returns an HttpResponse object containing JSON serialized data, wrapped in a JSONP callback.

The mime-type is set to application/x-javascript, and the charset to UTF-8.

Usage is the same as json_response

Views

ExtraContextTemplateView

class useful.views.ExtraContextTemplateView(**kwargs)

Extension of Django TemplateView CBV that allows adding extra context

Sample usage:

# urls.py

from useful.views import ExtraContextTemplateView

urlpatterns = patterns('',
    # ...
    url(r'^sample_extra_context_view$',
        ExtraContextTemplateView.as_view(template_name='sample.html',
                                         extra_context={'extra': 'context'}),
        name='sample_extra_context_view'),
)

Tasks

Common Celery tasks.

call_management_command

useful.tasks.call_management_command()

Run a management command as a Celery task.

Useful for running periodic management commands with Celerybeat.

This task is useful for converting periodic tasks in the form of Django management being run as cron jobs to Celery periodic tasks run with celerybeat.

Sample usage:

# settings.py
from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    'cleanup': {
        'task': 'useful.tasks.call_management_command',
        'schedule': timedelta(hours=1),
        'args': ('cleanup', ),
    },
}

Project Versions

Table Of Contents

Previous topic

Installation

This Page