파이썬

파이썬을 활용한 자동화, 데이터 처리, 간단한 개발 사례를 공유합니다.

파이썬

웹툰 이미지 내려받기 (feat. 덴경대)

덴경대 몇몇 즐겨보는 웹툰이 있지만, 시간 맞춰 챙겨보진 않는다. 보통 주말에 시간이 나고, 빈둥거릴 기회가 생기면 소파에 누워 못 본 회차들을 챙겨보는 여유를 누린다. 그러나 예외가 있으니, 바로 양영순 작가의 덴마다. 덴경대 수준까지는 아니지만, 가능하면 연재일에 찾아서 보는 편이다. 덴마에는 떡밥(?)이라던가, 지나간 회차에 숨겨진 복선, 또는 연결되는 내용이 얽혀 있다. 2010년부터 연재가 시작되었고, 중간에 1년여 […]

파이썬

Django에서 로그 기록 시 RotatingFileHandler 이용하기

RotatingFileHandler 설정 Python에서 제공하는 로깅 중 ‘logging.handlers.RotatingFileHandler’은 로그를 파일에 기록하면서 일정 크기 단위로 백업을 해준다. 이를 Django에서 사용하기 위해서는 setting.py 파일에 아래와 같이 handler 설정을 추가한다. ‘handlers’: {     ‘file’: {         ‘level’: ‘DEBUG’,         ‘class’: ‘logging.handlers.RotatingFileHandler’,         ‘filename’: os.path.join(BASE_DIR, ‘logs/logfile’),         ‘formatter’: ‘verbose’,         ‘maxBytes’: 1024 * 1024 * 1,  # 1MB         ‘backupCount’: 5,     }, }, Colored by Color Scripter cs 개발 환경에서 사용 시 주의할 점 위와 같이 설정하면 로그 파일이 지정한 사이즈에 도달하였을

파이썬

CentOS 6.5에서 Django + uWSGI + nginx 설정하기

Photo by Oğuzhan Akdoğan on Unsplash 개요 CentOS 6.5에서 Django 기반 애플리케이션을 uWSGI와 nginx를 이용하여 서비스 할 수 있도록 설정하는 방법이다. 아래 순서대로 진행하였으며, uWSGI의 가이드를 따라했다. uWSGI 실행은 사용자 계정으로 하였으며, nginx는 root 계정으로 실행하였다. Django 애플리케이션 준비 uWSGI(http)를 이용하여 서비스 uWSGI(유닉스 소켓)와 nginx를 이용하여 서비스 – 소켓 기반이 부하가 더 적음 참고: Setting

파이썬

CentOS 6.5, Python 2.7에서 mysqlclient 설치하기

mysqlclient는 MySQLdb를 개선한 것으로, Python 3도 지원한다. 윈도우 7, Python 2.7에서는 ‘pip install mysqlclinet’ 명령어로 쉽게 설치된다. 그러나 CentOS 6.5에서는 아래와 같은 순서로 설치를 해야 한다. [USER@PLUTO bin]$ Sudo yum install python–devel mysql–devel (catnap) [USER@PLUTO bin]$ python pip install mysqlclient Colored by Color Scripter cs 참고 – https://github.com/PyMySQL/mysqlclient-python 주의할 점 CentOS에 python-devel, mysql-devel가 없을 때 설치하면 아래와 같은 에러가 발생한다. (catnap) [USER@PLUTO bin]$ python pip install mysqlclient Collecting mysqlclient   Using cached mysqlclient–1.3.7.tar.gz Building wheels for collected packages: mysqlclient   Running setup.py bdist_wheel for mysqlclient … error   Complete output from command /opt/Python27/catnap/bin/python –u –c “import setuptools, tokenize;__file__=’/tmp/pip-build-40FgWg/mysqlclient/setup.py’;exec(compile(getattr(tokenize, ‘open’, open)(__file__).read().replace(‘rn’, ‘n’), __file__, ‘exec’))” bdist_wheel –d /tmp/tmpXTAm3Ipip–wheel– ––python–tag cp27:   running bdist_wheel   running build

파이썬

CentOS 6.5에서 Python 업그레이드 방법 (2.6 -> 2.7)

개요 CentOS 6.5에는 Python 2.6.6 버전이 설치되어 있다. 이를 Python 2.7.6으로 업그레이드 하는 방법이 “How to install Python 2.7 and Python 3.3 on CentOS 6“에 잘 정리되어 있다.  요약 1. 필수 라이브러리 설치   # yum groupinstall “Development tools”   # yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel   Colored by Color Scripter cs 2. Python 2.7.6 설치   # wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz   # tar xf Python-2.7.6.tar.xz   # cd Python-2.7.6   # ./configure –prefix=/usr/local –enable-unicode=ucs4 –enable-shared LDFLAGS=”-Wl,-rpath /usr/local/lib”

파이썬

Django에서 동적 쿼리를 생성하는 방법

개요 Django로 만든 웹 애플리케이션에서 DB 테이블의 특정 컬럼을 대상으로 검색하는 기능을 추가했다고 하자. 그렇다면 사용자가 검색어를 입력한 경우와 그렇지 않은 때에 따라서 동적 쿼리를 구성하여 데이터를 조회해야 한다. 이를 Django 뷰 함수에서 구현한다면 검색어 유무에 따라 filter()의 추가 여부를 결정하도록 작성한다. def search(request):     type_id = request.GET.get(‘type_id’)     state_id = request.GET.get(‘state_id’)     user_name = request.GET.get(‘user_name’)     kwargs = {}     if type_id:         kwargs = {‘equipment_code__exact’: type_id}     if state_id:         kwargs = {‘state_code__exact’: state_id}     if user_name:         kwargs = {‘history__user_name__contains’: user_name}     search_result = BlahBlah.objects.all().filter(**kwargs) Colored

파이썬

Virtualenv : 파이썬 애플리케이션 별 독립실행환경 구성

개요 Virtualenv는 파이썬 어플리케이션들 간의 독립 실행 환경의 생성하는 도구이다. 예를 들어 로컬에서 개발 중인 파이썬 어플리케이션들이 사용하는 라이브러리의 버전이 다를 때 서로 영향을 받지 않도록 환경을 구성할 수 있다. 설치 및 개발은 다음 순서로 진행한다. Virtualenv 설치 virtualenv 적용 디렉토리 설정 virtualenv 적용 디렉토리 활성화 라이브러리 설치 및 애플리케이션 개발 Virtualenv 설치 C:Usersusername>pip install virtualenv Collecting virtualenv

파이썬

Django에서 ManyToMany를 사용할 때 주의할 점

ManyToMany 관계를 맺은 객체는 객체변수 중 외부객체와 관련 없는 객체변수들만으로 먼저 저장을 한다. 그리고 난 후 add, remove 함수를 사용하여 외부 객체와의 관계를 정의한 후, 다시 한 번 저장해야 한다. 아래는 예제 코드이다. def register(request)     equip = Equipment()     equip.model_no = request.POST.get(‘model_no’, ”)     equip.serial_no = request.POST.get(‘serial_no’, ”)     equip.registered_date = datetime.now()     equip.save()     equip.alpha_code.add(Code.objects.get(id=int(request.POST.get(‘alpha_code’))))     equip.bravo_code.add(Code.objects.get(id=int(request.POST.get(‘bravo_code’))))     equip.charlie_code.add(Code.objects.get(id=int(request.POST.get(‘charlie_code’))))     equip.save()     return HttpResponseRedirect(reverse(‘somewhere:defcon’, args=(equip.id,))) Colored by Color Scripter cs 참고로, ForeignKey나 OneToOne은 아래와 같이 처리하면

파이썬

Django에서 리스트로 된 모델 인스턴스를 JSON 형태로 리턴하기

문제 Django에서 단일 모델 인스턴스와 리스트로 된 모델 인스턴스를 합쳐서 JSON으로 제공하려면 어떻게 해야 할까? JSON 자료 구조 JSON 자료 구조는 아래와 같이 단일 모델과 리스트 모델을 순서없이 기술하도록 한다. {     “list_instance” : [{             “item_name” : “아이템 001”,             “start_ymd” : “20090720”,             “end_ymd” : “99991231”         }, {             “item_name” : “아이템 002”,             “start_ymd” : “20151101”,             “end_ymd” : “20160831”         }     ],     “single_instance” : {         “id” : 1,         “project_id” : 2,         “registered_date” : “2016-06-21-07:39:55+00:00”,         “start_ymd” : “20150301”,         “end_ymd” : “99991231”     } } Colored by Color Scripter cs views.py

파이썬

Django 1.4에서 1.7로 업그레이드 하기

Photo by Sigmund on Unsplash ‘Fast Web Service Build Up’이란 책을 보면서 Python과 django의 맛을 봤다. 다시 ‘파이썬 웹 프로그래밍‘ 이란 책을 보고 있는데, 이건 django 1.7 기준으로 설명이 되어 있다. 이전 책은 django 1.4 기준이었기 때문에 django 버전을 업그레이드해야 한다. 그런데 pip로는 업그레이드가 안 되고 있다. 버전을 찾을 수 없어 설치되지 않았다는 메시지만 나올

위로 스크롤