Skip to content

Commit a4edc0e

Browse files
authored
[feat] Memo 모델에 필드 timestamp필드 추가
* [fix] mirgate error 해결 * [feat] memo post 구현 완료 * [chore] post 응답으로 전체 메모 가져오기 * [feat] 모아보기 viewset으로 생성 * [chore] null로 반환되는 queryset 예외처리하기 * [refactor] JsonResponse로 변경 * [fix] 메모 뷰에 user 추가 * refactor/bookmark * [refactor] 북마크뷰에 유저인증 추가 * [feat] Memo 모델에 필드 추가
1 parent 7d48375 commit a4edc0e

7 files changed

Lines changed: 106 additions & 53 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.0.8 on 2022-01-08 16:38
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('app', '0018_merge_20220107_1341'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='tag',
15+
name='tag_color',
16+
field=models.CharField(blank=True, choices=[('#5DA7EF', '#5DA7EF'), ('#9ECBFF', '#9ECBFF'), ('#C8D769', '#C8D769'), ('#50B093', '#50B093'), ('#81C7BA', '#81C7BA'), ('#B282CC', '#B282CC'), ('#F85C5D', '#F85C5D'), ('#FFAB41', '#FFAB41'), ('#FFBE6C', '#FFBE6C'), ('#FFD84E', '#FFD84E')], max_length=10, null=True),
17+
),
18+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 3.0.8 on 2022-01-08 16:41
2+
3+
from django.db import migrations, models
4+
import django.utils.timezone
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('app', '0019_auto_20220108_1638'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='memo',
16+
name='timestamp',
17+
field=models.CharField(default=django.utils.timezone.now, max_length=50),
18+
preserve_default=False,
19+
),
20+
]

app/models.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,20 @@ class Meta:
3333

3434
class Tag(BaseModel):
3535
COLOR_IN_TAG_CHOICES = [
36-
('RD', 'red'),
37-
('GR', 'green'),
38-
('BL', 'blue'),
39-
# 더 추가해야됨!
36+
('#5DA7EF', '#5DA7EF'),
37+
('#9ECBFF', '#9ECBFF'),
38+
('#C8D769', '#C8D769'),
39+
('#50B093', '#50B093'),
40+
('#81C7BA', '#81C7BA'),
41+
('#B282CC', '#B282CC'),
42+
('#F85C5D', '#F85C5D'),
43+
('#FFAB41', '#FFAB41'),
44+
('#FFBE6C', '#FFBE6C'),
45+
('#FFD84E', '#FFD84E'),
4046
]
4147

4248
tag_name = models.CharField(max_length=20, null=True, blank=True)
43-
tag_color = models.CharField(max_length=2, choices=COLOR_IN_TAG_CHOICES, null=True, blank=True)
49+
tag_color = models.CharField(max_length=10, choices=COLOR_IN_TAG_CHOICES, null=True, blank=True)
4450
user = models.ForeignKey('User', on_delete=models.CASCADE)
4551

4652
class Meta:
@@ -52,9 +58,11 @@ class Memo(BaseModel):
5258
url = models.URLField(null=True, blank=True)
5359
is_marked = models.BooleanField(default=False)
5460
is_tag_new = models.BooleanField(default=False)
61+
timestamp = models.CharField(max_length=50)
5562
tag = models.ForeignKey('Tag', on_delete=models.SET_NULL, null=True, blank=True, related_name='memo_tag')
5663
user = models.ForeignKey('User', on_delete=models.CASCADE, null=True, related_name='memo_user')
5764

65+
5866
class Meta:
5967
db_table = 'memo'
6068

app/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def get_images(self, obj):
6262

