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_apiintoINSTALLED_APPSlist of yoursettings.py - Add
raw_api.middlewaremiddleware intoMIDDLEWARE
API
Middleware
It adds lazy request.json attribute and serializes raw responses such as:
strortuple(message: str, status: int)- into plain text responsedictortuple(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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_raw_api-0.4.0-py3-none-any.whl.
File metadata
- Download URL: django_raw_api-0.4.0-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70e51497f3304378f6d7f644d3f490144aaa60ae7f10d9158d4698d8bde5558d
|
|
| MD5 |
742f45e11e458311bebd00c0a01c41d6
|
|
| BLAKE2b-256 |
b7f19e7e496588994828418a99398e22ae008f6da122aafb0257e03a01014f28
|