본문 바로가기

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.. 더보기
Django User Profile 적용하기 with allauth models.py에 UserProfile 모델을 하나 생성합니다. 저는 TestUserProfile을 하나 만들었고 user, gender, address를 가지고 있습니다. user는 User모델과 1:1 매칭됩니다. gender와 address는 그냥 charField입니다. 제대로 하기 위해서는 알맞은 타입을 가져야 하겠죠 ? 다음은 forms.py 에다가 SignupForm을 생성해줍니다. gender, address 에 해당하는 form 필드를 만들어 줍니다. widget을 설정할 수 있습니다. attrs에 class를 추가할 수 있고요. signup 함수를 만들고 profile, user를 저장하는 코드를 작성해줍니다. python manage.py makemigrations python ma.. 더보기
PEP 8 소개 및 적용 PEP 8 - Style Guide for Python Code 간단히 소개하고 적용하는 방법 정리해봅니다. 많은 사람들과 같이 코드를 개발하려면 어떤 기준에 의해서 코드를 작성하는 것이 좋겠죠. 가독성 측면에서 뛰어나니까 다른 사람의 코드를 보고 이해하는 것이 편리하니까요. 그래서 PEP 8이 존재하는 것입니다. 많은 블로그에서 PEP 8 간단 정리한 버전들이 있더라고요. 그것들을 참고하신는 것도 좋고 PEP 8 문서를 읽어보시는 것도 좋을 것 같습니다. 엄청 길지는 않아요. PEP 8 - https://www.python.org/dev/peps/pep-0008/ 저는 ATOM 에디터를 사용하기에 PEP 8 적용을 좀 더 쉽게 할 수 없을까? 찾아봤습니다. python-autopep8 설치하시면 pac.. 더보기
Selenium Webdriver 활용 Instagram Login 해보기 (Python) Selenium Webdriver를 활용하면 웹 파싱이나 반복작업 등을 처리할 수 있습니다. 여기서는 간단하게 Instagram Login을 해보는 과정을 작성해봅니다. 환경설정이나 라이브러리 설치는 건너뛰고요. 저는 chromedriver를 활용해서 해보겠습니다. chromedriver는 아래 주소에서 받으실 수 있습니다. 적당한 곳에 다운로드 및 위치 해두면 됩니다. chromedriver : http://chromedriver.chromium.org/ 일단 인스타그램 로그인 페이지를 띄워보고 어떻게 할지 작성할게요. 아래와 같은 창인데요. 단순하게 Id 역할을 하는 phone number, username, or email 입력하는 input이 하나 있고요. password input이 하나 있습니.. 더보기