반응형

python 25

django admin에서 ForeignKey 선택 제한

다음과 같은 models.py가 있다. from django.contrib.auth.models import User class Article(models.Model): user = models.ForeignKey(User) title = models.CharField(max_length=50) content = models.TextField() created = models.DateTimeField(auto_now_add=True) 누가 블로그 같은 것을 만들었나보다. 위 model을 토대로 django admin 도구는 user 필드를 선택 위젯으로 나타내준다. 사용자가 많아지면, 만약 만 명이라고 생각해보면, 거기서 원하는 한 명을 선택하는 것은 매우 좋지 못한 일이다. 이를 피하기 위해서 어떻게 ..

Programming/Python 2017.02.18

python json 모듈 사용시 not JSON serializable 에러를 피하는 방법

웹 기반 python 코드를 짜다 보면, 특히 다른 쪽 API와 통신을 자주 하게 된다면 json 모듈을 많이 이용하게 된다. python이 기본적으로 지원하는 데이터 타입인 list와 dictionary 구조를 유지한 채 json 형식으로 바꿔주고, 그 반대로 json 문자열을 해독해서 python 데이터 타입으로 바꿔주는 역할을 하는 것이 python의 json 모듈이다. import json data = {'key': ['value1', 'value2']} json_data = json.dumps(data) # json string from python data python_data = json.loads(json_data) # get python data back from json string a..

Programming/Python 2016.12.12

Python Postgresql adapter, psycopg2 설치 (Linux/Windows)

오픈소스 관계형 데이터베이스로 널리 쓰이고 있는 Postgresql을 python에서 작동할 수 있도록 도와주는 psycopg2의 설치법을 linux와 windows 환경에 따라 정리한다. 본래 Postgresql이 linux 환경에 잘 맞는 데이터베이스이기 때문에 linux에서의 설치는 크게 어렵지 않다. windows에서는 특히 가상 환경을 이용할 때에 설치하는 방법을 기록하기 위해 이 글을 쓴다.Linux(Ubuntu 16.04 LTS) 환경pypi (python package installer)를 이용해서 간편히 설치할 수 있다. # 기본 python 환경에서 설치 $ pip install psycopg2 # 가상 환경 virtualenv에서 설치 $ source venv/bin/activate ..

Programming/Python 2016.11.02

Python virtualenv 정리 (Linux/Windows)

python의 가상환경 virtualenv 모듈의 사용법을 간단하게 정리한다. python의 가상환경이란, 작은 python을 새로 설치해서 내가 원하는 모듈만 운용하는 바구니라고 생각하면 된다. 운영체제 안에서 새로 운영체제를 만들어내는 가상 머신(virtual machine)과 같은 맥락이라고 볼 수 있다. 같은 모듈이라도 이 버젼 저 버젼 다른 버젼이 필요할 때나, python 프로그램을 실행하기 위한 최소한의 환경을 마련하고자 할 때, 그리고 github 등의 저장소와 연계하고자 할 때 등 가상환경은 매우 다양하게 사용될 수 있다. 이젠 필수적인 요소가 된 python 가상 환경의 리눅스/윈도우에서의 사용법을 정리한다. (본인이 윈도우에서 쓰려고 할 때마다 까먹어서....) 리눅스(ubuntu) ..

Programming/Python 2016.11.01

django management 시스템 안에서 내 명령어 만들고 사용하기

django 프로젝트를 만들다보면, 테스트를 위해 필요할 때마다 django shell을 통해서 일시적인 코딩이 필요할 때가 많다. 게다가 그 코딩을 반복적으로 사용해야 할 경우가 많은데, 그 때마다 django shell에서 같은 코드를 실행시키는 것이 꽤나 불편하고 비효율적일 수 있다. 이 글에서는 django management 시스템에 내가 필요한 명령어를 만들고 사용하는 법을 정리한다.사용할 코드DB에서 뭔가를 빼와서 그 내용을 출력하는 작업을 예제로 삼겠다. DB에 아이템을 하나씩 추가할 때마다 그 아이템을 확인하고자 하는 상황이다. django shell을 통해서 다음과 같은 코드를 통해 테스트를 할 수 있을 것이다. $ python manage.py shell >>> from myapp.m..

Programming/Python 2016.10.09

Python Celery with Redis: 비동기 작업 큐(queue)