6363
class Meta:
6464
model = Memo
65-
fields = ['id', 'memo_text', 'url', 'tag', 'tag_name', 'tag_color', 'images', 'is_marked',
65+
fields = ['id', 'memo_text', 'url', 'tag', 'tag_name', 'tag_color', 'images', 'is_marked', 'timestamp',
6666
'created_at', 'updated_at']
6767

6868
def get_tag_name(self, obj):

app/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from app.views import HelloView, KakaoLoginView, ImagesView, UserView, BookmarkView, MemoFilterViewSet, TagList, TagDetail
66

77

8-
from app.views import MemoList, MemoDetial
8+
from app.views import MemoList, MemoDetail
99
from server.settings import base
1010

1111
router = routers.DefaultRouter()
@@ -17,7 +17,7 @@
1717
path('hello', HelloView.as_view()),
1818
path('auth/kakao', KakaoLoginView.as_view()),
1919
path('memos', MemoList.as_view()),
20-
path('memos/<int:pk>', MemoDetial.as_view()),
20+
path('memos/<int:pk>', MemoDetail.as_view()),
2121
path('memos/bookmark', BookmarkView.as_view()),
2222
path('images', ImagesView.as_view()),
2323
path('users', UserView.as_view()),

app/views.py

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,10 @@ def delete(self, request):
199199
return JsonResponse({"message": "권한이 없습니다."}, status=400)
200200

201201

202-
class BookmarkView(APIView, PaginationHandlerMixin):
203-
pagination_class = PageNumberPagination
202+
203+
204+
class BookmarkView(APIView):
205+
# pagination_class = PageNumberPagination
204206

205207
def get_memos(self, pk):
206208
return get_object_or_404(Memo, pk=pk)
@@ -217,26 +219,28 @@ def post(self, request):
217219
memo.is_marked = False
218220
memo.save()
219221
memos = Memo.objects.filter(user=user).order_by('-created_at')
220-
page = self.paginate_queryset(memos)
221-
if page is not None:
222-
serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
223-
else:
224-
serializer = MemoSerializer(memos, many=True)
222+
# page = self.paginate_queryset(memos)
223+
# if page is not None:
224+
# serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
225+
# else:
226+
serializer = MemoSerializer(memos, many=True)
227+
225228
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED)
226229

227230

228231
class MemoList(APIView, PaginationHandlerMixin):
229-
pagination_class = PageNumberPagination
232+
# pagination_class = PageNumberPagination
230233

231234
def get(self, request, *args, **kwargs):
232235
try:
233236
user_authenticate(request)
234237
memos = Memo.objects.filter(user=request.user).order_by('-created_at')
235-
page = self.paginate_queryset(memos)
236-
if page is not None:
237-
serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
238-
else:
239-
serializer = MemoSerializer(memos, many=True)
238+
239+
# page = self.paginate_queryset(memos)
240+
# if page is not None:
241+
# serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
242+
# else:
243+
serializer = MemoSerializer(memos, many=True)
240244
return JsonResponse(serializer.data, status=status.HTTP_200_OK, safe=False)
241245
except UserIsAnonymous:
242246
return JsonResponse({"message": "알 수 없는 유저입니다."}, status=404)
@@ -251,33 +255,33 @@ def post(self, request, *args, **kwargs):
251255
try: # DB에 중복값이 있다면 저장안함
252256
tag = Tag.objects.get(tag_name=request.data['tag_name'])
253257
except Tag.DoesNotExist:
254-
tag = Tag.objects.create(tag_name=request.data['tag_name'], tag_color=request.data['tag_color'],
255-
user=user)
256-
Memo.objects.create(memo_text=request.data['memo_text'], url=request.data['url'], tag=tag, user=user)
258+
tag = Tag.objects.create(tag_name=request.data['tag_name'], tag_color=request.data['tag_color'], user=user)
259+
Memo.objects.create(memo_text=request.data['memo_text'], url=request.data['url'],
260+
timestamp=request.data['timestamp'], tag=tag, user=user)
257261
memos = Memo.objects.filter(user=user).order_by('-created_at')
258-
page = self.paginate_queryset(memos)
259-
if page is not None:
260-
serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
261-
else:
262-
serializer = MemoSerializer(memos, many=True)
263-
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED)
262+
# page = self.paginate_queryset(memos)
263+
# if page is not None:
264+
# serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
265+
# else:
266+
serializer = MemoSerializer(memos, many=True)
267+
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED, safe=False)
264268
else:
265269
try:
266270
tag = Tag.objects.get(id=request.data['tag'])
267271
except Tag.DoesNotExist:
268272
tag = None
269273
Memo.objects.create(memo_text=request.data['memo_text'], url=request.data['url'], tag=tag, user=user)
270274
memos = Memo.objects.filter(user=user).order_by('-created_at')
271-
page = self.paginate_queryset(memos)
272-
if page is not None:
273-
serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
274-
else:
275-
serializer = MemoSerializer(memos, many=True)
276-
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED)
275+
# page = self.paginate_queryset(memos)
276+
# if page is not None:
277+
# serializer = self.get_paginated_response(MemoSerializer(page, many=True).data)
278+
# else:
279+
serializer = MemoSerializer(memos, many=True)
280+
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED, safe=False)
277281
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
278282

