Create simple JSON APIs with Django
Project description
Django Simple JSON API
Install
pip install django-simple-json-api
Instructions
Add dsjapi.decorators.api or dsjapi.decorators.api_rq to your view function.
Return a JSON serializable object or a django.http.HttpResponse object.
Raising a dsjapi.exceptions.ServerException exception will automatically return the appropriate JSON response.
Decorator parameters
field
dsjapi.fields.Field
Expected field in request body. Default isNone.allowedMethods
listofstr
Allowed HTTP methods (uppercase). Default is["GET", "POST"].safeEncoding
bool
Trueto allow non-dictresponse objects. Default isFalse.
@api vs @api_rq
@apionly provides the validated request data.@api_rqprovides adsjapi.decorators.Requestobject that contains bothrequest(the originaldjango.http.HttpRequestobject) anddata(the validated request data) attributes.
Examples
Views
from dsjapi.decorators import api
from dsjapi.fields import *
@api (DictField ({
"name": StringField (minLength=2, maxLength=32, regex=r'^[a-zA-Z ]+$'),
"bio": StringField (maxLength=64, missing=Field.Do.DEFAULT, default=""), # Optional (default to "")
"age": IntField (min=18, max=130)
}))
def index (data):
result = putUser (data["name"], data["bio"], data["age"])
return { "result": result }
from dsjapi.decorators import api
from dsjapi.fields import *
@api (DictField ({
"start": ListField.byLength (2, FloatField ()),
"end": ListField.byLength (2, FloatField (), missing=Field.Do.SKIP), # Optional
"time": FloatField (min=120, max=60*60)
}))
def index (data):
if "end" in data:
route = getARoute (data["start"], data["time"])
else:
route = getABRoute (data["start"], data["end"], data["time"])
return { "route": route }
from dsjapi.decorators import api
from dsjapi.fields import *
@api (DictField ({
"numbers": ListField.byLength (2, FloatField (min=0))
}))
def index (data):
sum = 0
for number in data["numbers"]:
sum += number
avg = sum / len (data["numbers"])
return { "average": avg }
from dsjapi.decorators import api
from dsjapi.fields import *
from dsjapi.exceptions import *
@api (DictField ({
"id": IntField (min=0, max=4096),
"password": StringField (min=8, max=32)
}))
def index (data):
user = getUserById (data["id"])
if user is None:
raise NotFoundException ("User not found")
if user.getPassword () != data["password"]:
raise AuthenticationException ("Wrong password")
return { "id": user.getId (), "score": user.getScore () }
Custom fields
from dsjapi.fields import IntField, FieldException
class EvenNumberField (IntField):
def __init__ (self, min=None, max=None, missing=Field.Do.RAISE, error=Field.Do.RAISE, default=None):
super ().__init__ (int, min=min, max=max, missing=missing, error=error, default=default)
def clean (self, value):
value = super ().clean (value)
if value % 2 != 0:
raise FieldException ("Odd number")
return value
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-simple-json-api-0.0.3.tar.gz.
File metadata
- Download URL: django-simple-json-api-0.0.3.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3284d0ee2a6552a150beb8dedabd89b545c9182df6413ca4ed1fcc3894251dfe
|
|
| MD5 |
66f28af367e63fe5745ba350f9acf7a2
|
|
| BLAKE2b-256 |
facf603b6f9297ffe721a95470e4bbced95528978724fc1cbd90ff210babd33a
|