diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..00a609e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "pyapp" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/pyapp/db.sqlite3 b/pyapp/db.sqlite3 index fdad6d0..1ae40fb 100755 Binary files a/pyapp/db.sqlite3 and b/pyapp/db.sqlite3 differ diff --git a/pyapp/pyapp/__pycache__/settings.cpython-311.pyc b/pyapp/pyapp/__pycache__/settings.cpython-311.pyc index 28894ec..d7c7789 100644 Binary files a/pyapp/pyapp/__pycache__/settings.cpython-311.pyc and b/pyapp/pyapp/__pycache__/settings.cpython-311.pyc differ diff --git a/pyapp/pyapp/__pycache__/urls.cpython-311.pyc b/pyapp/pyapp/__pycache__/urls.cpython-311.pyc index 047a373..e58169b 100644 Binary files a/pyapp/pyapp/__pycache__/urls.cpython-311.pyc and b/pyapp/pyapp/__pycache__/urls.cpython-311.pyc differ diff --git a/pyapp/pyapp/api/__pycache__/config.cpython-311.pyc b/pyapp/pyapp/api/__pycache__/config.cpython-311.pyc deleted file mode 100755 index 7b69ba6..0000000 Binary files a/pyapp/pyapp/api/__pycache__/config.cpython-311.pyc and /dev/null differ diff --git a/pyapp/pyapp/settings.py b/pyapp/pyapp/settings.py index 6c24e75..93ebb49 100755 --- a/pyapp/pyapp/settings.py +++ b/pyapp/pyapp/settings.py @@ -37,6 +37,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', + 'pyapp_api', 'pyapp', ] @@ -50,6 +52,11 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] +REST_FRAMEWORK = { + 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + 'PAGE_SIZE': 10 +} + ROOT_URLCONF = 'pyapp.urls' TEMPLATES = [ diff --git a/pyapp/pyapp/templates/pyapp.html b/pyapp/pyapp/templates/pyapp.html index 069b404..d9cae59 100755 --- a/pyapp/pyapp/templates/pyapp.html +++ b/pyapp/pyapp/templates/pyapp.html @@ -34,7 +34,7 @@
-

PyApp Inventory

+

PyApp Item List Inventory

