개발

자바, 파이썬 중심의 실무 개발 기록과 도구 활용, 회고 및 기타 기술들을 정리합니다.

파이썬

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은 아래와 같이 처리하면

기타 개발

Modal에서 bootstrap-select 사용하기

Photo by Sigmund on Unsplash bootstrap-select bootstrap-select는 <select> 엘리먼트에 스타일과 추가 기능을 제공한다. 그중에서도 실시간 검색 기능이 으뜸이라 생각된다. 이를 사용하려면 Bootstrap과 jQuery v1.8.0+가 필요하다. Bootstrap의 dropdown.js를 이용하는 jQuery 플러그인이기 때문이다. Modal에서 사용법 일반적인 HTML 페이지에서는 잘 동작한다. 그런데 Modal에서 띄우기만 하면 나오지 않거나, 기능이 제대로 동작하지 않는다. Modal에서 사용하기 위해서는 Modal을 띄우기 전에 아래

파이썬

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로는 업그레이드가 안 되고 있다. 버전을 찾을 수 없어 설치되지 않았다는 메시지만 나올

기타 개발

jQuery ajax status code가 0인 경우 해결 방법

Ajax : status code = 0 노트북에서 Python과 Django를 이용하여 웹 개발을 하고 있다. Ajax를 이용하여 데이터를 출력하는데, status code가 ‘0’이 나오면서 에러가 발생한다. Ajax에는 Same Origin Policy라는 원칙이 있다. Ajax에는 Same Origin Policy라는 원칙이 있다. 말 그대로, 현재 브라우져에 보여지고 있는 HTML을 내려준 웹서버(Origin)에게만 Ajax 요청을 보낼 수 있다. (출처 : http://blog.iolo.kr/494) html 페이지에서는

파이썬

Django 로그를 파일에 기록하기

Django를 이용하여 프로젝트를 만들고 애플리케이션을 추가한 경우, 기본 설정에서는 로그가 파일에 기록되지 않는다. 로그를 파일에 기록하기 위해서는 setting.py에 있는 ‘LOGGING’ 영역에 로그 파일 설정을 추가해야 한다. # A sample logging configuration. The only tangible logging # performed by this configuration is to send an email to # the site admins on every HTTP 500 error when DEBUG=False. # See http://docs.djangoproject.com/en/dev/topics/logging for # more details on how to customize your logging configuration. LOG_FILE = os.path.join(os.path.dirname(__file__), ‘..’, ‘site.log’) LOGGING = {     ‘version’: 1,     ‘disable_existing_loggers’: False,     ‘filters’: {         ‘require_debug_false’: {             ‘()’: ‘django.utils.log.RequireDebugFalse’         }     },     ‘handlers’: {         ‘mail_admins’: {             ‘level’: ‘ERROR’,             ‘filters’: [‘require_debug_false’],             ‘class’: ‘django.utils.log.AdminEmailHandler’         },         ‘logfile’: {             ‘class’: ‘logging.handlers.WatchedFileHandler’,             ‘filename’: LOG_FILE         },     },     ‘loggers’: {         ‘django.request’: {             ‘handlers’: [‘mail_admins’],             ‘level’: ‘ERROR’,

위로 스크롤