목록Django (16)
개발자 블로그

datetime객체는 naive datetime(without timezone)과 aware datetime(with timezone) 객체가 있습니다. 현재 timezone이 활성화되어있는 데(use_TZ = True, in setting), created_at 필드에 timezone이 없는 naive datetime 객체를 대입하셔서 발생하는 "경고" 입니다. 이를 timezone이 있는 aware datetime으로 변환하셔서 대입하시면 해당 경고는 사라진다. 참고로 서비스가 여러 timezone의 유저에게 서비스를 제공한다면 timezone 설정을 살려두시는 것(use_TZ=True)이 좋습니다. 대한민국은 하나의 시간대만 있지만, 해외에서는 국내 서비스라 하더라도 여러 시간대가 있는 나라가 많고..

1. F expression 찜(좋아요) 기능은 product model에 있는 like_cnt 필드를 생성과 함께 업데이트를 해줘야한다. 업데이트 시 F()객체를 사용하지 않고 단순히 + 1을 하게 된다면, 레이스 컨디션 상황에 빠져 동시에 해당 기능이 원하는 값이 나오지 않을 수 있다. F()객체는 파이썬 메모리로 필드값을 가져오지 않고 디비 상에 필드를 참조하는 형식으로 race condition 상황을 피할 수 있다. 2. Unique Constraints Fields 찜(좋아요) 기능은 사용자-상품 필드를 묶어 유일해야한다. 3. 모델의 필드 related_name 설정 참조하는 모델을 2개 이상일 때 두개를 구분하기 위함이고, 나중에 역참조 모델을 가져올때 해당 설정의 값으로 불러온다. 4. ..

1. 역참조하고 있는 필드(해당 모델에는 필드가 존재하지 않지만, 해당 모델을 참조하고있는 모델을 필드로 설정)를 get활용하여 데이터를 전달하는 방법은 시리얼라이저의 메소드필드를 사용해서 return값으로 역참조하여 객체 생성 ex) 하나의 게시글에 달린 모든 댓글 보기 - 댓글은 게시글을 참조하고 있다. get_필드명 으로 함수를 선언하고 객체의 역참조 필드를 불러오는 메소드 선언 -> 해당 메소드의 경우 dir() 메소드를 통해 확인 가능. : related_name에 설정한 필드명 또는 필드명_set 2. 시리얼라이저의 메소드 필드를 활용해서 역참조 되고있는 객체를 통해 더 나은 스트링을 반환할 수 있음. 해당 부분은 상품의 댓글 시리얼라이저를 갖고오는 데 user 필드가 pk가 아니라 usern..

1. instance 에 접근하여 추가, 생성, 수정, 삭제, 부분삭제하는 add(), create(), set(), clear(), remove() 메소드. 주로 N:N필드 생성 및 수정 시 사용 - add함수는 파라미터가 복수의 값이라면 언패킹 후 인자로 넣어줘야함 - set함수는 수정할 때, 쓰이며 복수의 값이 들어올 때, 리스트 형태 그대로 넣어줘야함. 파라미터 2개까지만 받음. 2. objects.filter().update() -> 객체 수정후 객체 아이디를 반환! 수정 된 객체를 반환하지 않음. 시리얼라이저 update 함수 커스텀할 때 해당 부분 주의하자 3. 시리얼라이저 필드 설정 - read_only, write_only를 상황에 맞게 조절해서 역직렬화, 직렬화 에러를 막자! 하나의 시..