{% for item in all_items %}
diff --git a/pyapp/pyapp/urls.py b/pyapp/pyapp/urls.py index 4b81f8d..d0b1e27 100755 --- a/pyapp/pyapp/urls.py +++ b/pyapp/pyapp/urls.py @@ -18,12 +18,11 @@ from pyapp import views from django.contrib import admin from django.urls import path,include from pyapp.views import pyapp_home -from pyapp.views import api_home - +from pyapp_api import urls as pyapp_urls urlpatterns = [ -path('admin/', admin.site.urls), path("", views.index, name= "index"), -path("pyapp/", views.pyapp_home, name= "ShoppingApp"), -path("api", views.api_home, name= "api"), +path('admin/', admin.site.urls), +path("pyapp/", views.pyapp_home, name= "Item List App"), +path('api/', include(pyapp_urls)), ] \ No newline at end of file diff --git a/pyapp/pyapp/views.py b/pyapp/pyapp/views.py index e679801..deae9ce 100755 --- a/pyapp/pyapp/views.py +++ b/pyapp/pyapp/views.py @@ -9,7 +9,7 @@ class ShoppingItemViewSet(viewsets.ModelViewSet): serializer_class = ShoppingItemSerializer def index(response): - return HttpResponse("Welcome to the pyapp Shopping") + return HttpResponse("Welcome to the Pyapp Item List") def pyapp_home(request): if request.method == 'POST': diff --git a/pyapp/pyapp_api/__init__.py b/pyapp/pyapp_api/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/pyapp/pyapp_api/admin.py b/pyapp/pyapp_api/admin.py new file mode 100755 index 0000000..8c38f3f --- /dev/null +++ b/pyapp/pyapp_api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/pyapp/pyapp/api/__pycache__/api-client.py b/pyapp/pyapp_api/api-client.py similarity index 100% rename from pyapp/pyapp/api/__pycache__/api-client.py rename to pyapp/pyapp_api/api-client.py diff --git a/pyapp/pyapp_api/apps.py b/pyapp/pyapp_api/apps.py new file mode 100755 index 0000000..533edf7 --- /dev/null +++ b/pyapp/pyapp_api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PyappApiConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'pyapp_api' diff --git a/pyapp/pyapp_api/migrations/__init__.py b/pyapp/pyapp_api/migrations/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/pyapp/pyapp_api/migrations/__pycache__/__init__.cpython-311.pyc b/pyapp/pyapp_api/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..5f04cf2 Binary files /dev/null and b/pyapp/pyapp_api/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/pyapp/pyapp_api/models.py b/pyapp/pyapp_api/models.py new file mode 100755 index 0000000..71a8362 --- /dev/null +++ b/pyapp/pyapp_api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/pyapp/pyapp_api/serializers.py b/pyapp/pyapp_api/serializers.py new file mode 100644 index 0000000..88c0cbd --- /dev/null +++ b/pyapp/pyapp_api/serializers.py @@ -0,0 +1,13 @@ +from rest_framework import serializers +from pyapp.models import ShoppingItem +from pyapp.models import Product + +class ShoppingItemSerializer(serializers.ModelSerializer): + class Meta: + model = ShoppingItem + fields = '__all__' + +class ProductSerializer(serializers.ModelSerializer): + class Meta: + model = Product + fields = '__all__' \ No newline at end of file diff --git a/pyapp/pyapp_api/tests.py b/pyapp/pyapp_api/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/pyapp/pyapp_api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/pyapp/pyapp_api/urls.py b/pyapp/pyapp_api/urls.py new file mode 100644 index 0000000..2e27289 --- /dev/null +++ b/pyapp/pyapp_api/urls.py @@ -0,0 +1,13 @@ +from django.urls import path,include +from rest_framework import routers + +from . import views + +router = routers.DefaultRouter() +router.register(r'item', views.ShoppingItemList) +router.register(r'product', views.ProductList) + +urlpatterns = [ + path('', include(router.urls)), + path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) +] \ No newline at end of file diff --git a/pyapp/pyapp_api/views.py b/pyapp/pyapp_api/views.py new file mode 100755 index 0000000..e0302fe --- /dev/null +++ b/pyapp/pyapp_api/views.py @@ -0,0 +1,54 @@ +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status, permissions, viewsets +from rest_framework import permissions +from pyapp.models import ShoppingItem, Product +from .serializers import ShoppingItemSerializer, ProductSerializer + +class ShoppingItemList(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = ShoppingItem.objects.all().order_by('name') + serializer_class = ShoppingItemSerializer + permission_classes = [permissions.AllowAny] + + +class ProductList(viewsets.ModelViewSet): + """ + API endpoint that allows groups to be viewed or edited. + """ + queryset = Product.objects.all().order_by('title') + serializer_class = ProductSerializer + permission_classes = [permissions.IsAuthenticated] + +class ShoppingListApi(APIView): + # add permission to check if user is authenticated + permission_classes = [permissions.IsAuthenticated] + + # 1. List all + def get(self, request, *args, **kwargs): + ''' + List all the todo items for given requested user + ''' + ShoppingItemList = ShoppingItem.objects.filter(user = request.user.id) + serializer = ShoppingItemSerializer(ShoppingItemList, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + + # 2. Create + def post(self, request, *args, **kwargs): + ''' + Create the ShoppingItem with given todo data + ''' + data = { + 'name': request.data.get('name'), + 'price': request.data.get('price'), + 'quantity': request.data.get('quantity'), + 'done': False + } + serializer = ShoppingItemSerializer(data=data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) + + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/pyapp/sql-scripts b/pyapp/sql-scripts new file mode 100644 index 0000000..23cb643 --- /dev/null +++ b/pyapp/sql-scripts @@ -0,0 +1,13 @@ +-- database: /Users/kotyczka/repositories/kotyczka/apps/django/pyapp/db.sqlite3 + +-- Drücken Sie die ▷-Schaltfläche oben rechts im Fenster, um die gesamte Datei auszuführen. + +insert into pyapp_shoppingitem +SELECT * FROM migration_shoppingitem; +commit; + +create table pyapp_shoppingitem as select * from migration_shoppingitem where 1 = 0; +commit; + +drop table pyapp_product +commit; \ No newline at end of file