본문 바로가기

python if else 한줄로 (ternary operator) 일단 아래와 같은 python if else 코드가 있다고 가정해봐요. 결과는 output_value가 100으로 되겠죠? input_value = 1 output_value = -1 if input_value == 1: output_value = 100 else: output_value = 200 print(output_value) 한줄로 표현하는 방법은 아래와 같습니다. 위에 코드, 아래 코드 모두 100이 찍힐거에요. output_value = 100 if input_value == 1 else 200 print(output_value) 처음에는 익숙하지 않아서 코드를 읽는데 조금 거부감이 있을 수 있지만 한 줄이 너무 길지 않다면 저는 한 줄로 표현하는게 맞다고 생각합니다. 이런 걸 python .. 더보기
githook으로 python 기본적인 컨벤션 맞추기 많이들 적용하는 방식이죠. githook으로 기본적인 회사 컨벤션 맞추는 방법 정리해봅니다. 깃폴더로 이동해서 하위에 있는 .git/hooks 폴더에 가보면 여러 샘플 파일들이 있는데요. pre-commit을 통해서 commit 이전에 무언가를 수행하도록 할 수 있는데요. pre-commit.sample 파일을 직접 수정하시는 것도 되고요. 이번에는 pre-commit 라이브러리를 설치해서 적용하는 방법을 소개해드립니다. 일단 pre-commit을 설치해주세요. 가상환경에서 아래 명령어로 설치가 가능합니다. pip install pre-commit pre-commit에서 적용해보고 싶은 것은 pylint인데요. 이걸 어떻게 적용하기 위해서는 프로젝트 폴더에 .pre-commit-config.yaml 파일.. 더보기
python string 좌우 공백 제거 파이썬에서 문자열 왼쪽, 오른쪽, 양쪽 공백 제거하는 함수에 대해서 가볍게 정리해봅니다. strip() 이라는 함수를 사용하시면 되는데요. 자세한 사용 방법은 예시 코드를 보면서 소개해드릴게요. 먼저 좌우에 공백이 하나씩 들어가 있는 test_str를 생성했습니다. test_str = ' abcd ' print('"{0}"'.format(test_str)) # " abcd " print('"{0}"'.format(test_str.strip())) # "abcd" print('"{0}"'.format(test_str.lstrip())) # "abcd " print('"{0}"'.format(test_str.rstrip()))- # " abcd" 첫 번째 print에서는 좌우 공백이 있는 그대로를 프린트 했.. 더보기
Django RuntimeWarning: DateTimeField ... received a naive datetime #python 글 제목처럼 Django에서 RuntimeWarning: DateTimeField ... received a naive datetime가 발생하면 settings.py의 USE_TZ 값을 확인해보시면 됩니다. 아마도 True로 설정되어 있을 것 같은데요. 아래와 같이 False로 변경해주시면 warning이 사라집니다. USE_TZ = False 아래와 같은 DateTimeField에 값을 입력하거나 업데이트 할 때 발생할 수 있습니다. dttm = models.DateTimeField(auto_now_add=True, null=False) 국내에서만 서비스 한다고 하면 USE_TZ False로 써도 될 것 같고요. 해외 사용자도 고려되야 한다면 USE_TZ = True, DateTimeField도 tz.. 더보기
웹크롤링, 파싱, 가공, 매크로 프로그램 개발관련 서비스 cchart.xyz 웹크롤링, 파싱, 가공, 매크로 프로그램 개발관련 서비스가 새롭게 오픈해서 소개해드릴게요. 사이트는 http://cchart.xyz 입니다. cchart.xyz / 웹크롤링, 파싱, 가공 매크로 프로그램 개발 서비스 반복적인 웹크롤링, 파싱, 가공 매크로 프로그램 개발 서비스 cchart.xyz 실제 크롤링이라는 작업은 복잡한 것이죠. 간단하게 말하자면 인터넷에 있는 수많은 웹 페이지를 기계적으로 접근해서 해당 페이지의 정보를 읽고 수집하고 페이지에 있는 링크들에 접속해서 또 페이지의 정보를 읽고 수집하고 이런 것들을 반복하는 것이라고 할 수 있겠죠. https://ko.wikipedia.org/wiki/%EC%9B%B9_%ED%81%AC%EB%A1%A4%EB%9F%AC 웹 크롤러 - 위키백과, 우리 모.. 더보기
python timestamp to datetime 파이썬에서 timestamp를 datetime으로 변경하는 방법입니다. 일단 dateutil이라는 라이브러리를 사용하는 것이 편리해서 dateutil을 설치합니다. pip install python-dateutil 로 설치하실 수 있습니다. dateutil 문서: https://dateutil.readthedocs.io/en/stable/ dateutil - powerful extensions to datetime — dateutil 2.8.1 documentation Quick example Here’s a snapshot, just to give an idea about the power of the package. For more examples, look at the documentation. S.. 더보기
selenium python - 에러 날 때 한 번 쯤 해보면 좋을 시도 selenium python - 에러 날 때 한 번 쯤 해보면 좋을 시도 에러의 종류에 따라서 달라지겠지만 xpath 혹은 name, class 등으로 elements를 찾아 클릭하는 것을 시도했을 때 에러가 난다면 2가지를 볼 것 같아요. 1 . modal이 띄워져 있어서 해당 elements를 찾았지만 클릭이 안된다. >> 요건 이전 포스팅에 작성해뒀는데 한 번 확인해보세요. modal을 display:none 시키면 됩니다. >> 2019/08/25 - selenium python - Other element would receive the click 2. element를 못찾는다. >> 코드가 실행될 때 selenium이 해당 페이지를 모두 로드하지 못하는 경우도 있는 것 같으니까 time.sle.. 더보기
selenium python - Other element would receive the click selenium python - Other element would receive the click selenium으로 어떤 버튼을 클릭하도록 했는데 Other element would receive the click 에러가 난다면 혹시 modal이 앞으로 나와있는지 확인해보시면 좋을 것 같아요. modal이 나와있으면 뒤에 있는 것들이 클릭 안되는 상황일지도요 ! 간단하게 modal을 없애 버리면 되는데 display:none을 활용하시며 됩니다. 예를 들어서 modal의 id가 modal_aabbcc 인 경우에 아래와 같은 코드로 modal을 사라지게 할 수 있습니다. driver.execute_script("document.getElementById('modal_aabbcc').style.displ.. 더보기
django.core.exceptions.FieldError: Related Field got invalid lookup: icontains django.core.exceptions.FieldError django.core.exceptions.FieldError: Related Field got invalid lookup: icontains 이렇게 에러나 가는 경우에 FK 관련된 내용을 검토해보시면 됩니다. 저 같은 경우에는 search_fields에 FK를 바로 썼더니 에러가 나더라고요. 당연한거죠 ! search를 column 단위로 해야지 object 단위로 하려고 하니까 에러가 발생할 수 밖에요 ! 예를 들어서 news라는 FK가 있다고 합시다. search_fields에 적어줄 때는 news의 어떤 컬럼인지 적어줘야 합니다. search_fields = ('news',) #error title이라는 column이 있다고 가정하고 작성.. 더보기
DRF Custom Permission DRF Custom Permission Django에서 특정 그룹에 속해있는 유저만 실행할 수 있는 viewset을 만들어봅시다 !! 일단 "NGEE" 라는 그룹이 생성되어 있다고 가정할 때 아래와 같은 permission 클래스를 하나 만들어줍니다. ngeePermission의 has_permission이 하는 일은 request.user.groups 이름을 가지고 와서 거기에 NGEE가 있는지 없는지를 리턴해줍니다. NGEE 라는 그룹에 속해있다면 True가 리턴될 것이고 반대로 속해있지 않다면 False가 리턴되겠죠? from rest_framework.permission import BasePermission class ngeePermission(BasePermission) def has_perm.. 더보기
Django Test - pytest, reuse, create db, migration 등 간단 소개 pytest -p no:warnings DJANGO TEST - PYTEST pytest를 사용하면 테스트 데이터베이스를 다시 만들지 않아도 되니까 테스트 시작 속도가 빠르죠. 그래서 많이들 사용하시는 것 같습니다. 저도 테스트 할 때 pytest로 돌리는데 일단 ini는 기본적으로 reuse 옵션을 주고 돌립니다. 이유는 이미 생성된 test db를 사용하고 싶기 때문이죠. pytest -s --reuse-db 하지만 처음 테스트를 돌리거나 모델(model)의 변경이 있었다면 기존 test db 구조와 테스트가 돌아가는 코드가 맞지 않겠죠. 예를 들어서 없는 테이블에 접근하려고 한다거나? 없는 컬럼을 사용해서 테스트 한다거나 등등 그럴 때는 --create-db 옵션을 주고 돌립니다. 다시 정리하면 p.. 더보기
깃 브랜치 이름 출력하기 - git, fabric, local, print Git Branch Name Print 자동으로 무언가를 수행하려고 할 때 저는 git branch 네임을 활용하는 경우가 종종 있는데요. 예를 들어서 깃 브랜치 네임에 release 가 포함되지 않았는데 무언가 배포하는 행동을 하지 못하게 한다거나. 브랜치 네임으로 실행해야 하는 함수들을 다르게 한다거나 등등이 있습니다. 물론 제가 사용하는거지 보편적인 방법은 아닌 것 같습니다. 암튼 어떤 이유들 git branch name이 필요하시면 아래 명령어로 가져오실 수 있습니다. git rev-parse --abbrev-ref HEAD fabric에서 local로 위 명령어를 실행하고 값을 가지고 오기 위해서는 아래와 같이 capture 변수를 추가되면 됩니다. local('git rev-parse --ab.. 더보기
django-crontab 소개 (특정 모듈 주기적으로 실행하기) Django-crontab 적용하기 django-crontab으로 특정한 모듈을 주기적으로 실행하는 것이 가능합니다. 물론 직접 crontab에 잘 작성하는 것도 방법이겠지만 라이브러리로 어느정도 간단하게 관리가 가능하니까 사용하는 것이 좋을 것 같습니다. 설치는 pip install django-crontab settings.py에 아래와 같은 내용을 포함해줍니다. INSTALLED_APPS = [ ... ... 'django-crontab', ] ... ... CRONJOBS = [ ('* * * * *', 'app_name.file_name.def_name', '>> /log_path/log_file.log') ] INSTALLED_APPS는 당연한거니까 PASS ! CRONJOBS에 적절히 추가해.. 더보기
Fabric Error with cryptography version Fabric 실행했을 때 잘 모르겠는 에러가 나면서 cryptography 어쩌고 하면 버전을 체크해보시면 좋겠습니다. 저같은 경우에는 cryptography 버전이 2.4.2 가 아니면 에러가 나더라고요. 그래서 아래와 같은 명령어로 cryptography 를 다시 설치했습니다. pip install cryptography==2.4.2 pip 설치할 때 패키지명 뒤에 == 를 붙이고 버전을 써주면 해당 버전을 설치해줍니다. cryptography 버전을 체크하는 방법은 pip freeze를 사용하시면 되는데 pip freeze | grep cryptography 하시면 cryptography 버전만 확인이 가능하죠. 아무튼 Fabric 에러나는데 잘 모르겠다. 하시면 cryptography 버전 확인해.. 더보기
django 'load staticfiles' and 'load static' django에서 {% load staticfiles %} 와 {% load static %} 둘 중에 어떤 것을 사용하는게 맞을까요? 공식 문서에서는 {% load static %} 을 추천하고 있습니다. https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#static pytest로 돌려보시면 {% load staticfiles %} >>>> {% load static %} 으로 변경하라는 warning이 계속 나와요. 이런 것들을 보았을 때 앞으로는 load static을 사용하는게 맞는 것 같습니다. 아마도 load staticfiles가 삭제될 예정이겠죠. 저도 load static으로 모두 변경했어요. 테스트 과정에서 나오는 warning.. 더보기
Fabric 에서 password 입력하지 않는 방법 저는 Fabric으로 배포하는 경우가 있는데요. ssh를 통한 방법이다 보니까 아이디, 패스워드를 물어보는 경우가 있습니다. 가장 쉬운 방법은 ssh key를 복사해두는 것이죠. from fabric.context_managers import cd, env def set_awsapi(): env.hosts = ['server1', 'server2', 'server3'] env.user = 'ubuntu' env.key_filename = ['~/key~~~name~~~.pem] 그런데 어떤 이유(정책?) 때문에 키복사는 허용되지 않을 때 아이디 / 패스워드로 입력해서 들어가야 하는데 매번 타이핑 하기가 너무 귀찮을 때가 있죠. 아래와 같은 방법으로 password를 더 이상 치지 않아도 됩니다. from.. 더보기