diff --git a/django/seminar_project/db.sqlite3 b/django/seminar_project/db.sqlite3 index 2555de7..d4ed70a 100644 Binary files a/django/seminar_project/db.sqlite3 and b/django/seminar_project/db.sqlite3 differ diff --git a/django/seminar_project/lionapp/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/__init__.cpython-38.pyc index 77b4cda..6c746e1 100644 Binary files a/django/seminar_project/lionapp/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/admin.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/admin.cpython-38.pyc index 91b5bd4..66da4f1 100644 Binary files a/django/seminar_project/lionapp/__pycache__/admin.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/admin.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/apps.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/apps.cpython-38.pyc index 9dda1c5..93ea051 100644 Binary files a/django/seminar_project/lionapp/__pycache__/apps.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/apps.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/models.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/models.cpython-38.pyc index add97f5..baa9e0f 100644 Binary files a/django/seminar_project/lionapp/__pycache__/models.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/models.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/serializers.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/serializers.cpython-38.pyc index f2fb4e9..bea2746 100644 Binary files a/django/seminar_project/lionapp/__pycache__/serializers.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/serializers.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/urls.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/urls.cpython-38.pyc index 4e544f8..7ba2174 100644 Binary files a/django/seminar_project/lionapp/__pycache__/urls.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/urls.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/__pycache__/views.cpython-38.pyc b/django/seminar_project/lionapp/__pycache__/views.cpython-38.pyc index ba2fd16..659d593 100644 Binary files a/django/seminar_project/lionapp/__pycache__/views.cpython-38.pyc and b/django/seminar_project/lionapp/__pycache__/views.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/migrations/__pycache__/0001_initial.cpython-38.pyc b/django/seminar_project/lionapp/migrations/__pycache__/0001_initial.cpython-38.pyc index 90211ce..e4ca6f4 100644 Binary files a/django/seminar_project/lionapp/migrations/__pycache__/0001_initial.cpython-38.pyc and b/django/seminar_project/lionapp/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/django/seminar_project/lionapp/migrations/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/lionapp/migrations/__pycache__/__init__.cpython-38.pyc index 3d2078e..8a58c15 100644 Binary files a/django/seminar_project/lionapp/migrations/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/lionapp/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/member/__pycache__/__init__.cpython-38.pyc index 7247b10..b7da277 100644 Binary files a/django/seminar_project/member/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/member/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/admin.cpython-38.pyc b/django/seminar_project/member/__pycache__/admin.cpython-38.pyc index 0808c21..16c95cf 100644 Binary files a/django/seminar_project/member/__pycache__/admin.cpython-38.pyc and b/django/seminar_project/member/__pycache__/admin.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/apps.cpython-38.pyc b/django/seminar_project/member/__pycache__/apps.cpython-38.pyc index f5f5efe..d25921f 100644 Binary files a/django/seminar_project/member/__pycache__/apps.cpython-38.pyc and b/django/seminar_project/member/__pycache__/apps.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/models.cpython-38.pyc b/django/seminar_project/member/__pycache__/models.cpython-38.pyc index bb052ea..b8cee13 100644 Binary files a/django/seminar_project/member/__pycache__/models.cpython-38.pyc and b/django/seminar_project/member/__pycache__/models.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/urls.cpython-38.pyc b/django/seminar_project/member/__pycache__/urls.cpython-38.pyc index 29b0104..415d453 100644 Binary files a/django/seminar_project/member/__pycache__/urls.cpython-38.pyc and b/django/seminar_project/member/__pycache__/urls.cpython-38.pyc differ diff --git a/django/seminar_project/member/__pycache__/views.cpython-38.pyc b/django/seminar_project/member/__pycache__/views.cpython-38.pyc index b8fd21a..916f4a5 100644 Binary files a/django/seminar_project/member/__pycache__/views.cpython-38.pyc and b/django/seminar_project/member/__pycache__/views.cpython-38.pyc differ diff --git a/django/seminar_project/member/migrations/__pycache__/0001_initial.cpython-38.pyc b/django/seminar_project/member/migrations/__pycache__/0001_initial.cpython-38.pyc index 9ad422c..a2fc35d 100644 Binary files a/django/seminar_project/member/migrations/__pycache__/0001_initial.cpython-38.pyc and b/django/seminar_project/member/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/django/seminar_project/member/migrations/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/member/migrations/__pycache__/__init__.cpython-38.pyc index 4f86d3b..677a2c3 100644 Binary files a/django/seminar_project/member/migrations/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/member/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/seminar_project/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/seminar_project/__pycache__/__init__.cpython-38.pyc index 11bcc47..422d3f3 100644 Binary files a/django/seminar_project/seminar_project/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/seminar_project/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/seminar_project/__pycache__/settings.cpython-38.pyc b/django/seminar_project/seminar_project/__pycache__/settings.cpython-38.pyc index 2197598..91e631c 100644 Binary files a/django/seminar_project/seminar_project/__pycache__/settings.cpython-38.pyc and b/django/seminar_project/seminar_project/__pycache__/settings.cpython-38.pyc differ diff --git a/django/seminar_project/seminar_project/__pycache__/urls.cpython-38.pyc b/django/seminar_project/seminar_project/__pycache__/urls.cpython-38.pyc index 58cbb34..641e827 100644 Binary files a/django/seminar_project/seminar_project/__pycache__/urls.cpython-38.pyc and b/django/seminar_project/seminar_project/__pycache__/urls.cpython-38.pyc differ diff --git a/django/seminar_project/seminar_project/__pycache__/wsgi.cpython-38.pyc b/django/seminar_project/seminar_project/__pycache__/wsgi.cpython-38.pyc index 93eaff4..212acc0 100644 Binary files a/django/seminar_project/seminar_project/__pycache__/wsgi.cpython-38.pyc and b/django/seminar_project/seminar_project/__pycache__/wsgi.cpython-38.pyc differ diff --git a/django/seminar_project/seminar_project/settings.py b/django/seminar_project/seminar_project/settings.py index 31b1007..104f699 100644 --- a/django/seminar_project/seminar_project/settings.py +++ b/django/seminar_project/seminar_project/settings.py @@ -35,6 +35,7 @@ 'member', 'util', 'lionapp', + 'users', # 추가 'corsheaders', 'rest_framework', 'django.contrib.admin', @@ -155,3 +156,13 @@ STATIC_URL = '/static/' +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework_simplejwt.authentication.JWTAuthentication', + ), +} + +SIMPLE_JWT = { + 'USER_ID_FIELD': 'ID', + 'USER_ID_CLAIM': 'user_id', +} diff --git a/django/seminar_project/seminar_project/urls.py b/django/seminar_project/seminar_project/urls.py index b6552ca..1ce337b 100644 --- a/django/seminar_project/seminar_project/urls.py +++ b/django/seminar_project/seminar_project/urls.py @@ -11,4 +11,5 @@ path('lion/', include('lionapp.urls')), path('member/', include('member.urls')), path('', util_views.home, name='home'), # 기본 경로 추가 + path('users/', include('users.urls')) ] \ No newline at end of file diff --git a/django/seminar_project/users/models.py b/django/seminar_project/users/models.py index ba6cf05..c145b14 100644 --- a/django/seminar_project/users/models.py +++ b/django/seminar_project/users/models.py @@ -2,45 +2,57 @@ from django.contrib.auth.models import BaseUserManager, AbstractBaseUser class UserManager(BaseUserManager): - def create_user(self, email, name, password=None): - + def create_user(self, email, ID, name, password=None, generation=None, gender=None): + if not email: + raise ValueError('Users must have an email address') + if not ID: + raise ValueError('Users must have an ID') + user = self.model( email=self.normalize_email(email), + ID=ID, name=name, + generation=generation, + gender=gender, ) user.set_password(password) user.save(using=self._db) return user - def create_superuser(self, email, name, password): + def create_superuser(self, email, ID, name, password=None, generation=None, gender=None): user = self.create_user( email, + ID=ID, name=name, password=password, + generation=generation, + gender=gender, ) - user.is_admin = True user.save(using=self._db) return user class User(AbstractBaseUser): + ID = models.CharField(max_length=30, unique=True, primary_key=True) email = models.EmailField( verbose_name='email', max_length=100, unique=True, ) name = models.CharField(max_length=30) + generation = models.IntegerField(null=True, blank=True) + gender = models.CharField(max_length=10, null=True, blank=True) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) objects = UserManager() - USERNAME_FIELD = 'email' - REQUIRED_FIELDS = ['name'] + USERNAME_FIELD = 'ID' + REQUIRED_FIELDS = ['email', 'name'] def __str__(self): - return self.email + return self.ID def has_perm(self, perm, obj=None): return True @@ -51,6 +63,6 @@ def has_module_perms(self, app_label): @property def is_staff(self): return self.is_admin - + class Meta: - db_table = 'user' # 테이블명을 user로 설정 \ No newline at end of file + db_table = 'user' diff --git a/django/seminar_project/users/serializers.py b/django/seminar_project/users/serializers.py index 4f2dc26..7f99b33 100644 --- a/django/seminar_project/users/serializers.py +++ b/django/seminar_project/users/serializers.py @@ -1,18 +1,23 @@ -from django.contrib.auth.models import User from rest_framework import serializers -from django.contrib.auth import get_user_model - +from .models import User class UserSerializer(serializers.ModelSerializer): - password = serializers.CharField(write_only=True) - class Meta: - model = get_user_model() - fields = ('id', 'email', 'password', 'name') + model = User + fields = ['ID', 'email', 'name', 'password', 'generation', 'gender'] + extra_kwargs = {'password': {'write_only': True}} -# 패스워드가 필요없는 다른 테이블에서 사용할 용도 -class UserInfoSerializer(serializers.ModelSerializer): - - class Meta: - model = get_user_model() - fields = ('id', 'email', 'name') \ No newline at end of file + def create(self, validated_data): + if User.objects.filter(ID=validated_data['ID']).exists(): + raise serializers.ValidationError("ID already exists.") + + user = User( + email=validated_data['email'], + ID=validated_data['ID'], + name=validated_data['name'], + generation=validated_data.get('generation'), + gender=validated_data.get('gender') + ) + user.set_password(validated_data['password']) + user.save() + return user diff --git a/django/seminar_project/users/views.py b/django/seminar_project/users/views.py index ebbdfa3..749f563 100644 --- a/django/seminar_project/users/views.py +++ b/django/seminar_project/users/views.py @@ -9,38 +9,39 @@ from rest_framework_simplejwt.tokens import RefreshToken from users.serializers import UserSerializer +from users.models import User @api_view(['POST']) @permission_classes([AllowAny]) def signup(request): + ID = request.data.get('ID') email = request.data.get('email') password = request.data.get('password') name = request.data.get('name') + generation = request.data.get('generation') + gender = request.data.get('gender') serializer = UserSerializer(data=request.data) - serializer.email = email - serializer.name = name - - if serializer.is_valid(raise_exception=True): - user = serializer.save() - user.set_password(password) - user.save() - - return Response(serializer.data, status=status.HTTP_201_CREATED) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) @api_view(['POST']) @permission_classes([AllowAny]) def login(request): - email = request.data.get('email') + ID = request.data.get('ID') password = request.data.get('password') - user = authenticate(email=email, password=password) - if user is None: + try: + user = User.objects.get(ID=ID) + if not user.check_password(password): + return Response({'message': '아이디 또는 비밀번호가 일치하지 않습니다.'}, status=status.HTTP_401_UNAUTHORIZED) + except User.DoesNotExist: return Response({'message': '아이디 또는 비밀번호가 일치하지 않습니다.'}, status=status.HTTP_401_UNAUTHORIZED) refresh = RefreshToken.for_user(user) update_last_login(None, user) return Response({'refresh_token': str(refresh), - 'access_token': str(refresh.access_token), }, status=status.HTTP_200_OK) \ No newline at end of file + 'access_token': str(refresh.access_token)}, status=status.HTTP_200_OK) diff --git a/django/seminar_project/util/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/util/__pycache__/__init__.cpython-38.pyc index a0cda6c..0561102 100644 Binary files a/django/seminar_project/util/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/util/__pycache__/__init__.cpython-38.pyc differ diff --git a/django/seminar_project/util/__pycache__/admin.cpython-38.pyc b/django/seminar_project/util/__pycache__/admin.cpython-38.pyc index d9162f9..503c2e1 100644 Binary files a/django/seminar_project/util/__pycache__/admin.cpython-38.pyc and b/django/seminar_project/util/__pycache__/admin.cpython-38.pyc differ diff --git a/django/seminar_project/util/__pycache__/apps.cpython-38.pyc b/django/seminar_project/util/__pycache__/apps.cpython-38.pyc index 9c9f6bf..1771ed9 100644 Binary files a/django/seminar_project/util/__pycache__/apps.cpython-38.pyc and b/django/seminar_project/util/__pycache__/apps.cpython-38.pyc differ diff --git a/django/seminar_project/util/__pycache__/models.cpython-38.pyc b/django/seminar_project/util/__pycache__/models.cpython-38.pyc index 57d1f74..653306f 100644 Binary files a/django/seminar_project/util/__pycache__/models.cpython-38.pyc and b/django/seminar_project/util/__pycache__/models.cpython-38.pyc differ diff --git a/django/seminar_project/util/__pycache__/urls.cpython-38.pyc b/django/seminar_project/util/__pycache__/urls.cpython-38.pyc index a1d0a9b..bc93eb4 100644 Binary files a/django/seminar_project/util/__pycache__/urls.cpython-38.pyc and b/django/seminar_project/util/__pycache__/urls.cpython-38.pyc differ diff --git a/django/seminar_project/util/__pycache__/views.cpython-38.pyc b/django/seminar_project/util/__pycache__/views.cpython-38.pyc index edc7f52..37a2add 100644 Binary files a/django/seminar_project/util/__pycache__/views.cpython-38.pyc and b/django/seminar_project/util/__pycache__/views.cpython-38.pyc differ diff --git a/django/seminar_project/util/migrations/__pycache__/__init__.cpython-38.pyc b/django/seminar_project/util/migrations/__pycache__/__init__.cpython-38.pyc index ef7aaf4..3fc70b0 100644 Binary files a/django/seminar_project/util/migrations/__pycache__/__init__.cpython-38.pyc and b/django/seminar_project/util/migrations/__pycache__/__init__.cpython-38.pyc differ