1. 리뷰 리스트 조회 기능 구현
리뷰 리스트 페이지에서 사용자들이 올린 리뷰글을 최신순으로 간략하게 보여주는 것이 목적.
API 문서를 꼭 참조할 것.
review/views.py
# 리뷰 기능
class ReviewView(APIView):
permission_classes = [permissions.AllowAny]
authentication_classes = [JWTAuthentication]
# 리뷰 리스트 조회
def get(self, request):
reviews = Review.objects.all().order_by('-id')
reviews_serializer = ReviewSerializer(reviews, many=True).data
return Response(reviews_serializer, status=status.HTTP_200_OK)
- Review 모델에 저장된 object 들을 모두 가져오는데, id가 가장 최근인 순서로 가져온다. : .order_by('-id')
- 가져온 object 들을 ReviewSerializer에 넣는데, 다수의 object 이므로 many=True 속성을 써준다.
review/serializers.py
# 리뷰 조회, 작성 시리얼라이저
class ReviewSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
images = serializers.SerializerMethodField()
likes = serializers.SerializerMethodField()
def get_user(self, obj):
return obj.user.username
def get_images(self, obj):
image_obj = obj.reviewimage_set.all().first()
image_data = {
'review_id' : image_obj.review_id,
'order' : image_obj.order,
'image' : str(image_obj.image)
}
return image_data
def get_likes(self, obj):
query = (
Q(posttype_id = 1) &
Q(post_id = obj.id)
)
likes_objs = Like.objects.filter(query)
likes_count = likes_objs.count()
return likes_count
class Meta:
model = Review
fields = ['user', 'title', 'content',
'created_at', 'images', 'likes']
1.1 SerializerMethodField()
SerializerMethodField() 를 사용하여 Custom Field를 만들 수 있다.
기본적으로 read-only 이므로 값을 저장하거나 수정할 때는 사용되지 않고 조회할 때만 사용한다.
인자로는 method_name 으로 해당 필드값에 대해 정의하는 함수의 이름을 넘겨준다.
지정해주지 않을 경우 default 로 get_<field_name> 으로 지정해줄 수 있다.
1.2 추가 참조 : Serializer fields 의 Core arguments
https://hyun-am-coding.tistory.com/entry/10-Serializer-fields
10. Serializer fields
Form 클래스의 각 필드는 데이터의 유효성을 검사할 뿐만 아니라 데이터를 "정리"하여 일관된 형식으로 정규화합니다. 시리얼라이저 필드는 기본 값과 내부 데이터 유형 간의 변환을 처리합니다.
hyun-am-coding.tistory.com
1.3 이미지 url값 딕셔너리에 넣을때 에러
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
error UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools An error occurred when compiling "process.py" on the above site. python tools/process.py --input_dir data -- operat...
stackoverflow.com
1.4 .count()
쿼리셋안에 오브젝트 갯수를 알 수 있다.
2. 리뷰 상세 조회 기능 구현
리뷰 리스트 페이지에서 리뷰글을 누르면 상세 페이지로 이동하여 해당 리뷰의 내용을 상세하게 보여주는 것이 목적.
API 문서를 꼭 참조할 것.
review/views.py
# 리뷰 상세 기능
class ReviewDetailView(APIView):
permission_classes = [permissions.AllowAny]
authentication_classes = [JWTAuthentication]
# 리뷰 상세보기
def get(self, request, review_id):
try:
review_obj = Review.objects.all().get(id=review_id)
except:
return Response({"error": "존재하지 않는 게시글 입니다."}, status=status.HTTP_400_BAD_REQUEST)
review_obj_serializer = ReviewDetailSerializer(review_obj).data
return Response(review_obj_serializer, status=status.HTTP_200_OK)
url 에 해당 리뷰글 review_id 를 받아와서 Review 전체 오브젝트중 id가 review_id 인것을 get() 하는데
'AI 웹 개발 과정 > 팀 프로젝트' 카테고리의 다른 글
nginx / gunicorn (0) | 2022.07.29 |
---|---|
testcode 작성 (1) | 2022.07.28 |
최종 프로젝트 - 모델링 / admin 작업 (0) | 2022.07.14 |
최종 프로젝트 - 기획 (0) | 2022.07.11 |
유화제작프로젝트 - KPT 회고 (0) | 2022.07.06 |