diff --git a/apps/examples/__init__.py b/apps/examples/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/examples/apps.py b/apps/examples/apps.py new file mode 100644 index 0000000..2f06e10 --- /dev/null +++ b/apps/examples/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ExamplesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'apps.examples' diff --git a/apps/examples/migrations/__init__.py b/apps/examples/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/examples/serializers.py b/apps/examples/serializers.py new file mode 100644 index 0000000..83f7c30 --- /dev/null +++ b/apps/examples/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers + + +class HTMLArraySerializer(serializers.Serializer): + name = serializers.CharField() + hours_open = serializers.IntegerField() + foods = serializers.ListField() diff --git a/apps/examples/urls.py b/apps/examples/urls.py new file mode 100644 index 0000000..061eec6 --- /dev/null +++ b/apps/examples/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + + +urlpatterns = [ + path('examples/html-array', views.HTMLArray.as_view(), name='examples-html-array'), +] diff --git a/apps/examples/views.py b/apps/examples/views.py new file mode 100644 index 0000000..2a7665f --- /dev/null +++ b/apps/examples/views.py @@ -0,0 +1,26 @@ +from rest_framework import views, permissions +from rest_framework.response import Response +from rest_framework.parsers import FormParser, MultiPartParser + +from .serializers import HTMLArraySerializer + + +class HTMLArray(views.APIView): + """ + An example of handling an array of fields posted from an HTML form: + + + + + """ + permission_classes = [permissions.AllowAny] + parser_classes = [FormParser, MultiPartParser] + + def post(self, request, format=None): + data = request.data.copy() + data['foods'] = request.data.getlist('foods[]') # Must be converted to list, not QueryDict + serializer = HTMLArraySerializer(data) + + # Here we're just returning the value for visibility, but you would normally use the + # serializer to insert into db. + return Response(serializer.data) diff --git a/project/settings.py b/project/settings.py index 20bca39..8862cdb 100644 --- a/project/settings.py +++ b/project/settings.py @@ -54,6 +54,10 @@ 'apps.mail', 'apps.user', 'apps.workers', + + # Examples + # !!! REMOVE ME IN PRODUCTION !!! + 'apps.examples', ] MIDDLEWARE = [ diff --git a/project/urls.py b/project/urls.py index 360a1cb..088c16d 100644 --- a/project/urls.py +++ b/project/urls.py @@ -17,6 +17,9 @@ path('', include('apps.file.urls')), path('', include('apps.user.urls')), + # Examples + path('', include('apps.examples.urls')), + # DRF API path('api/', api_root, name='index'), path('api-auth/', include('rest_framework.urls')),