Framework 51

장고 50문 50답 채우기(2)

6. Django의 MTV패턴 시스템은 무엇입니까? Model-Template-View로 이루어진 패턴으로 Model은 데이터베이스에 저장되는 데이터를 의미하고, Template은 사용자가 시각 적으로 확인할 수 있는 화면 즉, UI를 담당하는 부분이고, View는 데이터를 가공하고 처리하는 부분을 의미합니다. 7. ORM에 대해서 설명하시오 Object-Relational Mapping의 약자로 SQL이라는 언어 대신 데이터베이스를 쉽게 다룰 수 있게 하는 방법입니다. 8. Django의 장단점은 무엇입니까? 장점: 파이썬 웹프레임워크 중에서 가장 사용자가 많아서 자료 찾기가 편리하며, RDBMS와의 상호 작용을 완전히 지원하는 기본 내장 ORM이 함께 제공됩니다. 단점: 무겁고 복잡하며, Flask와..

Framework/Django 2023.07.24

ㅁㄴㅇㄹ

1. Django Template Engine은 무엇이고 어떤 기능을 제공합니까? Template Engine은 웹 프레임워크인 장고의 HTML을 동적으로 생성할 수 있는 편리한 방법이다. 템플릿에는 원하는 HTML 출력의 정적 부분과 동적 콘텐츠가 삽입되는 방법을 설명하는 몇 가지 특수 구문이 포함되어 있다. Django 프로젝트는 하나 이상의 템플릿 엔진으로 구성할 수 있다. Django는 창의적으로 DTL(Django template language)이라고 불리는 자체 템플릿 시스템과 인기 있는 대체 Jinja2를 위한 내장 백엔드를 제공한다. Django는 백엔드에 관계없이 템플릿을 로드하고 렌더링하기 위한 표준 API를 정의한다. Django Template Engine은 Django 웹 프레임..

Framework/Django 2023.07.20

장고 50문 50답 채우기(1)

1. Django가 무엇인지 설명하시오 Django는 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크(web application framework) 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어진 웹 프레임워크 2. Django를 백엔드 스택으로 선정한 이유는 무엇입니까? 지금껏 공부한 언어인 파이썬을 온전히 활용할 수 있음 웹 개발에 간편한 기능들이 기본적으로 탑재되어 있음 장고를 사용하면 웹서버를 설치하지 않고 파이썬 명령어 하나로 서버를 실행할 수 있다. 파이썬 코드로 데이터베이스를 충분히 다룰 수 있다. 보안 기능 제공 장고 보안 가이드가 기본적으로 제공됨 3. Django에는 어떤 장점이 있습니까? APP 단위 독립적 구성 하나의 App은 각각 별도의 모델(Mod..

Framework/Django 2023.07.14

대댓글 작성

class Comment(models.Model): parent = models.ForeignKey('self', related_name='reply', on_delete=models.CASCADE, null=True, blank=True) 대댓글 모델을 굳이 추가할 필요 없이, 댓글 모델에 다음과 같이 스스로를 참조하는 코드를 작성하면, 그것이 곧 대댓글이 된다. 시리얼라이저에는 다음과 같이 함수를 오버라이딩해서 가져오면 된다. class CommentSerializer(serializers.ModelSerializer): reply = serializers.SerializerMethodField() class Meta: model = Comment fields = ('board', 'id', 'use..

Framework/Django 2023.06.28

장고 Q 사용 (Code Refactoring)

Q는 장고 model에서 제공하는 orm 중 하나로, DB filter 조건에 and / or문을 추가하고 싶을 때 사용한다. 그럼 그냥 where에 or 문 넣으면 되는 걸 왜 이렇게 어려운 용어로 필터링할까? 코드가 간편해지기 때문. # 예시 from django.db.models import Q def get_queryset(self): search_key = self.request.GET.get("search", None) q = Q() if search_key: q = self.search(search_key) category_id = self.request.GET.get("category") 위의 코드를 Q를 쓰지 않고 리팩토링하면 어떻게 될까? def get_queryset(self): se..

Framework/Django 2023.06.23

taggit 공식 문서 읽어보기

프로젝트에 태그를 만들어보기 위해 taggit 공식문서를 읽어보았다. 먼저 필요한 패키지 다운로드와 환경설정이 필요하다. 내 프로젝트는 가상환경을 poetry로 했기 때문에 poetry 명령어를 썼다. # 터미널 명령어 poetry add django-taggic-serializer poetry install # settings.py INSTALLED_APPS = ( ... 'taggit', 'taggit_serializer', ) 관리자가 설정된 태그를 관리하게 하기 위해서는 다음과 같은 코드를 작성해둬야 한다. # admin.py class MyModelAdmin(admin.ModelAdmin): list_display = ["tag_list"] def get_queryset(self, request..

Framework/Django 2023.06.21

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