This commit is contained in:
Victor Alexandrovich Tsyrenschikov
2025-09-15 23:54:59 +05:00
parent 41f6699da9
commit 42ed1b04cb
69 changed files with 5614 additions and 0 deletions

155
apps/dyn_api/views.py Normal file
View File

@@ -0,0 +1,155 @@
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""
from django.http import Http404
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.shortcuts import render, redirect, get_object_or_404
from rest_framework.generics import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from django.http import HttpResponse
from django.conf import settings
DYNAMIC_API = {}
try:
DYNAMIC_API = getattr(settings, 'DYNAMIC_API')
except:
pass
from .helpers import Utils
def index(request):
context = {
'routes' : settings.DYNAMIC_API.keys(),
'segment': 'dynamic_api'
}
return render(request, 'dyn_api/index.html', context)
class DynamicAPI(APIView):
# READ : GET api/model/id or api/model
def get(self, request, **kwargs):
model_id = kwargs.get('id', None)
try:
if model_id is not None:
# Validate for integer
try:
model_id = int(model_id)
if model_id < 0:
raise ValueError('Expect positive int')
except ValueError as e:
return Response(data={
'message': 'Input Error = ' + str(e),
'success': False
}, status=400)
thing = get_object_or_404(Utils.get_manager(DYNAMIC_API, kwargs.get('model_name')), id=model_id)
model_serializer = Utils.get_serializer(DYNAMIC_API, kwargs.get('model_name'))(instance=thing)
output = model_serializer.data
else:
all_things = Utils.get_manager(DYNAMIC_API, kwargs.get('model_name')).all()
thing_serializer = Utils.get_serializer(DYNAMIC_API, kwargs.get('model_name'))
output = []
for thing in all_things:
output.append(thing_serializer(instance=thing).data)
except KeyError:
return Response(data={
'message': 'this model is not activated or not exist.',
'success': False
}, status=400)
except Http404:
return Response(data={
'message': 'object with given id not found.',
'success': False
}, status=404)
return Response(data={
'data': output,
'success': True
}, status=200)
# CREATE : POST api/model/
#@check_permission
def post(self, request, **kwargs):
try:
model_serializer = Utils.get_serializer(DYNAMIC_API, kwargs.get('model_name'))(data=request.data)
if model_serializer.is_valid():
model_serializer.save()
else:
return Response(data={
**model_serializer.errors,
'success': False
}, status=400)
except KeyError:
return Response(data={
'message': 'this model is not activated or not exist.',
'success': False
}, status=400)
return Response(data={
'message': 'Record Created.',
'success': True
}, status=200)
# UPDATE : PUT api/model/id/
#@check_permission
def put(self, request, **kwargs):
try:
thing = get_object_or_404(Utils.get_manager(DYNAMIC_API, kwargs.get('model_name')), id=kwargs.get('id'))
model_serializer = Utils.get_serializer(DYNAMIC_API, kwargs.get('model_name'))(instance=thing,
data=request.data,
partial=True)
if model_serializer.is_valid():
model_serializer.save()
else:
return Response(data={
**model_serializer.errors,
'success': False
}, status=400)
except KeyError:
return Response(data={
'message': 'this model is not activated or not exist.',
'success': False
}, status=400)
except Http404:
return Response(data={
'message': 'object with given id not found.',
'success': False
}, status=404)
return Response(data={
'message': 'Record Updated.',
'success': True
}, status=200)
# DELETE : DELETE api/model/id/
#@check_permission
def delete(self, request, **kwargs):
try:
model_manager = Utils.get_manager(DYNAMIC_API, kwargs.get('model_name'))
to_delete_id = kwargs.get('id')
model_manager.get(id=to_delete_id).delete()
except KeyError:
return Response(data={
'message': 'this model is not activated or not exist.',
'success': False
}, status=400)
except Utils.get_class(DYNAMIC_API, kwargs.get('model_name')).DoesNotExist as e:
return Response(data={
'message': 'object with given id not found.',
'success': False
}, status=404)
return Response(data={
'message': 'Record Deleted.',
'success': True
}, status=200)