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 I was able to create a customizable CRUD interface in a few simple lines of code, but it only works on database backends. By defining a basic database engine that interfaces with any RestAPI I was able to leverage Django admin for my CRUD operations.
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.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e62e5744cfe01204fe3a51ea61037b8be89f44b9c764997003c5149b36edf62 |
|
MD5 | 9c73336a5aa21e92ac86d4b74cbd6556 |
|
BLAKE2b-256 | 33df106e3576f5dc8e564b81dbcb63e1b2f24f67aa39623ca94686c5e4dbc7df |
Hashes for django_restapi_engine-0.1.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e197b051f4e35a8851b5b65885b7519bd1b21056b64ac752b5b5d70b30d39d9a |
|
MD5 | da4844e2c3ebd3e835d5c08a10c662a4 |
|
BLAKE2b-256 | a9aafb38666d1a94500c0a8785f77abe89483ff5d47a4b3654824d222e299b5f |