From dd29a8126099adef50abaa00356818436d928564 Mon Sep 17 00:00:00 2001 From: ZoeLiao Date: Mon, 11 May 2020 23:10:36 +0800 Subject: [PATCH 1/3] Add basic swagger and user --- src/api/demo/settings.py | 8 -------- src/api/demo/urls.py | 8 +++++--- src/api/user/migrations/0001_initial.py | 22 ++++++++++++++++++++++ src/api/user/models.py | 6 +++++- src/api/user/serializers.py | 4 ++-- src/api/user/views.py | 7 +++---- 6 files changed, 37 insertions(+), 18 deletions(-) create mode 100644 src/api/user/migrations/0001_initial.py diff --git a/src/api/demo/settings.py b/src/api/demo/settings.py index 9dfbbc7..0cd341b 100644 --- a/src/api/demo/settings.py +++ b/src/api/demo/settings.py @@ -124,11 +124,3 @@ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') - -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' - ] -} diff --git a/src/api/demo/urls.py b/src/api/demo/urls.py index aa86255..831c871 100644 --- a/src/api/demo/urls.py +++ b/src/api/demo/urls.py @@ -22,14 +22,16 @@ path, re_path, ) +from user import views as user_view # basic urls urlpatterns = [ path('admin/', admin.site.urls), - path('api/', include([ - path('users/', include('user.urls')), - ])) + path('users/', user_view.UsersView.as_view()), + #path('api/', include([ + # path('users/', include('user.urls')), + #])) ] diff --git a/src/api/user/migrations/0001_initial.py b/src/api/user/migrations/0001_initial.py new file mode 100644 index 0000000..4e7dc60 --- /dev/null +++ b/src/api/user/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.6 on 2020-05-09 14:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)), + ('email', models.EmailField(max_length=254, unique=True)), + ('name', models.CharField(max_length=100)), + ], + ), + ] diff --git a/src/api/user/models.py b/src/api/user/models.py index 71a8362..ec9e528 100644 --- a/src/api/user/models.py +++ b/src/api/user/models.py @@ -1,3 +1,7 @@ from django.db import models -# Create your models here. + +class User(models.Model): + id = models.AutoField(auto_created=True, primary_key=True) + email = models.EmailField(unique=True) + name = models.CharField(max_length=100) diff --git a/src/api/user/serializers.py b/src/api/user/serializers.py index 03dfbe1..f284eff 100644 --- a/src/api/user/serializers.py +++ b/src/api/user/serializers.py @@ -1,8 +1,8 @@ -from django.contrib.auth.models import User +from user.models import User from rest_framework import serializers -class UserSerializer(serializers.HyperlinkedModelSerializer): +class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__' diff --git a/src/api/user/views.py b/src/api/user/views.py index 46dd18b..13b6aa9 100644 --- a/src/api/user/views.py +++ b/src/api/user/views.py @@ -1,10 +1,9 @@ -from django.shortcuts import render from django.http import JsonResponse from django.db import transaction from rest_framework.generics import GenericAPIView -from user.serializers import UserSerializer -from django.contrib.auth.models import User +from user.serializers import UserSerializer +from user.models import User class UsersView(GenericAPIView): @@ -28,4 +27,4 @@ def post(self, request, *args, **krgs): data = serializer.data except Exception as e: data = {'error': str(e)} - return JsonResponse(data, safe=False) + return JsonResponse(data) From fe9e0a8eb6f9cbb95654b49dc2135ac8a555bac9 Mon Sep 17 00:00:00 2001 From: ZoeLiao Date: Tue, 12 May 2020 00:44:23 +0800 Subject: [PATCH 2/3] Add swagger_auto_schema --- src/api/user/views.py | 44 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/api/user/views.py b/src/api/user/views.py index 13b6aa9..a227f70 100644 --- a/src/api/user/views.py +++ b/src/api/user/views.py @@ -1,7 +1,12 @@ from django.http import JsonResponse from django.db import transaction from rest_framework.generics import GenericAPIView - +from rest_framework.parsers import ( + FormParser, + MultiPartParser +) +from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi from user.serializers import UserSerializer from user.models import User @@ -10,13 +15,48 @@ class UsersView(GenericAPIView): queryset = User.objects.all() serializer_class = UserSerializer + parser_classes = (FormParser, MultiPartParser) + + @swagger_auto_schema( + operation_summary='我是 GET 的摘要', + operation_description='我是 GET 的說明', + manual_parameters=[ + openapi.Parameter( + name='email', + in_=openapi.IN_PATH, + description='Email', + type=openapi.TYPE_STRING + ), + ] + ) def get(self, request, *args, **krgs): users = self.get_queryset() serializer = self.serializer_class(users, many=True) data = serializer.data return JsonResponse(data, safe=False) + @swagger_auto_schema( + operation_summary='我是 POST 的摘要', + operation_description='我是 POST 的說明', + # request_body=openapi.Schema( + # type=openapi.TYPE_OBJECT, + # properties={ + # 'name': openapi.Schema( + # type=openapi.TYPE_STRING, + # description='User Name' + # ) + # } + # ) + manual_parameters=[ + openapi.Parameter( + name='image', + in_=openapi.IN_FORM, + description='Image', + type=openapi.TYPE_FILE + ), + ] + ) def post(self, request, *args, **krgs): data = request.data try: @@ -27,4 +67,4 @@ def post(self, request, *args, **krgs): data = serializer.data except Exception as e: data = {'error': str(e)} - return JsonResponse(data) + return JsonResponse(data) \ No newline at end of file From 65eefb116c27bee50d5b2900226e76cfca613841 Mon Sep 17 00:00:00 2001 From: ZoeLiao Date: Tue, 12 May 2020 00:49:41 +0800 Subject: [PATCH 3/3] Add depracated=True --- src/api/user/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/api/user/views.py b/src/api/user/views.py index a227f70..722e5b2 100644 --- a/src/api/user/views.py +++ b/src/api/user/views.py @@ -55,7 +55,8 @@ def get(self, request, *args, **krgs): description='Image', type=openapi.TYPE_FILE ), - ] + ], + deprecated=True ) def post(self, request, *args, **krgs): data = request.data @@ -67,4 +68,4 @@ def post(self, request, *args, **krgs): data = serializer.data except Exception as e: data = {'error': str(e)} - return JsonResponse(data) \ No newline at end of file + return JsonResponse(data)