Programming/Python29 (Django) login_required 데코레이터 Django 의 내장 authentication 모듈을 사용하지 않는 경우, 직접 제작을 해야 하는데, login_required 라는 데코레이터가 없어서, 매번 View 에서 접근 로직을 작성해주어야 해서 번거로웠다. 아래와 같이 별도의 데코레이터를 작성해두면 로직이 바뀌더라도 하나만 변경하면 되니까 코드 관리가 좀 더 편할 것이다. def login_required(function=None): def _dec(view_func): def _view(request, *args, **kwargs): # 아래 로직을 적당히 자신의 사이트에 맞게 고쳐서 쓰면 될 것이다. if "login_yn" not in request.session: return HttpResponseRedirect('/') else: .. Programming/Python 2013. 5. 28. (Python) SAN 스위치 장애 체크 (Telnet) 이번에는 Python 에서 SAN 스위치 장애를 체크하는 스크립트를 만들어보았다. Perl 의 경우와 거의 같다. Python 2.7.3 에서 테스트하였으며, pymssql 를 별도로 설치해야 한다. # -*- coding: cp949 -*- # ------------------------------------------------------------------------------ # (1) SAN 스위치의 Telnet에 연결하여, switchstatusshow 명령의 결과에 따라서 # HEALTHY 가 아니면 장애로 간주하고 담당자에게 문자메시지를 보낸다. # # (2) 하루에 1번 작동한다. # # Python Version : 2.7.3 # # [필요한 패키지] # easy_install pym.. Programming/Python 2013. 3. 13. (Django) '쉽고 빠른 웹개발 Django' 버전 1.4 이상에서 진도나가기 '쉽고 빠른 웹개발 Django'은 1.0버전 기준이어서 최신버전 (1.4.3)에서 막히면 진도를 더이상 나갈 수 없게 됩니다. 이에, 최신 버전에서도 진행할 수 있도록 변경된 부분을 반영하여 수정본을 작성해보았습니다. 1.4 이후 부터 디렉토리 구조가 조금 변경이 되었는데, 대부분 이 것 때문에 기존버전과 맞지 않는 부분이 생기는 것입니다. 추후 더 변경할 것이 발견되면 추가하도록 하겠습니다. P. 15 Beforedjango_bookmarks/ __init__.py manage.py settings.py urls.pyAfterdjango_bookmarks/ manage.py django_bookmarks/ __init__.py settings.. Programming/Python 2012. 12. 20. Python : 이미지 파일 일괄 자르기 ImageMagick 을 이용하여 이미지 파일들을 일괄로 Crop 하는 스크립트이다. ImageMagick 모듈을 이용하지 않고, convert 툴을 이용하여 구현하였다. 이번엔 급한대로 써야 해서 대충했지만, 다음에는 관련 모듈을 이용해서 제대로 해봐야겠다.관련 모듈Wand is a ctypes-based ImagedMagick binding library for Python.PythonMagickWand is an object-oriented Python interface to MagickWand based on ctypes.PythonMagick is an object-oriented Python interface to ImageMagick. import os, glob, shutil # 원하는 사.. Programming/Python 2012. 11. 28. Django 1.4 에서 Template 디렉토리 설정 Django 1.4 에서 가장 큰 변화라면, 전체 어플리케이션의 레이아웃이 바뀌었다는 점이다. 이전 버전에서는 프로젝트를 생성하면 아래와 같이 파일들이 생성되었다. project_name/ `- __init__.py `- manage.py `- settings.py `- urls.py `- wsgi.py 1.4에서는 이렇게 바뀌었다. project_name/ `- manage.py `- project_name/ `- __init__.py `- settings.py `- urls.py `- wsgi.py 여기에서 주의 깊게 볼 것은 상위에 있는 project_name 디렉토리에는 __init__.py 파일이 없기 때문에 패키지명으로 사용할 수 없다는 것과 settings.py 에서 템플릿 디렉토리를 지정할.. Programming/Python 2012. 4. 9. Django 마이그레이션 1.3.1 -> 1.4 이번에 Django 기반으로 서비스하는 시스템을 1.3.1 에서 1.4 로 마이그레이션하였다. settings.py 에서 다음 2가지를 변경해주니, 잘 동작되는 것 같다. 사실, 이 외에도 몇가지 있으나, Django 가 불평은 하지 않았다. 그래도 미래를 위해서 미리 바꾸어주는 것이 좋을 것이다. https://docs.djangoproject.com/en/dev/releases/1.4/를 참고해서 시도해보자. DATABASE # 변경전 DATABASE_ENGINE = 'postgresql_psycopg2' DATABASE_NAME = '디비이름' DATABASE_USER = '사용자' DATABASE_PASSWORD = '비밀번호' DATABASE_HOST = '호스트' DATABASE_PORT = .. Programming/Python 2012. 3. 27. FreeBSD 9.0 에서 pysqlite 설치 보통 pysqlite 를 설치하려면, pip install pysqlite 명령을 이용해서 쉽게 할 수 있다. 그러나, FreeBSD 9.0 에 pythonbrew를 이용해서 직접 python 을 설치한 경우에는 sqlite3 의 include, library 경로의 문제로 바로 되지 않는다. 이 때문에 직접 소스를 받아서, 올바른 경로를 설정하고 설치해주어야 한다. 설치 순서는 아래와 같다. $ pkg_add -r sqlite3 $ wget http://pysqlite.googlecode.com/files/pysqlite-2.6.3.tar.gz $ tar xvfz pysqlite-2.6.3.tar.gz $ cd pysqlite-2.6.3 $ vi setup.cfg include_dirs=/usr/loc.. Programming/Python 2012. 2. 15. (Django) Debian/Ubuntu + NginX + trunserver + Django 1.3.1 + Python 2.7.2 Django를 Deploy하기 위한 여러가지 방법들을 소개했었는데, 이번 방법이 내가 가장 선호하는 방식이다. Instance 별로 정상동작 유무를 확인하기가 쉽고, NginX 에서는 로드밸런싱을 하고, 하나의 Instance 에 문제가 발생하면 자동으로 제외되어 무장애/무중단 서비스를 제공할 수 있다.여기에서 더 나아가 memcached 등을 이용하여 캐싱까지 처리하면 성능에서도 상당히 만족스러운 결과를 볼 수 있을 것이다. 또한, trunserver 조작에 대해서 개선할 부분이 많이 있다. 이런 부분들은 다음에 생각해보고, NginX와 trunserver 를 이용한 방법을 살펴보자.Install Python$ apt-get install zlibc zlib1g-dev libxml2 libxml2-de.. Programming/Python 2011. 12. 20. (Django) Debian/Ubuntu + NginX + uWSGI + Django 1.3.1 + Python 2.7.2 Install Python$ apt-get install zlibc zlib1g-dev libxml2 libxml2-dev libbz2-dev curl build-essential python$ curl -kL http://github.com/utahta/pythonbrew/raw/master/pythonbrew-install | bash$ echo 'source ~/.pythonbrew/etc/bashrc' >> ~/.bashrc$ pythonbrew install --force --no-test 2.7.2$ pythonbrew switch 2.7.2Install Django, uWSGI$ pip install django psycopg2 uwsgiCreate Project$ mkdir -p /opt/.. Programming/Python 2011. 12. 17. (Django) Ubuntu 10.04 LTS + NginX + Django 1.3 (FastCGI) + Python 2.7.2 이번에는 Ubuntu 10.04 (LTS) 에서 NginX + Django 1.3 (FastCGI) + Python 2.7.2 를 구성해보았다. Python 을 설치하기 전에 zlibc 를 먼저 설치해주어야 distribute 가 제대로 설치되는 삽질이 있었긴 했지만, CentOS에서 설치했던 것처럼 대체적으로 무난하게 설정이 되었다.Install Python# aptitude install zlibc zlib1g-dev# echo 'export PYTHONBREW_ROOT=/opt/pythonbrew' >> /etc/profile; source /etc/profile# curl -kLO http://xrl.us/pythonbrewinstall; chmod +x pythonbrewinstall; ./py.. Programming/Python 2011. 7. 27. (Django) CentOS 5.6 + NginX 0.8.54 + Django 1.3 (FastCGI) + Python 2.7.2 Python 으로 가장 많이 이용되는 웹프레임워크는 Django 이다. 최근 가벼움과 성능으로 인정을 받고 있는 NginX 와 FastCGI 로 연동하여 설치하는 방법을 간단하게 정리해보았다. CentOS 6.0 이 나오긴 했지만, 아직 5.x 환경도 많이 이용되고 있으리라 생각하여 CentOS 5.6 에서 테스트하였으며, 아마 6.0 에서도 무리없이 설치될 것으로 믿는다.Install Python# echo 'export PYTHONBREW_ROOT=/opt/pythonbrew' >> /etc/profile; source /etc/profile# curl -kLO http://xrl.us/pythonbrewinstall; chmod +x pythonbrewinstall; ./pythonbrewinsta.. Programming/Python 2011. 7. 26. Python : 딕셔너리, 값으로 정렬하기 Python 에서 Dictionary라는 자료구조가 제공되는데, 이것은 Key 와 Value 로 요소가 이루어진다. 이번에 간단한 프로그램을 만들다가 Value 를 기준으로 Dictionary를 정렬할 필요가 생겼는데, 그 방법을 찾아보니 아래와 같았다. 이는 Python 2.4 이상에서 지원이 된다고 한다. [코드] #!/usr/bin/env python # filename : dict_sort.py from operator import itemgetter dict = {} dict['a'] = 2 dict['b'] = 1 dict['c'] = 5 print(sorted(dict.iteritems(), key=itemgetter(1), reverse=True)) [결과] # python dict_sor.. Programming/Python 2011. 7. 13. 이전 1 2 3 다음