From 27117122ddc1304541804a41848169be6fb84c77 Mon Sep 17 00:00:00 2001 From: Marshall Lee Date: Tue, 24 May 2022 09:51:39 +0900 Subject: [PATCH 1/3] =?UTF-8?q?swagger=20=EB=AC=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/serializer.py | 30 ++++++++++++++++++++++++++++++ user/views.py | 3 +++ 2 files changed, 33 insertions(+) create mode 100644 user/serializer.py diff --git a/user/serializer.py b/user/serializer.py new file mode 100644 index 0000000..0fabbb4 --- /dev/null +++ b/user/serializer.py @@ -0,0 +1,30 @@ +from rest_framework import serializers +from user.models import User, UserProfile + + +class UserSerializer(serializers.ModelSerializer): + email = serializers.EmailField() + password = serializers.CharField() + name = serializers.CharField() + + class Meta: + model = User + fields = '__all__' + # fields = ('email, password, name',) + + +class UserProfileSerializer(serializers.ModelSerializer): + mobile = serializers.CharField(max_length=11) + birthday = serializers.DateField() + is_solar_calendar = serializers.BooleanField() + agreed_with_mkt_info_subscription = serializers.BooleanField() + + class Meta: + model = UserProfile + fields = '__all__' + # fields = ('mobile', 'birthday', 'is_solar_calendar', 'agreed_with_mkt_info_subscription',) + + +class SignupRequestBodySerializer(UserSerializer, UserProfileSerializer): + def __init__(self): + super(SignupRequestBodySerializer, self).__init__() diff --git a/user/views.py b/user/views.py index c184715..968723a 100644 --- a/user/views.py +++ b/user/views.py @@ -7,17 +7,20 @@ from django.contrib.auth import authenticate, logout from django.conf import settings from django.shortcuts import redirect +from drf_yasg.utils import swagger_auto_schema from ginza.redis import redis_conn from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from user.models import User, UserProfile +from user.serializer import SignupRequestBodySerializer logger = logging.getLogger('api') class SignupView(APIView): + @swagger_auto_schema(request_body=SignupRequestBodySerializer) def post(self, request, *args, **kwargs): try: data = request.data From f5faeda2eb1fb5af338de9b946a4dc45fbeb2858 Mon Sep 17 00:00:00 2001 From: Marshall Lee Date: Fri, 27 May 2022 10:41:12 +0900 Subject: [PATCH 2/3] =?UTF-8?q?swagger=20=EB=AC=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ginza/settings/base.py | 2 ++ ginza/settings/dev.py | 2 +- ginza/settings/local.py | 4 ++++ requirements.txt | 1 + user/serializer.py | 26 +++++++------------------- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/ginza/settings/base.py b/ginza/settings/base.py index 378f652..ba91edf 100644 --- a/ginza/settings/base.py +++ b/ginza/settings/base.py @@ -30,6 +30,7 @@ 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', + 'corsheaders' ] + CUSTOMIZED_APPS + THIRD_PARTY_APPS MIDDLEWARE = [ @@ -40,6 +41,7 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', ] AUTH_USER_MODEL = 'user.User' diff --git a/ginza/settings/dev.py b/ginza/settings/dev.py index fa9ca68..1c860d0 100644 --- a/ginza/settings/dev.py +++ b/ginza/settings/dev.py @@ -137,4 +137,4 @@ KAKAO_REST_API_KEY = env.str('KAKAO_REST_API_KEY') KAKAO_REDIRECT_URI = env.str('KAKAO_REDIRECT_URI') -KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') \ No newline at end of file +KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') diff --git a/ginza/settings/local.py b/ginza/settings/local.py index 47ab072..d3c2e62 100644 --- a/ginza/settings/local.py +++ b/ginza/settings/local.py @@ -132,3 +132,7 @@ KAKAO_REST_API_KEY = env.str('KAKAO_REST_API_KEY') KAKAO_REDIRECT_URI = env.str('KAKAO_REDIRECT_URI') KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') + +CORS_ALLOW_ALL_ORIGINS = True + +CORS_ALLOW_CREDENTIALS = True diff --git a/requirements.txt b/requirements.txt index d9f49fd..c4d37bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,7 @@ coreschema==0.0.4 coverage==6.3.2 Deprecated==1.2.13 Django==3.2.13 +django-cors-headers==3.12.0 django-environ==0.8.1 django-extensions==3.1.5 django-redis==5.2.0 diff --git a/user/serializer.py b/user/serializer.py index 0fabbb4..65c52ea 100644 --- a/user/serializer.py +++ b/user/serializer.py @@ -1,30 +1,18 @@ from rest_framework import serializers -from user.models import User, UserProfile -class UserSerializer(serializers.ModelSerializer): +class SignupRequestBodySerializer(serializers.Serializer): + def update(self, instance, validated_data): + pass + + def create(self, validated_data): + pass + email = serializers.EmailField() password = serializers.CharField() name = serializers.CharField() - - class Meta: - model = User - fields = '__all__' - # fields = ('email, password, name',) - - -class UserProfileSerializer(serializers.ModelSerializer): mobile = serializers.CharField(max_length=11) birthday = serializers.DateField() is_solar_calendar = serializers.BooleanField() agreed_with_mkt_info_subscription = serializers.BooleanField() - class Meta: - model = UserProfile - fields = '__all__' - # fields = ('mobile', 'birthday', 'is_solar_calendar', 'agreed_with_mkt_info_subscription',) - - -class SignupRequestBodySerializer(UserSerializer, UserProfileSerializer): - def __init__(self): - super(SignupRequestBodySerializer, self).__init__() From 9bd34c723eefec27df1aa3ed54b8d446a085ac78 Mon Sep 17 00:00:00 2001 From: Marshall Lee Date: Mon, 30 May 2022 17:19:57 +0900 Subject: [PATCH 3/3] =?UTF-8?q?swagger=20=EB=AC=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ginza/settings/local.py | 3 +-- user/urls.py | 4 ++-- user/views.py | 50 ++++++++++++++++++++++++----------------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/ginza/settings/local.py b/ginza/settings/local.py index d3c2e62..3c5796d 100644 --- a/ginza/settings/local.py +++ b/ginza/settings/local.py @@ -133,6 +133,5 @@ KAKAO_REDIRECT_URI = env.str('KAKAO_REDIRECT_URI') KAKAO_SECRET_KEY = env.str('KAKAO_SECRET_KEY') -CORS_ALLOW_ALL_ORIGINS = True - +CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True diff --git a/user/urls.py b/user/urls.py index a8a936b..5b59f59 100644 --- a/user/urls.py +++ b/user/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from user.views import SignupView, LoginView, LogoutView, KakaoOAuthLoginView, KakaoOAuthLoginCallbackView +from user.views import SignupView, LoginView, LogoutView, KakaoOAuthLoginView from util.common import API_COMMON_PATH urlpatterns = [ @@ -7,6 +7,6 @@ path(API_COMMON_PATH + 'auth/login', LoginView.as_view()), path(API_COMMON_PATH + 'auth/logout', LogoutView.as_view()), path(API_COMMON_PATH + 'oauth/kakao/login', KakaoOAuthLoginView.as_view()), - path(API_COMMON_PATH + 'oauth/kakao/login/callback', KakaoOAuthLoginCallbackView.as_view()) + # path(API_COMMON_PATH + 'oauth/kakao/login/callback', KakaoOAuthLoginCallbackView.as_view()) ] diff --git a/user/views.py b/user/views.py index 968723a..934d841 100644 --- a/user/views.py +++ b/user/views.py @@ -1,3 +1,5 @@ +import http + import binascii import json import logging @@ -99,24 +101,29 @@ def post(self, request): # reference: https://velog.io/@junsikchoi/Django%EB%A1%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%86%8C%EC%85%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%9D%84-%ED%95%B4%EB%B3%B4%EC%9E%90 -class KakaoOAuthLoginCallbackView(APIView): - def get(self, request): - auth_code = request.GET.get('code') - kakao_token_api = 'https://kauth.kakao.com/oauth/token' - data = { - 'grant_type': 'authorization_code', - 'client_id': settings.KAKAO_REST_API_KEY, - 'redirection_uri': settings.KAKAO_REDIRECT_URI, - 'client_secret': settings.KAKAO_SECRET_KEY, - 'code': auth_code - } - token_response = requests.post(kakao_token_api, data=data) - access_token = token_response.json().get('access_token') - user_info_response = requests.get('https://kapi.kakao.com/v2/user/me', headers={"Authorization": f'Bearer ${access_token}'}) - response = { - 'user_info': user_info_response.json() - } - return Response(response) +# class KakaoOAuthLoginCallbackView(APIView): +# def get(self, request): +# auth_code = request.GET.get('code') +# kakao_token_api = 'https://kauth.kakao.com/oauth/token' +# data = { +# 'grant_type': 'authorization_code', +# 'client_id': settings.KAKAO_REST_API_KEY, +# 'redirection_uri': settings.KAKAO_REDIRECT_URI, +# 'client_secret': settings.KAKAO_SECRET_KEY, +# 'code': auth_code +# } +# token_response = requests.post(kakao_token_api, data=data) +# access_token = token_response.json().get('access_token') +# +# headers = { +# "Authorization": f'Bearer ${access_token}', +# "Content-type": "application/x-www-form-urlencoded;charset=utf-8" +# } +# user_info_response = requests.get('https://kapi.kakao.com/v2/user/me', headers=headers) +# response = { +# 'user_info': user_info_response.json() +# } +# return Response(response) class KakaoOAuthLoginView(APIView): @@ -125,5 +132,8 @@ def get(self, request): redirect_url = settings.KAKAO_REDIRECT_URI url = "https://kauth.kakao.com/oauth/authorize?response_type=code&client_id={0}&redirect_uri={1}".\ format(client_id, redirect_url) - res = redirect(url) - return res + + response = { + 'url': url + } + return Response(status=http.HTTPStatus.OK, data=response)