배포 - docker / nginx / uwsgi docker docker란? windows에서 virtualbox를 설치해 가상화 환경을 구축하는 것처럼, docker를 사용해 격리 된 공간에서 서비스나 os를 가상화 하여 띄울 수 있다. docker의 격리 된 공간에서 동작하는 것을 컨테이너라 한다. virtual machine과 같이 가상화를 하는 것은 비슷하지만, 구조적으로는 차이가 있다. docker-compose와 같은 container management 프로그램을 사용해 서비스 환경을 쉽게 구축 할 수 있다. 왜 docker를 사용하는가? docker-compose를 활용하면 원하는 아키텍처를 빠르게 구성 할 수 있다. 서비스가 host에서 동작하는 것이 아닌, container에서 동작하..
product 앱에서 가 포함된 product 테이블을 생성해주세요 django serializer를 사용해 validate / create / update 하는 기능을 구현해주세요 custom validation 기능을 사용해 노출 종료 일자가 현재보다 더 이전 시점이라면 상품을 등록할 수 없도록 해주세요 custom creator 기능을 사용해 상품 설명의 마지막에 “에 등록된 상품입니다.” 라는 문구를 추가해주세요 custom update 기능을 사용해 상품이 update 됐을 때 상품 설명의 가장 첫줄에 “에 수정되었습니다.” 라는 문구를 추가해주세요 product 앱에서 을 담고 있는 review 테이블을 만들어주세요 현재 날짜를 기준으로, 노출 종료 날짜가 지나지 않았고 활성화 여부가 True..

''' 내가 사용한 모듈은 내가 커스텀을 할 수 있어야 한다.''' 기능에 따라 커스텀을 자유롭게 활용할 수 있는 장고 개발자가 되보자. 1. 매니투매니 필드의 경우, 객체 생성시 바로 create는 안되고 생성 후에 add를 해서 객체에 추가를 해야한다. https://stackoverflow.com/questions/6996176/how-to-create-an-object-for-a-django-model-with-a-many-to-many-field 객체를 넣을때랑, 값을 넣을때랑 쿼리 선언이 차이가 난다. 2. serializer 심화 2-1) validator 커스텀 is_valid(raise_exception =True) -> 벨리데이션을 통과하지 못하면 다음 단계로 못 넘어감. 2-2) cr..

1. 서버에서 request한 데이터 받을 때 json data -> request.data.get() form data -> request.POST.get() 2. 폴더 생성시 폴더 안에 파일을 모듈 처럼 사용하기 위해선 __init__을 만들어줘야한다. 그래야 import할 때, 경로 문제에 대한 에러가 안뜬다. 3. testCaser를 사용하여 테스트 코드 작성 시, 원하는 값에 대한 것이 객체일 때는 새로 생성해줘야한다. 테스트 코드 상에선 기존의 디비와 같이 쓰는 것이 아닌 따로 비어있는 디비를 사용하기 때문 4. Article과 Category 는 N:N으로 엮여있다. 유저로 부터 객체를 받아와서 생성하는 서비스 로직을 구상할 때, 해당 값은 리스트 형태로 들어온다. 값이 다수가 존재할 수 있..

1. postman 활용 1-1. postman에서 csrf 토큰 넣어주기. 1-2. postman을 활용한 유저 로그인 json은 '' 이 안되고 쌍 따움표로 "" 안에 키(필드 네임) 벨류(아이디 또는 비밀번호 값) 값 설정 2. serializes.ModelSerializer meta class 를 통해 필드를 지정하고 커스텀할 수 있음. password는 리턴할 때 writeonly 로 반환 반환을 아예 안하면 안되는가? 비밀번호인데? 이 부부은 추후 사용자가 정보를 수정하거나 업데이트 해야할 때, 필요하기 때문 그래서 반환을 하되 extra_kwargs로 read는 제외한 writeonly를 설정 many = True 설정하면 쿼리셋, 기본은 False로 객체만 반환 순환참조에러 -> Impor..

1. settings.py에 비밀번호나 깃허브에 노출이 되면 안되는 것들 관리는 환경변수로 설정하면 좋다. 파일을 따로 만들어 깃이그노어하는 경우도 있긴한데 리눅스는 보편적으로 환경변수에다 설정을 하는 방법으로 한다고 한다. -> 추후에 리눅스 환경에서 적용해보자! 2. 장고의 middleware 사용자와 서버가 통신을 주고받을때 이 레이어를 거쳐서 정보를 주고 받는다. 이 미들웨어의 다양한 기능들이 있어 데이터의 정보를 주고 받을 해당 웨어를 거쳐 정보가 전달된다고 한다. 3. Model.object.get 과 filter의 차이 get은 객체 반환(1개), filter는 객체의 집단 리스트의 형태로 반환 0개 이상의 객체들을 리스트로 반환. get의 경우 다수 또는 객체가 없는 것을 쿼리를 보내면 ..