일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- useState
- css
- 프로그래머스입문
- python
- django multi image
- 22938번
- 20492번
- GIT
- 코딩기초트레이닝
- sql
- 네이버커넥트재단
- 스파르타코딩클럽
- React
- 참가후기
- 파이썬무료강의
- 파이썬
- error
- jquery
- SEF2022
- 반응형
- 장고 다중이미지
- 장고이미지처리
- 프론트엔드
- 개인정보수집유효기간
- 무료강의
- ㅐㄱ이
- MongoDB
- 스파르타
- html
- 프로그래머스
- Today
- Total
코딩,해볼까
05.23. [리치메이커_project. 2] 챌린지 게시물 작업 (1) 본문
Tutorial 3: Class-based Views
Django REST framework의 class Views 공식문서와 이전 프로젝트를 살펴보며 챌린지 게시물 작업.
0. 오늘 배운 것
1. 프로젝트 DB로 mySQL 연결하였다. 이 부분은 따로 정리해보도록 해야겠다.
DROP DATABASE db_richmaker;
create database db_richmaker character set utf8mb4 collate utf8mb4_general_ci;
use db_richmaker;
SELECT * FROM articles_account;
SELECT * FROM users_user;
2. 다른 팀원분의 JS 연결과정을 보면서, 프론트와 백을 연결할 때 CORS 처리가 필요했다는 사실을 기억했다.
1. 문제점
1. erd의 챌린지 북마크와 팔로우가 서로 바뀌어야 한다.
- 북마크는 단순히 저장의 기능만
- 챌린지는 팔로우 팔로잉처럼 구현해야 어떤 사람이 참여하는지 등을 불러오는 것이기 때문
- 팀원분들과의 상의 끝에 이후에 수정하기로 했다.
2. 오전에 구현했던 다중이미지를 가지고 POST나 PUT을 했더니 제대로 작동하지 않았다.
GET은 아래와 같이 잘 동작하지만.. 나머지가 불가능한 상태.
3. 이전 프로젝트와 다르게 이번에는 북마크와 좋아요 기능을 유저에서 구현하게 되었다. 챌린지에 아무도 참여하지 않았을 때, 챌린지를 삭제하고자 하였는데, 이 때 유저의 북마크 기능을 가져오려고 했지만, 역참조로 가져와지지 않는 문제가 있다.
2. 시행착오
혹시나 구현이 되지 않을 상항을 생각하여 기본적인 삭제 기능을 구현하였다.
# 기본 삭제 구현
challenge = get_object_or_404(Challenge, id=challenge_id)
if request.user.id == challenge.user_id:
challenge.delete()
return Response("게시글이 삭제되었습니다.", status=status.HTTP_204_NO_CONTENT)
else:
return Response("게시글 삭제 권한이 없습니다.", status=status.HTTP_403_FORBIDDEN)
내가 구현하고자 한 것은 챌린지를 시작하는 유저를 나타내는 유저모델의 북마크를(후에 팔로우로 변경 예정) 가져와서 챌린지를 한 사람도 시작하지 않았다면, 그 때는 챌린지를 삭제할 수 있도록 하고자 했다.
#User 모델의 북마크
bookmark = models.ManyToManyField(Challenge, symmetrical=False, related_name='bookmarking_people', blank=True)
역참조를 하면 된다는 팀원분의 말을 듣고 아래와 같은 코드를 작성해봤다.
related_name인 bookmarking_people, bookmark 등 다양하게 코드를 변경해봤지만, 원하는 기능을 구현하지 못했다.
if challengeMember == 0 도 처음에는 필드가 어떻게 표시될 지 몰라 None이나 0 일 때로 지정했었다.
challengeMember = challenge.user.bookmarking_people
if challengeMember == 0:
if request.user.id == challenge.user_id:
challenge.delete()
return Response("챌린지가 삭제되었습니다.", status=status.HTTP_204_NO_CONTENT)
else:
return Response("챌린지 삭제 권한이 없습니다.", status=status.HTTP_403_FORBIDDEN)
else:
return Response("챌린지를 삭제할 수 없습니다.", status=status.HTTP_403_FORBIDDEN)
고민하다보니 user에 북마크한 사람의 숫자를 세는 시리얼라이저가 있었다.
이를 가져와서 매우 흡사하게 적어보기로 했다.
challenge = get_object_or_404(Challenge, id=challenge_id)
serializer = ChallengeMemberSerializer(challenge)
# print(serializer.data.values())
challengeMember = serializer.data.get('bookmarking_people_count')
# print(challengeMember,type(challengeMember))
시리얼라이저를 가져와서 연결하였다.
class ChallengeMemberSerializer(serializers.ModelSerializer):
bookmarking_people_count = serializers.SerializerMethodField()
def get_bookmarking_people_count(self,obj):
return obj.bookmarking_people.count()
class Meta:
model = User
fields = ('bookmarking_people_count',)
3. 해결방법
challenge = get_object_or_404(Challenge, id=challenge_id)
serializer = ChallengeMemberSerializer(challenge)
challengeMember = serializer.data.get('bookmarking_people_count')
if challengeMember == 0:
if request.user.id == challenge.user_id:
challenge.delete()
return Response("챌린지가 삭제되었습니다.", status=status.HTTP_204_NO_CONTENT)
else:
return Response("챌린지 삭제 권한이 없습니다.", status=status.HTTP_403_FORBIDDEN)
else:
return Response("챌린지를 삭제할 수 없습니다.", status=status.HTTP_403_FORBIDDEN)
4. 알게된 점
type(), print() 생활화.
'Back > TIL' 카테고리의 다른 글
05.25. [리치메이커_project. 4] 챌린지 게시물 작업 (3) - 자바스크립트 작업 (0) | 2023.05.26 |
---|---|
05.24. [리치메이커_project. 3] 챌린지 게시물 작업 (2) - Django multi image 장고 다중 이미지 처리 방법 (0) | 2023.05.24 |
05.22. [리치메이커_project. 1] 프로젝트 S.A. / 간단한 로고와 html의 nav바, footer 작업 (0) | 2023.05.23 |
05.20 - 05.21 머신러닝 강의 정리 (0) | 2023.05.20 |
05.19. 팀원들과 알고리즘 풀이 / 백준 / 별 찍기 강아지 세금 소수 찾기 (4) | 2023.05.19 |