Skip to content

Instantly share code, notes, and snippets.

@dp0000000004-eng
Created September 21, 2026 13:48
Show Gist options
  • Select an option

  • Save dp0000000004-eng/05b0543de356f683d8710a082af52496 to your computer and use it in GitHub Desktop.

Select an option

Save dp0000000004-eng/05b0543de356f683d8710a082af52496 to your computer and use it in GitHub Desktop.
for api development
from rest_framework.response import Response
from rest_framework.decorators import api_view, renderer_classes
from .serializers import MenuItemSerializer, CatagorySerializer
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer, TemplateHTMLRenderer
from .models import MenuItem, Catagory
from rest_framework import status
from django.http import HttpResponse
from django.http import HttpResponseBadRequest
from django.shortcuts import get_object_or_404
from django.core.paginator import Paginator, EmptyPage
@api_view(['GET', 'POST', ])
@renderer_classes([BrowsableAPIRenderer, JSONRenderer, TemplateHTMLRenderer])
def menuItemsViews(request):
if request.method == 'GET':
items = MenuItem.objects.select_related('catagory').all()
catagory_name = request.query_params.get('catagory')
price_to = request.query_params.get('price')
search = request.query_params.get('search')
ordering = request.query_params.get('ordering')
perpage = request.query_params.get('perpage', default=2)
page = request.query_params.get('page', default=1)
if catagory_name:
items = items.filter(catagory__title=catagory_name)
if price_to:
items = items.filter(price=price_to)
if search:
items = items.filter(catagory__title__istartswith=search)
if ordering:
if ordering == "reversed__price":
items = items.order_by("-price")
elif ordering == "reversed__stock":
items = items.order_by('-inventory')
elif ordering == "reversed__title":
items.order_by('-catagory__title')
else:
ordered_list = ordering.split(",")
items = items.order_by(*ordered_list)
if int(perpage) > 5:
return HttpResponseBadRequest(f"Error {HttpResponseBadRequest.status_code} The limit of per page data is 5" )
paginator = Paginator(items, per_page=perpage)
try:
items = paginator.page(number=page)
except EmptyPage:
items = []
itemsSerializer = MenuItemSerializer(items, many=True)
return Response(
{
"items":itemsSerializer.data
},
template_name='data.html'
)
if request.method == "POST":
itemsSerializer = MenuItemSerializer(data=request.data, many=True)
itemsSerializer.is_valid(raise_exception=True)
itemsSerializer.save()
return Response(itemsSerializer.data, status.HTTP_201_CREATED)
@dp0000000004-eng

Copy link
Copy Markdown
Author

done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment