Async-friendly straightforward Django API helpers
Project description
django-raw-api
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"]}
Setup
- Install in from pypi:
pip install django-raw-api
- Add
raw_api
intoINSTALLED_APPS
list of yoursettings.py
- Add
raw_api.middleware
middleware intoMIDDLEWARE
API
Middleware
It adds lazy request.json
attribute and serializes raw responses such as:
str
ortuple(message: str, status: int)
- into plain text responsedict
ortuple(data: dict, status: int)
- into JSON response
Request
request.json: dict
- parsed jsonrequest.query: dict
- parsed query (only after@validate_query
)
Response
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
Authorization
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
@user_required
async def user(request):
# no `sync_to_async` required
return request.user.username
@staff_required
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
Examples
There's an example of using it with async views in the examples
folder.
Tests
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
Built Distribution
Hashes for django_raw_api-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70e51497f3304378f6d7f644d3f490144aaa60ae7f10d9158d4698d8bde5558d |
|
MD5 | 742f45e11e458311bebd00c0a01c41d6 |
|
BLAKE2b-256 | b7f19e7e496588994828418a99398e22ae008f6da122aafb0257e03a01014f28 |