Build a Backend REST API with Python & Django - Advanced블로깅 한 내용은 파이썬, 도커, drf를 기반으로 udemy 영상을 시청한 것입니다.Manager users/api/user/create/api/user/token/a
Applicaion logic and testsPEP-8 Best Practice GuidlinesAutomated code lintingPython Web FrameworkBuild web apps rapidlyORM(Object Relational Mapper)
Code to Check your worksIsolate specific code to testClassesFunctionsAPI EndpointsTakes practice
현재 프로젝트 폴더에는 아래와 같이 파일들이 있어요. 이제 개발환경을 더 수월하게 구성하기위한 도커 작업을 할텐데요. 도커파일과 도커컴포즈파일 2개를 작성해볼게요. 현재 디렉토리에 빈 app 폴더도 만들어 주세요.작성이 완료되었다면 docker build .명령어를 실
이전 3편에서 Dockerfile, docker-compose.yml 파일 2개를 작성했는데요. 이를 통해서 이미지를 빌드하고 컨테이너를 만들었어요. 이번에는 이미지를 기반으로 컨테이너를 구동함은 물론. 프로젝트까지 만들어 보도록 할게요. docker-compose
노트북은 윈도우 파이썬 환경이며, AWS EC2의 경우 콘다 가상환경으로 현재 사용 중에 있어서, 또한 통일된 python 버전이 아닙니다.이에 추후 dependencies 문제가 우려되어 일단 밑작업으로 통합을 했는데요. 그 과정에 알게된 명령어와 방식들을 한토막으로
테스트 주도 개발(Test-driven development TDD): 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의
core앱 안의 models.py에서장고가 제공하는 User 클래스를 customizing해서 작성해볼게요.UserManager class를 만들건데요. 함수를 작동을 돕거나 superuser생성을 만들어 주는 기능을해요.우선 클래스 첫 정의시 BaseUserManag
이게 뭘까유?쉽게 말하면 이메일의 도메인 부분을 소문자로 통일시키기 위한 거에요.참고 : https://stackoverflow.com/questions/27936705/what-does-it-mean-to-normalize-an-email-addresstes
이메일 유효성 검사를 해볼건데요. 생성된 유저 객체를 호출할 때 작동하게 되요. email이 입력되지 않으면 Value에러를 발생시켜야하는데~ 이를 테스트해볼게요. 아래와 같이 메소드 하나를 추가로 작성해볼게요. core/tests/test_models.py아래 2줄을
장고 관리자를 조물딱 해볼게요.장고에서 자랑하는 좋은 인터페이스 중 하나로 유저 목록을 한번에 확인하고 생성,수정,삭제 할 수 있조?!현재 TDD방식으로 개발하는 만큼 테스트부터 만들어 주겠습니다. app/core/tests/test_admin.py여기서 눈에 띄는부분
장고에서 제공하는 관리자 페이지를 커스터 마이징하기위해 admin.py에 소스코드를 적어볼게요. 여기서 가장 중요한점은 UserAdmin을 사용한다는 점이에요. 커스터마이징 하기위해서 이름을 잠깐 BaseUserAdmin으로 바꾼 다음에 원래 장고에서 정의한 이름인
Modify Django admin to support changing user model
지난 번에는 등록된 유저의 정보를 수정하는 페이지를 짜봤다면 이제는 유저 등록 페이지를 커스터마이징 해볼게요.프런트는 아래와 같이 나올거에요. 가장 마지막에 함수 하나를 아래 소스코드 처럼 만들어 볼텐데요. reverse()를 통해서 url 매핑을 해줘요. 이전 시간과
이번 시간에는 장고에서 기본적으로 제공하는 sqlite DB설정을 postgresql로 바꿔버릴게요.우선 docker-compose 파일을 수정해야해요. 새로운 데이터베이스 서비스를 생성하기 위해서조 물론. 그 진행중 db 설정에 대한 부분도 물론 작성되어야하고요. 기
장고가 도커와 커뮤니케이팅 하기 위해서 약간의 dependencies를 빌드해보도록 할게요.외부 패키지를 다운 받아야하는데요. 더불어 장고와 postgres간의 통신에 필요한 여러 의존성 패키지들도 설치해줘야 해요. 아래 한 줄을 삽입 해주도록 할게요.psycopg2>
DB엔진과 django를 서로 커뮤니케이션하기 위해서 settings.py설정을 해볼게요. 모두 alphine 리눅스 환경변수에서 가져오는데요. 그럼 이 os는 어디서 그걸 알고 가져온걸까요? 물론 우리가 지난번에 작성했던 docker-compose.yml에서 받아 온
django custom command를 만들어볼게요.db가 온전히 실행되기 전에 다른 명령어가 수행되면 안되기에 이를 기다리게! 하기위한 명령어에요.장고 앱 실행시 docker-compose 파일에 사용하기 위해서에요.왜냐하면 가끔 장고앱에서 디비 애러를 내서 서버
앞서서 짯던 소스코드는 테스트 소스코드고 이제 실제 커스텀 명령을 실행할 소스코드를 짜볼게요.
docker-compose.yml 파일을 수정해볼게요. docker container와 db container간의 통신시 앞서서 19에서 설명한 것처럼 logic을 컨테이너간에도 구현하기 위해서조.즉, 장고 app이 실행되기 전! 우선적으로 실행되어야해요.현재 dock
브라우저에서 관리자 페이지에 접속 해보도록 할게요. 우선 docker-compose 명령으로 관리자 계정을 생성할게요. 그럼 이메일과 패스워드를 입력하라고 화면이 바뀌게되요.
user endpoint를 만들어 볼게요.Create, Read, Update, Create user authentication 기능을 구현해 보도록 할게요. django-compose run --rm sh -c 'python manage.py startapp user
이제 본격적으로 user api작성을 해볼건데요. 근데 항상 그 처음은 뭘까요?TDD(Test Driven Development) 방식으로 진행된다는 점! app/user/tests/ 폴더에서 새로운 파일 test_user_api.py을 만들어 볼게요. 오늘 완성할 코
바로 앞선 강의 22에서 test코드를 작성했는데요. 이제는 Pass하기위한 소스코드를 짜봐야겠조?---구체적으로는 user request에 대응하는 serializer 소스코드를 짜볼거에요. -> 그리고 나서 request를 처리할 view를 짜는거고요. - > 마무
이번 시간은 로그인 이후 토큰 생성을 위한 API를 만들어 볼텐데요. 테스트는 4개 만들어 볼게요.test_create_token_for_usertest_create_token_invailid_credentials(self):test_create_token_no_use
유닛테스트 통과시켜야겠조?serializers.py 파일을 작성할게요.파일 작성은 전체적으로 보면 아래와 같이 되요.우선 처음 serializers.Serializer 클래스를 상속받아서 AuthTokenSerializer 클래스를 정의할게요.근데 이런 궁금증이 들것
manage user endpoint를 작성해보도록 할게요. 역할 : 인증된 유저만 profile 수정을 가능하게함.(이름,이메일,비밀번호 변경)test_user_api로 갈게요. ME_URL을 지정할게요. 그리고 test_retrieve_user_unauthorize
Build a Backend REST API - 27에서 test 코드를 짜봤는데요. 실제로 view짜볼게요. 현재는 serializer.py파일에는 UserSerializer 클래스가 있는데요. 여기에 update()메소드를 작성하여 user객체를 업데이팅
Create a new app docker-compose 명령어 도커 명령어 한줄로 장고 앱을 하나 만들어 줄게요. settings.py & directory recipe 앱의 구조를 아래와 같이 바꿀게요. 다른 것들은 삭제해주세요. 또 앱을 만들었으면 장고에
test_create_tag_successful 매서드를 마지막에 생성할게요.tag 생성 요청을 클라이언트에 보낼거에요. 그리고 이후 response로 객체가 존재하는지 존재하지 않는지 테스트디비에서 filter를 통해 받아오고 이를 assertTrue를 통해서 확인하
migrations 모델을 생성할게요.
ingredient를 리스트로 뿌려줄 API를 만들기 위해서 test코드를 작성할게요.recipe/tests/test_ingredients 경로를 만들고 파일 역시 만들도록 할게요. 우선 필요한 것들을 임포트부터 할게요. 아직 IngredientSerializer를
앞시간에 테스트 코드를 짯는데요. 시리얼라이저가 없다고 오류가 떳조?! 이를 해결해보도록 할게요./recipe/serializer.py 소스 코드 추가 작성을 아래와 같이 할게요. Meta클래스의 2개 model, fields는 알겠는데, read_only_fields
ingredient의 retrieving 말고 Creating을 해보도록 할게요.recipe/tests/test_ingredients_api.py아래 첫번째 메서드는 key-value가 온전히 입력 되었을 경우 200을 띄우고 아래 테스트 메서드는 key값인 name만
views.py에서 두개의 클래스 내부를 살펴보면 중복된 소스코드들이 상당히 있습니다. 이를 리팩토링 하느 시간을 가질게요.클래스의 상속 받는 3개의 부모 클래스가 동일함get_queryset(), perform_create()메소드가 동일하게 위치함. 클래스 변수인
66~75번째 줄까지 test_recipe_str 메서드를 작성할게요.타이틀이 문자로 출력되고 동일한 값인지 비교 할 거에요.테스트 돌려 보면 아래와 같이 Recipe 모델이 없다고 AttributeError가 발생해요. 그럼 만들어야조?!user 필드에는 settin
현재까지 recipe/tests/폴더 안에는 test_ingredients_api.pytest_tags_api.py두 가지 파일이 있는데요. 추가로 teest_reipe_api.py 파일을 작성할게요. 파일 이름이 워낙 직관적이라서 쉽게 이해하겠지만 recipe api
앞서 37에서 테스트 코드를 쭉 짜밧는데요. 지난번 마지막 테스트를 돌려 봤을때 fail이 떳는데 이를 해결해 볼게요. Ingredient, Tag 클래를 임포트 할게요.recipe/serializers.py 파일의 아래 새로운 RecipeSerializer클래스를 M
recipe의 디테일을 만들어 볼게요. Ingredient 클래스를 임포트 할 게요.recipe 객체에 tag와 ingredient를 맵핑 해주려면 객체 생성을 해줄 함수가 필요한데요. 그 녀석을 global scope에 정의해둘게요. 그럼 어디서든 마음껏 불러 낼수
앞서 test case 몇개를 작성했는데요. 이제는 serializer와 관련 view들을 작성하거나 수정 해볼게요. read_only=True 키워드 인자를 사용하여 디테일 페이지로 넘어가면 해당 필드가 잠겨있어 수정이 되지는 않아요.(나중에 Browsable API
post 요청에 대한 API를 만들어 볼게요. tag or ingredient 연결 없이 기본 쌩짜 recipe 객체를 만들어 볼거에요.먼저, payload 딕셔너리 변수를 정의 할게요. 그 다음 self.client.post 메서드를 통해서 target endpoin
views.py 파일을 약간 손보고 이제 어느정도 완성된 API를 크롬 브라우저로 쪼물딱 쪼물딱 해보겠습니다.RecipeViewSet 클래스에 메서드 하나만 선언 할 거에요. perfomr_create메서드인데요. 현재 인증된 유저의 정보를 serializer에 저장하
추가적으로 테스트 케이스를 더 진행할건데요. HTTP METHOD PUT과 PATCH에요.기존 recipe객체의 title키, tags 키의 value값 2개를 다른것으로 166번째 줄에서 바꿔버렸어요. detail_url()메서드의 인자로 recipe.id 값을 넣고
이미지 업로드 및 해당 이미지를 조작을 위한 API구현을 할 거에요.장고에서 이미지 manipulation시 꼭 필요한 Pillow requirements.txt 파일에 작성 할 게요.의존성 파일 설치도 필요한 만큼 Dockerfile에도 추가 설치를 위한 명령어를 작
Modify recipe model 앞선 시간에 Pillow에 대해서 언급하고 경로와 링크 지정에 대한 셋업을 조금 했는데요. 이미지 파일을 경로를 저장할 ImageFiled에 대응하는 변수를 지정하고 파일이름을 uuid로 지정하기 위한 셋업을 작성해보도록 할게요.
모듈 tempfile, os, PIL을 임포트 할게요. import tempfileimport osfrom PIL import Imagetempfile모듈은 임시 파일과 디렉터리를 만듭니다.그리고 아래 image_upload_url 함수를 정의할 게요. 가장 하단에 R
/recipe/serializers.py 경로에 파일을 추가 수정 및 작성해보도록 할게요. action, Response, status 각각을 임포트 하도록 할게요. from rest_framewrok.decorators import actionfrom rest_fra
필터 기능을 구현 해보도록 할게요. 3개의 test case를 만들거에요.payload에 tag1.id, tag2.id를 넣어서 조회하는 필터 기능 payload에 ingredient1.id, ingredient2.id를 넣어서 조회하는 필터 기능아래와 같이 fail이
앞서서 47에서 우리가 작성한 소스코드들이 fail났는데요. 이를 해결해 보도록 하조. 쿼리 스트링으로 넘어온 data를 가지고 다뤄바야합니다. 이때 필요한 것이 request 객체의 속성중 하나인 query_params입니다. 거기서 tags키, ingredien
Recipe 클래스를 아래와 같이 임포트 할게요. from core.models import Tag, Recipe그리고 test를 작성할게요.(가장 하단에 작성)Recipe 클래스를 아래와 같이 임포트 할게요. from core.models import Ingredie
커스텀 클래스인 BaseRecipeAttrViewSet 클래스의 메서드인 get_queryset을 좀 뜯어 고쳐볼게요. assigned_only 변수를 만들고요. query_params속성을 이용해서 get()메서드를 활용해 'assigned_only'키의 값을 불러올