Use any RestAPI as basic Django Database Engine
Project description
django-restapi-engine
Use any RestAPI as basic Django Database Engine
About
A simple Django database engine that interfaces with any RestAPI and perform basic CRUD actions.
Motivation
To interact with rest API's I was creating scripts using curl
or Postman
UI. This is quite
cumbersome and often fails as it's missing proper validation and a easy UI.
With Django admin it's possible to create a customizable CRUD interface in a few simple lines of code, but it only works on database backends. Leveraging Django admin for CRUD operations by defining a basic database engine that interfaces with any RestAPI.
Usage
Installation
Stable version:
pip install django-restapi-engine
Development version:
pip install git+https://github.com/laroo/django-restapi-engine.git@main
Create RestAPI handler
Create a custom RestAPI handler that implements all methods from BaseRestApiHandler
from django_restapi_engine.rest_api_handler import BaseRestApiHandler
class MyCustomRestApiHandler(BaseRestApiHandler):
def list(self, *, model, columns, query):
return [
return {'id': 1`, 'title': 'some title'},
return {'id': 2`, 'title': 'another title'}
]
def get(self, *, model, pk, columns):
return {'id': 1`, 'title': 'some title'}
def insert(self, *, model, obj, fields, returning_fields):
return {'id': 3`}
def update(self, *, model, pk, values):
return 1
def delete(self, *, model, pk):
return
Django Database Configuration
In Django's settings.py
add a new database config after the default
connection
with the following settings:
ENGINE
: Tell Django to usedjango_restapi_engine
DEFAULT_HANDLER_CLASS
: Point to your custom RestAPI handler class created in previous step
Example:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'restapi': {
'ENGINE': 'django_restapi_engine',
'DEFAULT_HANDLER_CLASS': 'module.location.of.MyCustomRestApiHandler'
}
}
Usage
# Create
todo = Todo(
user_id=123,
title="My new todo!",
completed=False
)
todo.save(using="restapi")
# Read
todo = Todo.objects.using('restapi').get(pk=1)
# Update
todo.title = "New title!"
todo.save(using="restapi")
# Delete
todo.delete(using="restapi")
# List
Todo.objects.using('restapi').all()
Django Admin Configuration
Create custom admin class that extends ModelAdmin
to point to the new database connection:
class RestApiModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.save(using='restapi')
def delete_model(self, request, obj):
obj.delete(using='restapi')
def get_queryset(self, request):
return super().get_queryset(request).using('restapi')
See example project
Example Project
See README.md in example_projects/jsonplaceholder_project
Limitations
There is no support for relationships like ForeignKey
and ManyToManyField
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
Hashes for django_restapi_engine-0.1.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ae046abc73097e3b9544eea6ea455ad73c457a39d81ae83a7fe03582499050d |
|
MD5 | 425e3d12acb9a587f281972925cd252b |
|
BLAKE2b-256 | 2bc23141bb309d2d7c959cc3e965c591149e66a6fdea917228deff222e6c476d |
Hashes for django_restapi_engine-0.1.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e374f18b942c73feead1b4c0789686980b4e5a28ff7ad9ec1a0821ebe95e394 |
|
MD5 | 599345d6aae2d70975e3a4eb47edeb5a |
|
BLAKE2b-256 | 56c69609d1af3ffbf48f6a14459ee54b3c8b0fc4c52a4471cf3f77139a23d417 |