김대연

모델 업데이트 및 리팩토링

1 -from django.contrib import admin
2 -
3 -# Register your models here.
1 -from django.apps import AppConfig
2 -
3 -
4 -class GroupConfig(AppConfig):
5 - name = 'group'
1 -# Generated by Django 3.0.7 on 2020-06-09 17:57
2 -
3 -from django.conf import settings
4 -from django.db import migrations, models
5 -
6 -
7 -class Migration(migrations.Migration):
8 -
9 - initial = True
10 -
11 - dependencies = [
12 - migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13 - ]
14 -
15 - operations = [
16 - migrations.CreateModel(
17 - name='UserGroup',
18 - fields=[
19 - ('group_name', models.CharField(max_length=20, primary_key=True, serialize=False, unique=True)),
20 - ('owner_email', models.EmailField(max_length=254)),
21 - ('group_users', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Group User')),
22 - ],
23 - ),
24 - ]
1 -from django.db import models
2 -from user.models import User
3 -
4 -class UserGroup(models.Model):
5 - #group_id = models.AutoField(primary_key = True, blank = True)
6 - group_name = models.CharField(primary_key = True, unique = True, max_length=20)
7 - owner_email = models.EmailField(max_length=254)
8 - #owner = models.ForeignKey(User, verbose_name="Group Owner", on_delete=models.CASCADE)
9 - group_users = models.ManyToManyField(User, verbose_name="Group User")
10 -
11 - def user_to_group(self, user):
12 - self.group_users.add(user)
13 - #UserGroup.save(using=self._db)
14 - #return group
15 -
16 -# Create your models here.
1 -from rest_framework import serializers
2 -from .models import UserGroup
3 -
4 -class CreateUserGroupSerializer(serializers.Serializer):
5 - group_name = serializers.CharField(allow_blank=False, max_length = 100)
6 -
7 -class AddUserSerializer(serializers.Serializer):
8 - group_name = serializers.CharField(allow_blank=False, max_length = 100)
9 - user_id = serializers.IntegerField()
10 -
11 -class UserGroupSerializer(serializers.ModelSerializer):
12 - class Meta:
13 - model = UserGroup
14 - fields = ("group_name","owner_email","group_users")
1 -from django.test import TestCase
2 -
3 -# Create your tests here.
1 -from django.conf.urls import url, include
2 -from .views import (
3 - CreateGroupAPI,
4 - GroupListAPI,
5 - AddUserAPI
6 - )
7 -
8 -urlpatterns =[
9 - url("^creategroup/$", CreateGroupAPI.as_view()),
10 - url("^grouplist/$", GroupListAPI.as_view()),
11 - url("^adduser/$", AddUserAPI.as_view()),
12 -]
1 -from rest_framework import viewsets, permissions, generics, mixins, status
2 -from rest_framework.response import Response
3 -from knox.models import AuthToken
4 -
5 -from .models import UserGroup
6 -from user.models import User
7 -
8 -from .serializers import (UserGroupSerializer, CreateUserGroupSerializer, AddUserSerializer)
9 -from user.serializers import UserSerializer
10 -
11 -class CreateGroupAPI(generics.GenericAPIView):
12 - serializer_class = CreateUserGroupSerializer
13 - permission_classes = [permissions.IsAuthenticated]
14 -
15 - def post(self, request, *args, **kwargs):
16 - serializer = self.get_serializer(data=request.data)
17 - serializer.is_valid(raise_exception=True)
18 -
19 - input_name = request.data["group_name"]
20 - input_owner = UserSerializer(self.request.user).data
21 -
22 - group, created = UserGroup.objects.get_or_create(group_name = input_name, owner_email = input_owner["email"])
23 - if created:
24 - group.save()
25 - group.user_to_group(request.user)
26 - group.save()
27 - else:
28 - body = {"message": "already exist"}
29 - return Response(body, status=status.HTTP_400_BAD_REQUEST)
30 -
31 - return Response(UserGroupSerializer(group).data)
32 -
33 - def get(self, request, *args, **kwargs):
34 - return self.retrieve(request, *args, **kwargs)
35 -
36 -class AddUserAPI(generics.GenericAPIView):
37 - serializer_class = AddUserSerializer
38 - permission_classes = [permissions.IsAuthenticated]
39 -
40 - def post(self, request, *args, **kwargs):
41 - serializer = self.get_serializer(data=request.data)
42 - serializer.is_valid(raise_exception=True)
43 -
44 - input_name = request.data["group_name"]
45 - input_user = request.data["user_id"]
46 - input_owner = UserSerializer(self.request.user).data
47 -
48 - group, created = UserGroup.objects.get_or_create(group_name = input_name)
49 -
50 -
51 - if(input_owner["email"]!=UserGroupSerializer(group).data["owner_email"]):
52 - body = {"message": "not group owner"}
53 - return Response(body, status=status.HTTP_401_UNAUTHORIZED)
54 -
55 - if created:
56 - body = {"message": "group doesn't exist"}
57 - return Response(body, status=status.HTTP_400_BAD_REQUEST)
58 - else:
59 - try :
60 - user= User.objects.get(id = input_user)
61 - except User.DoesNotExist:
62 - body = {"message": "user doesn't exist"}
63 - return Response(body, status=status.HTTP_400_BAD_REQUEST)
64 - group.user_to_group(user)
65 - group.save()
66 -
67 - return Response(UserGroupSerializer(group).data)
68 -
69 - def get(self, request, *args, **kwargs):
70 - return self.retrieve(request, *args, **kwargs)
71 -
72 -
73 -class GroupListAPI(generics.ListAPIView):
74 - queryset = UserGroup.objects.all()
75 - serializer_class = UserGroupSerializer
76 -
77 -#class GroupListAPI(generics.GenericAPIView):
...\ No newline at end of file ...\ No newline at end of file
1 +# -*- coding: utf-8 -*-
2 +# Generated by Django 1.11.29 on 2020-06-13 17:18
3 +from __future__ import unicode_literals
4 +
5 +from django.db import migrations, models
6 +
7 +
8 +class Migration(migrations.Migration):
9 +
10 + dependencies = [
11 + ('khubox', '0001_initial'),
12 + ]
13 +
14 + operations = [
15 + migrations.AlterField(
16 + model_name='user',
17 + name='password',
18 + field=models.CharField(max_length=77),
19 + ),
20 + ]
...@@ -33,7 +33,7 @@ class GroupUser(models.Model): ...@@ -33,7 +33,7 @@ class GroupUser(models.Model):
33 33
34 class User(models.Model): 34 class User(models.Model):
35 email = models.CharField(max_length=255) 35 email = models.CharField(max_length=255)
36 - password = models.CharField(max_length=60) 36 + password = models.CharField(max_length=77)
37 name = models.CharField(max_length=50) 37 name = models.CharField(max_length=50)
38 root_folder = models.CharField(max_length=36) 38 root_folder = models.CharField(max_length=36)
39 created_at = models.DateTimeField() 39 created_at = models.DateTimeField()
......
...@@ -37,6 +37,3 @@ Werkzeug==0.16.1 ...@@ -37,6 +37,3 @@ Werkzeug==0.16.1
37 wsgi-request-logger==0.4.6 37 wsgi-request-logger==0.4.6
38 zappa==0.51.0 38 zappa==0.51.0
39 zipp==3.1.0 39 zipp==3.1.0
40 -djangorestframework == 3.11.0
41 -django-rest-knox == 1.1.0
42 -
......
1 -from django.contrib import admin
2 -
3 -# Register your models here.
1 -from django.apps import AppConfig
2 -
3 -
4 -class UserConfig(AppConfig):
5 - name = 'user'
1 -# Generated by Django 3.0.7 on 2020-06-09 17:57
2 -
3 -import datetime
4 -from django.db import migrations, models
5 -import user.models
6 -
7 -
8 -class Migration(migrations.Migration):
9 -
10 - initial = True
11 -
12 - dependencies = [
13 - ]
14 -
15 - operations = [
16 - migrations.CreateModel(
17 - name='User',
18 - fields=[
19 - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20 - ('password', models.CharField(max_length=128, verbose_name='password')),
21 - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
22 - ('email', models.EmailField(max_length=254, unique=True)),
23 - ('name', models.CharField(max_length=100)),
24 - ('date_of_birth', models.DateField(default=datetime.date.today)),
25 - ('storage_usage', models.FloatField(default=0)),
26 - ('profile', models.ImageField(upload_to=None)),
27 - ('is_admin', models.BooleanField(default=False)),
28 - ],
29 - options={
30 - 'abstract': False,
31 - },
32 - managers=[
33 - ('objects', user.models.UserManager()),
34 - ],
35 - ),
36 - ]
1 -from django.db import models
2 -from django.contrib.auth.models import AbstractBaseUser,BaseUserManager
3 -import datetime
4 -
5 -
6 -class UserManager(BaseUserManager):
7 - use_in_migrations = True
8 -
9 - def create_user(self, email, name, date_of_birth, password=None):
10 - user = self.model(
11 - email=self.normalize_email(email),
12 - date_of_birth=date_of_birth,
13 - name=name,
14 - )
15 - user.set_password(password)
16 - user.save(using=self._db)
17 - return user
18 -
19 - def create_staffuser(self, email, name, date_of_birth, password):
20 - user = self.create_user(
21 - email,
22 - password=password,
23 - date_of_birth=date_of_birth,
24 - name=name,
25 - )
26 - user.staff = True
27 - user.save(using=self._db)
28 - return user
29 -
30 - def create_superuser(self, email, name, date_of_birth, password):
31 - user = self.create_user(
32 - email,
33 - password=password,
34 - date_of_birth=date_of_birth,
35 - name= "True",
36 - )
37 - #user.is_staff = True
38 - user.is_admin = True
39 - user.save(using=self._db)
40 - return user
41 -
42 -
43 -
44 -
45 -class User(AbstractBaseUser):
46 -
47 - username = None
48 - email = models.EmailField( unique=True)
49 - name = models.CharField(max_length=100)
50 - date_of_birth = models.DateField(default=datetime.date.today)
51 - storage_usage = models.FloatField( default = 0)
52 - profile = models.ImageField(upload_to=None, height_field=None, width_field=None, max_length=None)
53 -
54 - is_admin = models.BooleanField(default=False)
55 -
56 - USERNAME_FIELD = 'email'
57 - REQUIRED_FIELDS = [ 'date_of_birth','name' ]
58 -
59 - objects = UserManager()
60 -
61 - def __str__(self):
62 - return self.email
63 -
64 - @property
65 - def is_staff(self):
66 - return self.is_admin
67 -
68 - def has_perm(self, perm, obj = None):
69 - return True
70 -
71 - def has_module_perms(self, app_label):
72 - return True
73 -
1 -from rest_framework import serializers
2 -from .models import User
3 -from django.contrib.auth import authenticate
4 -
5 -
6 -# 회원가입 시리얼라이저
7 -
8 -class CreateUserSerializer(serializers.ModelSerializer):
9 - class Meta:
10 - model = User
11 - fields = ("email", "name", "date_of_birth", "password")
12 - extra_kwargs = {"password": {"write_only": True}}
13 -
14 - def create(self, validated_data):
15 - user = User.objects.create_user(
16 - validated_data["email"],
17 - validated_data["name"],
18 - validated_data["date_of_birth"],
19 - validated_data["password"]
20 - )
21 - return user
22 -
23 -
24 -# 접속 유지중인지 확인할 시리얼라이저
25 -
26 -class UserSerializer(serializers.ModelSerializer):
27 - class Meta:
28 - model = User
29 - fields = ("id","email", "name","date_of_birth","storage_usage","usergroup_set")
30 -
31 -
32 -# 로그인 시리얼라이저
33 -
34 -class LoginUserSerializer(serializers.Serializer):
35 - email = serializers.EmailField()
36 - password = serializers.CharField()
37 -
38 - def validate(self, data):
39 - user = authenticate(**data)
40 - if user and user.is_active:
41 - return user
42 - raise serializers.ValidationError("Unable to log in with provided credentials.")
43 -
44 -
45 -class UpdateUserSerializer(serializers.ModelSerializer):
46 - class Meta:
47 - model = User
48 - fields = ("email", "name", "date_of_birth","storage_usage", "password")
49 - extra_kwargs = {"password": {"write_only": True}}
50 - read_only_fields = ('email',"storage_usage")
51 -
52 - def update(self, instance, validated_data):
53 -
54 - password = validated_data.pop('password', None)
55 -
56 - for (key, value) in validated_data.items():
57 - setattr(instance, key, value)
58 -
59 - if password is not None:
60 - instance.set_password(password)
61 -
62 - instance.save()
63 -
64 - return instance
1 -from django.test import TestCase
2 -
3 -# Create your tests here.
1 -from django.conf.urls import url, include
2 -from .views import (RegistrationAPI,
3 - LoginAPI,
4 - UserAPI,
5 - RegistrationAPI,
6 - UserListAPI,
7 - UserUpdateAPI,
8 - )
9 -
10 -urlpatterns =[
11 - url("^register/$", RegistrationAPI.as_view()),
12 - url("^login/$", LoginAPI.as_view()),
13 - url("^user/$", UserAPI.as_view()),
14 - url("^update/$", UserUpdateAPI.as_view()),
15 - url("^userlist/$", UserListAPI.as_view()),
16 - url("",include("knox.urls")),
17 -]
18 -
1 -from rest_framework import viewsets, permissions, generics, mixins, status
2 -from rest_framework.response import Response
3 -from .models import User
4 -from .serializers import (
5 - CreateUserSerializer,
6 - UserSerializer,
7 - LoginUserSerializer,
8 - UpdateUserSerializer,
9 -)
10 -from knox.models import AuthToken
11 -
12 -
13 -class RegistrationAPI(generics.GenericAPIView):
14 - serializer_class = CreateUserSerializer
15 -
16 - def post(self, request, *args, **kwargs):
17 - if len(request.data["email"]) < 6 or len(request.data["password"]) < 4:
18 - body = {"message": "short field"}
19 - return Response(body, status=status.HTTP_400_BAD_REQUEST)
20 - serializer = self.get_serializer(data=request.data)
21 - serializer.is_valid(raise_exception=True)
22 - #return Response(serializer.name)
23 - user = serializer.save()
24 - return Response(
25 - {
26 - "user": UserSerializer(
27 - user, context=self.get_serializer_context()
28 - ).data,
29 - "token": AuthToken.objects.create(user)[1],
30 - }
31 - )
32 -
33 -
34 -class LoginAPI(generics.GenericAPIView):
35 - serializer_class = LoginUserSerializer
36 -
37 - def post(self, request, *args, **kwargs):
38 - serializer = self.get_serializer(data=request.data)
39 - serializer.is_valid(raise_exception=True)
40 - user = serializer.validated_data
41 - return Response(
42 - {
43 - "user": UserSerializer(
44 - user, context=self.get_serializer_context()
45 - ).data,
46 - "token": AuthToken.objects.create(user)[1],
47 - }
48 - )
49 -
50 -
51 -class UserAPI(generics.RetrieveAPIView):
52 - permission_classes = [permissions.IsAuthenticated]
53 - serializer_class = UserSerializer
54 -
55 - def get_object(self):
56 - return self.request.user
57 -
58 -
59 -class UserListAPI(generics.ListAPIView):
60 - queryset = User.objects.all()
61 - serializer_class = UserSerializer
62 -
63 -
64 -class UserUpdateAPI(generics.RetrieveUpdateAPIView):
65 - permission_classes = [permissions.IsAuthenticated]
66 - serializer_class = UpdateUserSerializer
67 - def retrieve(self, request, *args, **kwargs):
68 - serializer = self.serializer_class(request.user)
69 - return Response(serializer.data, status=status.HTTP_200_OK)
70 - def update(self, request, *args, **kwargs):
71 - serializer = self.serializer_class(request.user, data=request.data, partial=True)
72 - serializer.is_valid(raise_exception=True)
73 - serializer.save()
74 - return Response(serializer.data, status=status.HTTP_200_OK)