Framework/Django 45

Queryset method 정리

Queryset Django ORM에서 제공하는 데이터 타입으로, 데이터베이스에서 전달받은 모델의 객체 목록 클래스 모델 중 필터링하는 select, 값을 만드는 create, 값을 변경해주는 update로 나뉨 1. select 클래스 명.objects.all() : 해당 테이블 안에 있는 모든 데이터 조회. QuerySet 타입으로 반환. 클래스 명.objects.get() : 하나의 row만 조회. 주로 pk컬럼으로 조회한다. 결과가 1건 이상일 때는 에러를 발생시킨다. QeuerySet 타입이 아닌 객체 타입으로 반환. 클래스 명.objects.filter() : 특정 조건에 맞는 row만 조회하고 싶을 때 사용한다. QuerySet 타입으로 반환. 클래스 명.objects.exclude() : ..

Framework/Django 2023.06.20

시리얼라이저 오버라이딩

RecipeIngredient에 작성할 때 1. Ingredient에서 그 재료를 가져오거나 2. Ingredient에 없을 시 그 재료를 사용자가 직접 생성하는 방향 으로 코드를 짤 생각이다. # Views.py class RecipeIngredientView(APIView): permission_classes = [permissions.IsAuthenticatedOrReadOnly] def post(self, request, article_id): serializer = RecipeIngredientCreateSerializer(data=request.data) if serializer.is_valid(): serializer.save( article_id=article_id, ingredient_i..

Framework/Django 2023.06.19

generics.ListCreateAPIView

generic이란 무엇인가? 제네릭 뷰는 장고 프레임워크에서 제공하는 재사용 가능한 View 클래스. 장고 프레임워크에서 제공하는 재사용 가능한 뷰(View) 클래스 DRF의 제네릭 뷰는 장고의 제네릭 뷰와 유사한 기능을 제공하면서, Restful API 개발에 특화됨. 제네릭 뷰는 일반적으로 HTTP Method에 따라 다양한 동작을 수행함. 상속을 통해 확장할 수 있음. 필요한 메소드를 오버라이딩하거나 추가하여 customize할 수 있다. >> 기존의 제네릭 뷰를 활용하면서 특정한 동작이나 로직 추가 가능. ListCreateView란 무엇인가? DRF에서 제공하는 제네릭(Generic) 뷰 중 하나 Restful API에서 컬렉션(Collection)을 나타내는 모델의 리스트를 생성하고 조회할 수..

Framework/Django 2023.06.19

MtoM 마이그레이션 오류(through 옵션)

ManytoManyField로 정의한 Article 테이블 내의 like, bookmark 모델은 users 앱의 User 모델과 MtoM의 관계를 가진다. 본래는 through = ' ' 를 설정해서 해결했지만 굳이 중간모델을 만들지 않아도? MtoM 관계를 만들면 알아서 중간모델을 만들어준다는 것을 알아내고 through를 없애고, related_name을 팀 코드 컨벤션에 맞춰서 고친 다음 마이그레이트를 해보았다. Makemigrations는 이상 없이 잘 되었는데.. Migrate에서 달달하게 에러가 생겼다. 아랫줄은 에러코드의 핵심이다. 그럼 얘가 무엇을 의미하는지? 알아보았다. ValueError: Cannot alter field articles.Article.like into article..

Framework/Django 2023.06.16

DRF Response()

Response : 응답 : 클라이언트에서 받은 요청을 조건에 맞게 보내는 것 아래 코드에서도 보면 꼭 마지막에 응답을 보낸다. class ArticleDetailView(APIView): def get(self, request): article = get_object_or_404(Article, id=id) serialize = ArticleSerializer(article) return Response(serialize.data, status=status.HTTP_200_OK) 그럼 이 응답은 늘 이런 것들만 고정적으로 보내주는 걸까? 사실 이것에 대해 잘 몰랐는데, Response에 ctrl + click을 해주면 Response에 대해 간략하게 설명해주는 창으로 넘어가진다. 아래는 class Re..

Framework/Django 2023.06.16

FBV 와 CBV 차이점

