Skip to main content

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


Download files

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

Source Distribution

django_modelapiview-1.4.15.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

django_modelapiview-1.4.15-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

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

Hashes for django_modelapiview-1.4.15.tar.gz
Algorithm Hash digest
SHA256 fea33bac8a8a238522f7220b3fd61523430cfd492064c7cc59c6e0b39d08c40e
MD5 dc25b99417e47b831c2aef041708b6f3
BLAKE2b-256 93393c818fc7048a65b3f56665d11e739fc04c270b0bd81fe57b256b2288783c

See more details on using hashes here.

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

Hashes for django_modelapiview-1.4.15-py3-none-any.whl
Algorithm Hash digest
SHA256 c5343f83a8612ff96cbf96eacea27d16a4ab984ec4261149a4f184d30c5a5732
MD5 c1cd0f696e88c709f062edc3410de7b2
BLAKE2b-256 99152114e68116ec28d51a4dc20ce5b3eef845be3f77fb54f53be479641e4a96

See more details on using hashes here.

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