본문 바로가기

728x90
반응형

Dev.

(14)
[Error] ModuleNotFoundError: No module named 'apps.views.main'; 'apps.views' is not a package 문제 발생 원래 Django에서는 app 디렉토리 내의 views.py 파일에 뷰 함수나 클래스를 작성한다. 하지만 나 같은 경우 views.py 파일이 복잡해져 파일로 분리해 작성하고 싶었다. 이 오류는 분리한 파일을 폴더로 생성하고 폴더 내부에 파일들을 생성해 다른 파일에서 해당 뷰를 import 할 때 난 오류이다. 원인 기존의 views.py 파일과 새로 생성한 디렉토리 이름 간의 이름 충돌이 발생한 것이다. 예를 들어, 기존의 views.py 파일과 myapp/views 디렉토리에 새로 생성한 main.py 파일이 존재하는 경우, from . import views와 같은 import 구문이 views 파일인지 views 폴더인지 어떤 것을 참조해야 하는지 알 수 없기 때문에, ModuleNot..
[Python] Generator와 핵심 yield 키워드 Generator Generator는 Iterator(값을 차례대로 꺼낼 수 있는 객체)를 만들어주는 함수이다. Generator는 Iterator를 생성해주기 때문에, 한번에 모든 값을 메모리에 저장하지 않아도 된다. 대신 값을 생성하는 시점에서 값을 생성하고 바로 반환하며, 다음 값이 필요한 시점에서 다시 실행된다. 이런 동작원리로 메모리를 효율적으로 사용할 수 있다. 특징 generator 함수는 일반 함수와 유사하지만, return 대신 yield 구문을 사용하여 값을 반환하고, 함수를 호출할 때마다 generator 객체를 반환한다. generator 객체는 iterator protocol을 구현하여, next() 함수를 호출하면 generator 함수에서 yield 구문에서 반환한 값을 하나씩..
[Error] TypeError: 'BasePermissionMetaclass' object is not iterable in django rest framework permission_classes를 작성해주다 난 오류이다. permission_classes는 리스트와 튜플형태로 작성 가능한데 튜플로 작성할 때는 문법적 차이로 살짝 형태가 다르다. 파이썬에서 튜플을 만들 때 하나의 요소만 있을 경우, 그냥 괄호만으로는 튜플임을 인식하지 못하기 때문에 튜플 안에 하나의 요소만 있더라도 반드시 쉼표(,)를 함께 작성해주어야 한다. permission_classes = (IsStaffUser,) OR permission_classes = [IsStaffUser]
[DRF] Custom Permission- URL based permission URL-based permission URL 패턴에 따라 사용자에게 다른 권한을 부여하는 방식을 의미한다. URL dispatcher Django는 일반적으로 URLconf 파일을 가지고 있다. URLconf 파일은 각 app단의 urls.py 모듈에서 정의된다. 이 파일에는 urlpatterns 변수를 정의하고, 이 변수는 URL 패턴을 리스트로 나타내며, 각 패턴은 path() 또는 re_path() 함수를 사용하여 정의한다. Django는 URLconf 파일에 URL 패턴을 정의하고 각 패턴에 대해 어떤 view 함수나 클래스를 호출할지를 지정해 매칭시킨다. URL dispatcher는 HTTP요청이 들어올 때마다 적절한 url에 연결해주는 기능을 의미한다. 이러한 기능을 기반으로 특정 URL 패턴..
[DRF] Custom Permission 생성- BasePermission permission_classes DRF는 API View에서 요청을 처리하기 전에 실행되는 인증 및 권한 검사를 위해 permission_classes 속성을 제공한다. 보안을 위해 클라이언트의 요청이 특정 권한을 가지고 있는지 확인하는 데 사용되며 APIView 클래스에서 상속받아 사용할 수 있다. 클래스의 종류 DRF는 몇가지 기본 클래스를 제공하고 직접 커스텀 하여 권한 클래스 사용할 수도 있다. AllowAny : 모든 요청에 대해 인증 없이 접근을 허용 IsAuthenticated : 인증된 사용자만 접근을 허용 IsAdminUser : 관리자 권한을 가진 사용자만 접근을 허용 IsAuthenticatedOrReadOnly : 인증된 사용자는 모든 HTTP 메소드를 사용할 수 있지만, 인증되지..
[DRF] Serialization / Deserialization 동작 변경 - to_internal_value와 to_representation Serialization과 Deserialization Serialization과 Deserialization은 사용자와 클라이언트가 API에서 데이터를 읽고 쓸 수 있도록 API에서 데이터를 표현하고 전송하는 데 사용되는 기능이다. Serialization 직렬화 Serialization은 데이터 객체를 JSON 또는 XML 등의 포맷으로 변환하는 과정으로 DRF에서는 Serializer 클래스를 사용하여 객체를 직렬화할 수 있다. Serializer는 ModelSerializer, Serializer 및 다른 유형의 Serializer 클래스를 포함하는 다양한 유형이 있고 Serializer를 사용하면 모델 인스턴스를 쉽게 JSON, XML 또는 다른 포맷으로 변환할 수 있다. Deserializat..
[Python] 특정 기준으로 리스트 정렬하기 - lambda Lambda 람다 함수는 파이썬에서 익명 함수(anonymous function)를 만들기 위해 사용되는 기능으로 함수의 이름 없이 매개변수와 반환값을 지정할 수 있다. 단일 표현식(expression)을 반환하므로, 복잡한 기능을 수행하기 위해서는 일반적인 함수를 사용해야 한다. 람다 함수는 주로 map, filter, reduce와 같은 함수와 함께 사용되어 리스트(list)나 튜플(tuple)과 같은 시퀀스 자료형의 원소를 처리하는데 사용된다. 특정 기준으로 리스트 정렬하기 파이썬에서 리스트를 정렬할 때 lambda식을 사용하여 정렬 기준을 지정할 수 있다. 정렬 함수의 인자로 key=lamdb식 형태로 넣어 사용이 가능하다. my_list = [{name="z0", is_main=False}, {..
[Django] ManyToMany 모델 인스턴스 생성 및 삭제하기- add, clear ManyToManyField Django에서 ManyToManyField란 다대다(N:M) 관계를 나타내는 필드이다. 이 필드를 사용하여 두 개의 모델 사이에 여러 개의 관계를 설정할 수 있습니다. ManyToManyField는 관계의 중간 테이블은 두 모델의 기본키(primary key)를 참조한다. class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField('Book') class Book(models.Model): title = models.CharField(max_length=200) authors = models.ManyToManyField(Author) 예시 테이블을 하나 가져..

728x90