New REST services for all entities
This commit is contained in:
		
							
								
								
									
										0
									
								
								api/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								api/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								api/admin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								api/admin.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
from django.contrib import admin
 | 
			
		||||
 | 
			
		||||
# Register your models here.
 | 
			
		||||
							
								
								
									
										6
									
								
								api/apps.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								api/apps.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
from django.apps import AppConfig
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ApiConfig(AppConfig):
 | 
			
		||||
    default_auto_field = 'django.db.models.BigAutoField'
 | 
			
		||||
    name = 'api'
 | 
			
		||||
							
								
								
									
										0
									
								
								api/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								api/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								api/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								api/models.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
from django.db import models
 | 
			
		||||
 | 
			
		||||
# Create your models here.
 | 
			
		||||
							
								
								
									
										31
									
								
								api/serializers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								api/serializers.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
from container.models import Container, ContainerType
 | 
			
		||||
from asset.models import Asset, GtinProduct
 | 
			
		||||
from rest_framework import serializers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContainerSerializer(serializers.HyperlinkedModelSerializer):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Container
 | 
			
		||||
        fields = ['url', 'id', 'named_id', 'container_type', 'color', 'description']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContainerTypeSerializer(serializers.HyperlinkedModelSerializer):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = ContainerType
 | 
			
		||||
        fields = ['url', 'id',
 | 
			
		||||
                  'named_id', 'description', 'width', 'height', 'length',
 | 
			
		||||
                  'inner_width', 'inner_height', 'inner_length',
 | 
			
		||||
                  'has_cover', 'contains_container']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AssetSerializer(serializers.HyperlinkedModelSerializer):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Asset
 | 
			
		||||
        fields = ['url', 'id', 'named_id', 'description', 'quantity', 'description']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GtinProductSerializer(serializers.HyperlinkedModelSerializer):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = GtinProduct
 | 
			
		||||
        fields = ['url', 'id', 'gtin', 'api_request', 'api_response', 'name', 'brand']
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								api/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								api/tests.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
 | 
			
		||||
# Create your tests here.
 | 
			
		||||
							
								
								
									
										15
									
								
								api/urls.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								api/urls.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
from django.urls import include, path
 | 
			
		||||
from rest_framework import routers
 | 
			
		||||
from .views import ContainerViewSet, ContainerTypeViewSet, AssetViewSet, GtinProductViewSet
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
router = routers.DefaultRouter()
 | 
			
		||||
router.register(r'containers', ContainerViewSet)
 | 
			
		||||
router.register(r'container_types', ContainerTypeViewSet)
 | 
			
		||||
router.register(r'assets', AssetViewSet)
 | 
			
		||||
router.register(r'products', GtinProductViewSet)
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
        path('', include(router.urls)),
 | 
			
		||||
        path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										42
									
								
								api/views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								api/views.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
from django.shortcuts import render
 | 
			
		||||
from rest_framework import viewsets
 | 
			
		||||
from rest_framework import permissions
 | 
			
		||||
from api.serializers import ContainerSerializer, ContainerTypeSerializer, AssetSerializer, GtinProductSerializer
 | 
			
		||||
from container.models import Container, ContainerType
 | 
			
		||||
