Skip to main content

Async-friendly straightforward Django API helpers

Project description


Async-friendly straightforward Django API helpers

Hello world

from raw_api import validate_json

@validate_json({"name": str})
def hello(request):
    name = request.json["name"]
    if name == "death":
        return "not today", 403
    return {"hello": request.json["name"]}


  • Install in from pypi: pip install django-raw-api
  • Add raw_api into INSTALLED_APPS list of your
  • Add raw_api.middleware middleware into MIDDLEWARE



It adds lazy request.json attribute and serializes raw responses such as:

  • str or tuple(message: str, status: int) - into plain text response
  • dict or tuple(data: dict, status: int) - into JSON response


  • request.json: dict - parsed json
  • request.query: dict - parsed query (only after @validate_query)


You can just return str or dict with an optional status code

def json_200ok(request):
    return {"hello": "world"}

def plain_text_with_status(request):
    return "bad request", 400


Decorators @user_required and @staff_required is analogous to @login_required and @staff_member_required with JSON-based errors instead of redirecting

Both decorators cache request.user so you can use it without sync_to_async even in async views.

from raw_api import user_required, staff_required

async def user(request):
    # no `sync_to_async` required
    return request.user.username

def staff(request):
    return {"admin": "zone"}

Data validation

@validate_query and @validate_json decorators are there to perform simple first-level validation of requests data. Internally they use the trafaret library.

from raw_api import validate_json, validate_query

@validate_json({"ids": [int], "hello?": str})
async def foo(request):
    return request.json

@validate_query({"id": int})
def bar(request):
    assert isinstance(id, int)
    return request.query


There's an example of using it with async views in the examples folder.


    python -m venv .venv
    source .venv/bin/activate
    pip install -Ur requirements-dev.txt
    python -m pytest tests

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

django_raw_api-0.4.0-py3-none-any.whl (4.6 kB view hashes)

Uploaded Python 3

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