PROJECTS 110

body 안넣었을때 에러처리 | 에러메세지 필드값 설정 | flake8 좋다..

오늘의 목표로는 회원가입시 request.data의 field 값이 비어있는 것이 아닌 body (= request.data) 자체가 없을 경우의 로직도 작성하고자 했다. service TestCase에서는 TypeError가 나왔고, view에 그에 따른 에러핸들링을 했으나 실행해보니 에러메세지가 TypeError의 메세지가 아닌 ValidationError가 나왔다. view가 아닌 service 로직에 적용을 하거나 raise를 사용해 예외처리를 해봤지만 결과가 같았다. body값이 없을 경우에는 request.data 가 빈값으로 밖에 나오질 않으니 if문을 사용해 response를 작성해주고, TypeError에 대한 에러핸들링 코드가 불필요해져서 삭제해주었다. TestCase 작성시에는 인자값..

PROJECTS 2022.12.10

pytest 에러

테스트코드를 작성하여 로직에 대한 에러처리와 코드가 잘 작동되는지 검증하고 확인할 수 있다는 사실을 알게되어, 장고에 내장되어있는 django.test 모듈을 사용하여 한 앱의 APIs와 Services 에 대한 테스트코드를 작성했었다. from django.test import TestCase 코드 최근 구인 과정 중 기업과제를 몇번 접해보니 unittest 보다는 pytest를 많이 사용하는 것 같더라. pytest는 fixture를 별도의 함수로 분리해서 관리 필요한 테스트 케이스에서만 호출해서 사용 fixture를 모듈화, 재가공, 재사용 등이 쉬움 테스트코드 결과도 unittest 보다 좀 더 상세함 장점들이 많아보여 사용해보고자 ! 모듈을 임포트하여 세팅하는 과정에 ... 겪은 문제들에 대해 ..

PROJECTS 2022.12.07

Django | RESTful API는 뒤에 slash가 없어야하는데 WARNING 발생

RESTful한 API의 규칙 중 하나가 url 뒤의 slash가 없음임. 그래서 Django 프로젝트를 적용해보려 했더니 경고가 발생하더라 원하는 url 127.0.0.1:8000/users/ 👉 127.0.0.1:8000/users 127.0.0.1:8000/posts/ 👉 127.0.0.1:8000/posts 우선 127.0.0.1:8000/users 와 127.0.0.1:8000/posts 을 했을 때 경고 내용을 자세히 보자면 Your URL pattern '/login' has a route beginning with a '/'. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure ..

PROJECTS 2022.11.10

AttributeError: This QueryDict instance is immutable

해당 함수는 게시글 작성에 관한 코드. view, service, Service TestCase 부분에서는 정상 작동되었으나 API TestCase를 작성 중에 발생 response 부분에서 data를 받지 못함. def test_post_view_def_post_ok(self): client = APIClient() user = User.objects.get(username = 'test_user') create_data = { 'title' : 'test_title3', 'content' : 'test_content3', 'tags' : '#sns', 'is_active' : True, 'views' : 60, 'created_date' : '2022-10-16 08:00:00.000000' } cl..

PROJECTS 2022.10.20

쿼리수 줄이기

전 포스팅에서 쿼리수를 확인해보았습니다 ! 지금 제 코드들..의 상황에서 쿼리수를 극단적으로 줄이기는 힘들어서 찔끔 줄여봤습니다. 42 -> 39 아래는 쿼리수를 확인하려 했던 함수입니다. 바뀐 부분은 단 한 줄로 23번에 해당됩니다. Post.objects.last() 🔽 🔽 🔽 post_data_serializer.instance objects.last() 쿼리 셋 결과 중 가장 마지막 오브젝트만 조회할 때 사용하는데 serializer.instance 이미 PostSerializer를 통해 오브젝트가 특정되어 있고, DB에서 어떤 오브젝트인지 찾을 필요가 없기 때문에 사용해보니 쿼리수가 줄은 것을 확인할 수 있었음

PROJECTS 2022.10.13

쿼리수 확인

디버그 콘솔을 보면 final_queries에서 쿼리수를 확인할 수 있음 쿼리들을 보고자하면 captured_queries를 누르면 보임 이걸 확인하고자 한다면 테스트코드(TestCase) 에서 디버그 모드를 사용해야함 중단점은 ctx.aqptured_queries 에 찍어주고 디버그 콘솔창에서 ctx를 입력해주면 확인이 됨 쿼리수를 확인할 수 있는 코드는 이 부분으로, 주석에 보이는 것처럼 본인이 확인하고자 하는 함수와 인자값을 같이 입력해주면 됨 with CaptureQueriesContext(connection) as ctx: create_post(create_data, user) # 본인이 확인하고자하는 함수를 넣어주면 됨 ctx.captured_queries ⭐️ 임포트는 필수 ⭐️ from d..

PROJECTS 2022.10.12

set_password | make_password | check_password

기업과제에서 유저모델이 없이 게시글 자체의 비밀번호를 부여해 게시글을 작성하는 코드를 작성했었다. 비밀번호를 해시 암호화를 해주는 method인 set_password를 사용해 게시글의 비밀번호를 생성해보았지만 되질 않음 검색을 해보니 같은 기능하는 함수가 있어서 사용해 해결하였고 그 과정에서 알게된 set_password | make_password | check_password 를 간단히 적어봄 원인 : 평소 사용하던 set_password는 UserModel을 상속받아 사용할 수 있는데 내가 했던 프로젝트는 UserModel 없이 비밀번호를 만드는 작업이었기 때문에 되질 않았던 것. 해결 : Django 내장 함수인 make_password 를 사용해 해결 ! 💚 set_password 예시 set..

PROJECTS 2022.09.08

도메인 연결

도메인 연결 가비아 호스트 설정 Django ALLOWED_HOSTS = 설정 ALLOWED_HOSTS = ['15.164.93.44', '127.0.0.1', 'localhost', **'citistagram.com', 'www.citistagram.com'**] 도메인 연결시 중요한 부분 : conf파일 경로 nginx/Dockerfile COPY nginx.conf etc/nginx/**conf.d** 도메인 연결시 발생한 오류 nginx는 연결이 잘 되었으나, 어드민페이지로 이동시 404 Not Found 오류 발생 해결 Ubuntu 환경 내에서 nginx/Dockerfile 경로설정이 잘못되어 git pull을 다시 받아 원상복구하여 해결함 IP주소/admin 은 들어가지는데 도메인주소/admi..

PROJECTS 2022.09.05

RDS PostgreSQL 배포 과정

엔진 PostgreSQL 사용 이유 : Django 에서 공식적으로 지원하는 databases이기에 사용함 1. Django psycopg2 설치 이유 : Python이 Postgres와 함께 작동하기 위해 모듈 설치 OS에 pg_config 설치가 선행되어야 함 pip requirements.txt에만 추가해주어 우분투에서 설치해도 무관 settings.py DATABASES 설정 -> env로 설정 DATABASES = { 'default': { 'ENGINE': os.environ.get('SQL_ENGINE',"django.db.backends.sqlite3"), 'NAME': os.environ.get('SQL_DATABASE', BASE_DIR / "db.sqlite3"), 'USER': os..

PROJECTS 2022.09.02
반응형