279283

280-
class MemoDetial(APIView):
284+
class MemoDetail(APIView):
281285
def get_memos(self, pk):
282286
return get_object_or_404(Memo, pk=pk)
283287

@@ -312,19 +316,19 @@ def delete(self, request, pk):
312316
class MemoFilterViewSet(ModelViewSet):
313317
queryset = Memo.objects.all()
314318
serializer_class = MemoSerializer
315-
pagination_class = PageNumberPagination
319+
# pagination_class = PageNumberPagination
316320

317321
@action(detail=False)
318322
def texts(self, request, *args, **kwargs):
319323
user = request.user
320324
if request.user.is_anonymous:
321325
return JsonResponse({'message': '알 수 없는 유저입니다.'}, status=404)
322326
queryset = Memo.objects.filter(memo_text__isnull=False, user=user).order_by('-created_at')
323-
self.paginator.page_size_query_param = "page_size"
324-
page = self.paginate_queryset(queryset)
325-
if page is not None:
326-
serializer = self.get_serializer(page, many=True)
327-
return self.get_paginated_response(serializer.data)
327+
# self.paginator.page_size_query_param = "page_size"
328+
# page = self.paginate_queryset(queryset)
329+
# if page is not None:
330+
# serializer = self.get_serializer(page, many=True)
331+
# return self.get_paginated_response(serializer.data)
328332
serializer = self.get_serializer(queryset, many=True)
329333
return JsonResponse(serializer.data, status=status.HTTP_200_OK, safe=False)
330334

@@ -334,11 +338,11 @@ def links(self, request, *args, **kwargs):
334338
if request.user.is_anonymous:
335339
return JsonResponse({'message': '알 수 없는 유저입니다.'}, status=404)
336340
queryset = Memo.objects.filter(url__isnull=False, user=user).order_by('-created_at')
337-
self.paginator.page_size_query_param = "page_size"
338-
page = self.paginate_queryset(queryset)
339-
if page is not None:
340-
serializer = self.get_serializer(page, many=True)
341-
return self.get_paginated_response(serializer.data)
341+
# self.paginator.page_size_query_param = "page_size"
342+
# page = self.paginate_queryset(queryset)
343+
# if page is not None:
344+
# serializer = self.get_serializer(page, many=True)
345+
# return self.get_paginated_response(serializer.data)
342346
serializer = self.get_serializer(queryset, many=True)
343347
return JsonResponse(serializer.data, status=status.HTTP_200_OK, safe=False)
344348

@@ -348,11 +352,11 @@ def tags(self, request, pk):
348352
if request.user.is_anonymous:
349353
return JsonResponse({'message': '알 수 없는 유저입니다.'}, status=404)
350354
queryset = Memo.objects.filter(tag_id=pk, user=user).order_by('-created_at')
351-
self.paginator.page_size_query_param = "page_size"
352-
page = self.paginate_queryset(queryset)
353-
if page is not None:
354-
serializer = self.get_serializer(page, many=True)
355-
return self.get_paginated_response(serializer.data)
355+
# self.paginator.page_size_query_param = "page_size"
356+
# page = self.paginate_queryset(queryset)
357+
# if page is not None:
358+
# serializer = self.get_serializer(page, many=True)
359+
# return self.get_paginated_response(serializer.data)
356360
serializer = self.get_serializer(queryset, many=True)
357361
return JsonResponse(serializer.data, status=status.HTTP_200_OK, safe=False)
358362

@@ -397,6 +401,7 @@ def post(self, request):
397401
return JsonResponse(serializer.data, status=status.HTTP_201_CREATED, safe=False)
398402

399403

404+
400405
class TagDetail(APIView):
401406
def get_tag(self, pk):
402407
return get_object_or_404(Tag, pk=pk)

server/settings/dev.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from .base import *
22

33
DEBUG = True
4+
45
# ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS')
56
ALLOWED_HOSTS = [ '*' ]
67

8+
79
DATABASES = {
810
'default': {
911
'ENGINE': 'django.db.backends.mysql',

0 commit comments

Comments
 (0)