FBV(Function-Based-View) 함수 기반 View 코드를 간단히 쓸 수 있음 그러나 코드를 확장, 재사용하는 등 유지 보수에 있어 좋지 않음 조건문으로 HTTP 메소드 구분해야하는 단점 CBV(Class-Based-View) 클래스 기반 View GET, POST 등 HTTP 메소드에 따른 처리 코드를 작성할 때 if 함수 대신에 메소드 명으로 코드의 구조가 깔끔하다. 다중상속 같은 객체지향 기법을 활용해 Generic View, Mixin Class 등을 사용 코드의 재사용과 개발 생산성을 높여준다. View 안에서 같은 코드를 반복적으로 사용하지 않는다. 403, 404, 500 에러 핸들링에는 CBV를 이용하지 않고 FBV를 이용한다.

Framework/Django 2023.06.16

DRF Docs 입문

Docs에 대한 중요성을 나날이 인지하면서 결국 Docs에 대해 꾸준히 공부해야겠다는 마음을 가졌다. 이번에는 Docs에 대해 공부해보았다. 공부한 사이트 Home - Django REST framework www.django-rest-framework.org DRF를 쓰는이유 웹 브라우저 가능한 API는 개발자들에게 큰 유용성을 가져다 줍니다. OAuth1a 및 OAuth2용 패키지를 포함한 인증 정책. ORM 및 비 ORM 데이터 소스를 모두 지원하는 직렬화. 사용자 정의가 가능합니다. 보다 강력한 기능이 필요하지 않다면 일반 기능 기반 보기를 사용하기 광범위한 문서와 훌륭한 커뮤니티 지원. Mozilla, Red Hat, Heroku, Eventbrite 등 세계적으로 유명한 기업에서 사용하고 신뢰..

Framework/Django 2023.06.15

API POST 코드 공부 (쿠팡)

API를 사실 다른 분이 만드는 것만 계속 바라봤는데, 이번에 코드 공부를 좀 해보았다. import hmac import hashlib import requests import json from time import gmtime, strftime REQUEST_METHOD = "POST" # 요청 방식 설정 DOMAIN = "https://api-gateway.coupang.com" # API 도메인 URL = "/v2/providers/affiliate_open_api/apis/openapi/v1/deeplink" # 요청을 보낼 엔드포인트의 경로 # Replace with your own ACCESS_KEY and SECRET_KEY ACCESS_KEY = "xxxxxxxx-xxxx-xxxx-xxx..

Framework/Django 2023.06.13

[트러블 슈팅] 인코딩 에러

이번 코드에러는 다음과 같다. 오류 이슈를 보고 다음과 같이 생각했다. 1. dotenv에서 문제가 생긴 건가? 2. DecodeError인 것을 보니 파이썬 용어로 인코딩, 디코딩 하는 과정이 문제인가? 1번의 경우 혹시나 dotenv가 깔려있지 않은데 내가 .env를 생성해서 그런 걸까?라는 생각을 했다. 하지만 dotenv는 정상적으로 깔려 있었고, lock과 toml에도 큰 문제는 없었다. 2번의 경우가 사실 가능성은 크다고 생각했다. 그래서 모든 주석들을 꼼꼼히 확인했는데 큰 이상이 없었는데, dotenv에 주석을 달았던 게 생각났다. 이 주석을 지우니.. cp949 error를 벗어날 수 있었다. dotenv에는 주석 달기 금지

Framework/Django 2023.06.11

[트러블 슈팅] 환경설정..

tensorflow 관한 문제가 팀원들에게 끊이지 않게 이어져 오고 있었다. tensorflow-io-gcs-filesystem 호환이 큰 문제인데, MacOS와 Windows의 환경 차이가 심하게 크다. 그런데 tensorflow를 최신 버전으로 다운받다 보니 마찬가지로 io-gcs도 그 호환에 맞게 다운받아야 하는데, 이것이 파이썬 3.8.10에서 다운되지 않는 것이었다. 그럼 다른 파이썬 버전에선 다운이 될까? 이 상황에서, 팀장님은 윈도우와 맥 버전 모두 다운로드가 되는 웃긴 경우도 있었다. 도대체 무슨 경로길래 그런 황금코스를 탔는지 부러울 따름이다. 아무튼 결론만 말하자면, io-gcs 최신 버전은 윈도우에서 깔리지 않는다. 그래서 io-gcs의 버전을 낮추자니, tensorflow와 호환이 ..

Framework/Django 2023.06.09