from asset.models import Asset, GtinProduct
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContainerViewSet(viewsets.ModelViewSet):
 | 
			
		||||
    """
 | 
			
		||||
    API endpoint that allows containers to be viewed or edited.
 | 
			
		||||
    """
 | 
			
		||||
    queryset = Container.objects.all().order_by('named_id')
 | 
			
		||||
    serializer_class = ContainerSerializer
 | 
			
		||||
    permission_classes = [permissions.IsAuthenticated]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContainerTypeViewSet(viewsets.ModelViewSet):
 | 
			
		||||
    """
 | 
			
		||||
    API endpoint that allows container-types to be viewed or edited.
 | 
			
		||||
    """
 | 
			
		||||
    queryset = ContainerType.objects.all()
 | 
			
		||||
    serializer_class = ContainerTypeSerializer
 | 
			
		||||
    permission_classes = [permissions.IsAuthenticated]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AssetViewSet(viewsets.ModelViewSet):
 | 
			
		||||
    """
 | 
			
		||||
    API endpoint that allows containers to be viewed or edited.
 | 
			
		||||
    """
 | 
			
		||||
    queryset = Asset.objects.all().order_by('named_id')
 | 
			
		||||
    serializer_class = AssetSerializer
 | 
			
		||||
    permission_classes = [permissions.IsAuthenticated]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GtinProductViewSet(viewsets.ModelViewSet):
 | 
			
		||||
    """
 | 
			
		||||
    API endpoint that allows containers to be viewed or edited.
 | 
			
		||||
    """
 | 
			
		||||
    queryset = GtinProduct.objects.all().order_by('gtin')
 | 
			
		||||
    serializer_class = GtinProductSerializer
 | 
			
		||||
    permission_classes = [permissions.IsAuthenticated]
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
from django.urls import path
 | 
			
		||||
 | 
			
		||||
from django.urls import include, path
 | 
			
		||||
from container.views import ContainerListView, ContainerUpdateView, ContainerCreateView, ContainerDetailView, ContainerDeleteView, ContainerPrintLabelView, ContainerImportView
 | 
			
		||||
from container.views import ContainerTypeListView, ContainerTypeDetailView, ContainerTypeCreateView, ContainerTypeUpdateView, ContainerTypeDeleteView, ContainerTypeImportView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
app_name = 'container'
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    path('', ContainerListView.as_view(), name='list'),
 | 
			
		||||
@@ -18,5 +18,6 @@ urlpatterns = [
 | 
			
		||||
    path('type/import/', ContainerTypeImportView.as_view(), name='container_type_import'),
 | 
			
		||||
    path('type/edit/<int:pk>/', ContainerTypeUpdateView.as_view(), name='container_type_update'),
 | 
			
		||||
    path('type/delete/<int:pk>/', ContainerTypeDeleteView.as_view(), name='container_type_delete'),
 | 
			
		||||
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ from django.views import generic
 | 
			
		||||
from .models import Container, ContainerType
 | 
			
		||||
import logging, json, re
 | 
			
		||||
from django.core.exceptions import ObjectDoesNotExist
 | 
			
		||||
from django.contrib.auth.decorators import login_required
 | 
			
		||||
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -304,3 +304,4 @@ class ContainerTypeImportView(LoginRequiredMixin, generic.TemplateView):
 | 
			
		||||
                finally:
 | 
			
		||||
                    ct.save()
 | 
			
		||||
        return super().get(request)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ INSTALLED_APPS = [
 | 
			
		||||
    'asset',
 | 
			
		||||
    'container',
 | 
			
		||||
    'booker',
 | 
			
		||||
    'api',
 | 
			
		||||
    'rest_framework',
 | 
			
		||||
    'django.contrib.admin',
 | 
			
		||||
    'django.contrib.auth',
 | 
			
		||||
    'django.contrib.contenttypes',
 | 
			
		||||
@@ -165,4 +167,14 @@ LOGGING = {
 | 
			
		||||
        'handlers': ['console'],
 | 
			
		||||
        'level': 'DEBUG',
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
REST_FRAMEWORK = {
 | 
			
		||||
    # Use Django's standard `django.contrib.auth` permissions,
 | 
			
		||||
    # or allow read-only access for unauthenticated users.
 | 
			
		||||
    'DEFAULT_PERMISSION_CLASSES': [
 | 
			
		||||
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
 | 
			
		||||
    ],
 | 
			
		||||
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
 | 
			
		||||
    'PAGE_SIZE': 10
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,4 +29,5 @@ urlpatterns = [
 | 
			
		||||
    path('booker/', include('booker.urls')),
 | 
			
		||||
    path('admin/', admin.site.urls),
 | 
			
		||||
    path('accounts/', include('django.contrib.auth.urls')),
 | 
			
		||||
    path('api/', include('api.urls')),
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user