비동기 작업 큐(queue)를 python에서 활용할 수 있는 celery를 소개한다. 웹서버가 처리하기엔 무거운 연산(e.g. pdf 변환, 과학적 계산 프로세스 등)을 그냥 서버에 집어넣으면 사용자는 웹서버의 처리가 다 끝날 때 까지 빙빙 돌고있는 웹브라우저를 하염없이 바라보고만 있어야 할 것이다. 왜냐하면 웹서버의 작업은 동기적(synchronous)이기 때문이다. 반대로 비동기적 (asynchronous)인 작업이라는 것은 어딘가에 작업을 던져주고 그 작업이 끝나길 기다리지 않고 다른 일을 할 수 있다는 것이다. 그 예로 태생부터 비동기적인 javascript가 있다. 그리고 작업이 끝났는 지 지속적인 체크를 하다가 끝나면 그 결과물을 받으면 된다. celery는 메시지 브로커(message br..

Programming/Python 2016.09.25

Windows에서 Apache2.4 + mod_wsgi 설치

윈도 운영체제 하에서 Apache 웹서버와 그 플러그인인 mod_wsgi를 설치하는 과정을 정리한다. mod_wsgi는 Python 기반의 웹 어플리케이션를 Apache 웹서버 위에서 가동할 수 있도록 연결해주는 역할을 하는 Apache 모듈이다. 자세한 안내는 mod_wsgi 개발자의 github 둥지를 방문해보자. 기본적으로 Apache는 리눅스 환경에서 쓰기 좋은 웹 서버 프로그램이기 때문에 이 것을 초보자가 윈도 환경에서 설치하려면 어느 정도의 시행착오와 스트레스를 받을 수 있다. 이 글에서는 내가 확인한 확실한 윈도에서의 Apache 웹 서버와 mod_wsgi 설치법을 정리하고자 한다.. 개발자의 글에 따르면, 이 플러그인은 윈도우 32비트 버젼만을 지원한다. 따라서 윈도우에서 Apache와 P..

etc 2016.08.28

Python requests 모듈 간단 정리

Python에서 HTTP 요청을 보내는 모듈인 requests를 간단하게 정리하고자 한다. 0. 기본적인 사용 방법 import requests URL = 'http://www.tistory.com' response = requests.get(URL) response.status_code response.text 웹브라우져에서 티스토리를 접속한 것과 똑같은 이야기이다. www.tistory.com 이라는 주소로 GET 요청(request)를 보냈고 서버에서는 그 요청을 받아 뭔가를 처리한 후 요청자인 나에게 응답(response)를 줬다. 우선 그 응답은 200 상태코드와 함께 왔다. 이는 티스토리 서버에서 잘 처리되어서 정상적인 응답을 보내줬다는 OK 싸인을 의미한다. 그리고 응답의 내용은? 보시다시피..

Programming/Python 2016.08.10

C/C++ dll로 만든 함수를 Python에서 사용 (feat. ctypes)

Python의 기본 모듈 중 하나인 ctypes를 이용해서 C언어로 컴파일된 dll안에 넣은 함수를 실행하는 방법을 기록한다. 우리가 사용하고자 하는 C 함수의 인풋과 아웃풋 형식만 잘 맞춰주어야 한다는 것만 기억하면 어렵지 않은 일이다. 계산 속도를 올리기 위해서 C언어를 이용할 때, 더 나아가 CUDA 등의 병렬계산을 이용하고자 할 때 유용하게 이용할 수 있다. 여기서 C코딩이나 CUDA를 다루지는 않는다. 나는 Microsoft Visual Studio 2013 community edition과 Python 2.7.11을 사용하였다. 1. C/C++ 코드 함수를 선언할 때 _stdcall 을 붙여주어서 표준통신규약을 지키게 해야 한다고 한다 (뭔지 잘 모름). ## 파일명: dllfunction.c..

Programming/Python 2016.06.11

Heroku에 django 프로젝트 배포

클라우드 서비스는 개발자 뿐만 아니라 일반인에게도 친숙한 개념이 될 정도로 널리 퍼져있다. 대중적으로는 드랍박스 등의 저장소 서비스로 클라우드를 인식하고 있을 가능성이 높은데, 이 드랍박스를 뒤에서 받쳐주는 클라우드 서버를 아마존이 제공하고 있다는 사실은 알고 있는가. 아마존의 AWS를 필두로 마이크로소프트의 Azure 등의 유명한 대기업 외에도 cloudera, cloudway, 우리나라의 kt ucloud 등 클라우드 서비스를 제공하고 있는 업체는 넘나 많다. 그런데 이러한 서비스들을 살펴보면 결국엔 돈을 내야한다는 결론에 다다른다. 기업 레벨에서 사용을 해야한다면 과금은 당연한 이치이겠지만 개인이 시범/실험적으로 사용을 하고 싶을 때는 당장 돈을 내야하지 않더라도 과금의 존재 자체가 클라우드 서비스..

etc 2016.05.22