Two view classes to handle API endpoints
Project description
Django_APIView
Implement a base generic view for handling model RESTful endpoints
Usage
# models.py
from django.db import models
from django_modelapiview import JSONMixin
class MyModel(JSONMixin, models.Model):
"""
Declare your model as you usually do but
add a json_fields list
"""
json_fields:list[str] = ['text', 'image', 'fk', 'fk_reverse', 'm2m', 'my_method']
text = models.TextField()
image = models.ImageField()
fk = models.ForeignKey(...)
# fk_reverse
m2m = models.ManyToManyField(...)
def my_method(self):
return "my custom value"
# views.py
from django_modelapiview import APIView
from django_modelapiview.responses import APIResponse
from .models import MyModel
class MyView(APIView):
# Required
route:str = "myroute" # The url to access your view
# Optional
enforce_authentification:bool = True # Should this model be restricted with Token access
def get(self, request, *args, **kwargs) -> APIResponse:... # One of head, options, get...
# views.py
from django_modelapiview import ModelAPIView
from .models import MyModel
class MyModelView(ModelAPIView):
# Required
model:JSONMixin = MyModel # Your model
route:str = "mymodels" # The url to access your collection
# Optional
queryset:QuerySet = MyModel.objects.all() # A custom base queryset (will be affected by query filters)
singular_name:str = "my model" # Singular name of your model for reason message
plural_name:str = "my models" # Plural name of your model for reason message
enforce_authentification:bool = True # Should this model be restricted with Token access
query_parameters:list[tuple[str, Callable[[QuerySet, object], QuerySet]]] = [
('order_by', lambda queryset, field_names: queryset.order_by(*field_names.split(",")) if field_names else queryset),
('limit', lambda queryset, limit: queryset[:int(limit)] if limit else queryset), # Should be last since sliced QuerySet can't be filtered anymore
]
def get(self, request, *args, **kwargs) -> APIResponse:... # One of head, options, get...
# urls.py
from django.urls import path, include
from . import views
urlpatterns = [
path("", include("django_routeview")), # Django RouteView are used as based class for APIView in order to automatically register them
]
# You can use query parameters like order_by or limit (or customs):
https://myhost.com/api/mymodel/?order_by=-id&limit=1 # Will inverse order by id and limit to one : get the last id
# Or you can use Django defined filters:
https://myhost.com/api/mymodel/?id__in=1,2,3&foreignkey__id__in=2,3&field__lte=5
# And finally both:
https://myhost.com/api/mymodel/?manytomany__in=2,3&field__lte=5&limit=10
It also supports translation:
First enable it as an app
#settings.py
INSTALLED_APPS = [
...
'django_modelapiview',
...
]
Then change the language using GET parameters:
#Currently supports : enlish(en)(default), français(fr)
https://myhost.com/api/mymodel/?lang=fr
Using base views
Django ModelAPIView provides 2 base views:
- LoginView: to handle authentification (using the default Django authentification system)
- URLsView: to list the urls availables
Usage
# urls.py
from django.urls import path
from django_modelapiview.views import LoginView, URLsView # Importing them is enough
Errors
If you get a "Verb not implemented" reason from your endpoint but you are sure to have defined it.
You probable just forgot the -> APIResponse
return type hint.
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
Built Distribution
File details
Details for the file django_modelapiview-1.4.15.tar.gz
.
File metadata
- Download URL: django_modelapiview-1.4.15.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fea33bac8a8a238522f7220b3fd61523430cfd492064c7cc59c6e0b39d08c40e |
|
MD5 | dc25b99417e47b831c2aef041708b6f3 |
|
BLAKE2b-256 | 93393c818fc7048a65b3f56665d11e739fc04c270b0bd81fe57b256b2288783c |
File details
Details for the file django_modelapiview-1.4.15-py3-none-any.whl
.
File metadata
- Download URL: django_modelapiview-1.4.15-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5343f83a8612ff96cbf96eacea27d16a4ab984ec4261149a4f184d30c5a5732 |
|
MD5 | c1cd0f696e88c709f062edc3410de7b2 |
|
BLAKE2b-256 | 99152114e68116ec28d51a4dc20ce5b3eef845be3f77fb54f53be479641e4a96 |