프로그래밍 Programming
파이썬, 장고, 그리고 오라클 데이터베이스 연결하기 (2)
2015. 8. 25.1. Customizing change lists 앞서 만든 user 조회 어플리케이션을 실행해보면 아래와 같이 해당 사용자의 이름이 구분되지 않고 일괄적으로 MstUser object 라고 표시되어 알아보기 힘들다. 이 부분부터 고쳐보자. bourne_users/admin.py 파일을 아래와 같이 수정한다보여주고자 하는 컬럼명을 fieldsets 에 넣고, list_display 에는 리스트에 보여주고 하는 항목을 넣는다from django.contrib import admin from bourne_users.models import MstUser class MstUserAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['usn']}), ('Regi..
파이썬, 장고, 그리고 오라클 데이터베이스 연결하기 (1)
2015. 8. 23.Using the Django Framework with Python and Oracle Database (1) 본 게시물에서는 파이썬, 장고, 오라클을 이용하여 기존 오라클 데이터베이스의 자료를 조회할 수 있는 페이지를 만들어보고자 한다. http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/oow10/python_django/python_django.htm 파이썬을 만든 Guido van Rossum at PyCon 2013 [1단계] 1. 앞서 밝혔듯이 본 게시물의 작성 목표는 기존에 설치된 Oracle Database 에 연결하여 데이터 조회를 위한 페이지를 만드는 것이다. 2. 본격적인 작업에 앞서 연결할 데이터베이스의 username, p..
구글스프레드시트를 이용한 트위터 봇 만들기 (3) - “Select from Rows” and “Select from Columns” Setup
2015. 8. 19.Select from Rows 와 Select from Columns 는 기본적으로 똑같은 방식이고 다만 그 방향만 다르게 작용할 뿐이다. 먼저 Select from Rows 의 경우에는 각 행에서 하나씩의 셀을 선택, 조합해서 트윗을 생성해낸다. 그리고 미리 생성해둔 메시지로 랜덤하게 포스팅하는 봇을 만들려면, 바로 이 "Select from Rows"를 활용하면 되는데, 작성해둔 메시지들을 개별 컬럼에 붙여넣으면 된다. 해당 행이나 열 주위로 노트나 라벨을 삽입해도 좋다.
구글스프레드시트를 이용한 트위터 봇 만들기 (2) - "Markov" Setup
2015. 8. 17.시작하기 위에서 보는 바와 같이 4개의 데이터시트 중에 선택이 가능하다. 그 4개의 데이터시트는 각각의 특징이 있으며, 다른 내용으로 변경도 가능하다. 여기서는 먼저 Markov 시트의 적용에 대해 살펴본다. "Markov" Setup Markov 데이터시트의 경우 위와 같은 형태를 갖추고 있다. 데이터 입력 시트는 B5 와 그 이하의 셀을 스캔해서 트윗을 생성해낸다. 이 셀에 다른 텍스트를 대체해서 넣을 수도 있다. 이 형태는 다른 알고리즘보다는 트윗 생성에 좀 더 시간이 소요된다. 새로운 텍스트를 B5 셀 이하에 붙여넣는다. [Bot] - [Stop Posting Tweets] 을 통해 기존의 트윗 생성을 중단한 후 [Bot] - [Generate Preview] 를 통해서 트윗 데이터가 제대로 출력..
구글스프레드시트를 이용한 트위터 봇 만들기 (1)
2015. 8. 17.구글스프레드시트를 이용하여 주기적으로 트윗을 전송하는 봇을 만들어보자. 먼저 https://docs.google.com/spreadsheets/d/1Cbg_6pYN04XtDHpDLtxAP3ExQEBL8PYBXBQ1E5_Sq30/copy에서 스프레드시트를 복사한 후에 시작! Step 1: Create a Twitter account for your Bot먼저 봇으로 사용할 새로운 트위터 계정을 만듭니다. Step 2: Create a Twitter App for your Bot스프레드시트가 트위터와 소통할 트위터 앱을 만듭니다. http://apps.twitter.com 로 이동하여 "Create New App" 버튼을 이용해 트위터 앱을 만든다. name, description, website 항목을 필..
[django] More comprehensive tests
2015. 7. 28.More comprehensive tests 아래와 같이 2개의 메서드 추가해서 테스트 실시 polls/tests.pyimport datetime from django.utils import timezonefrom django.test import TestCase from .models import Question class QuestionMethodTests(TestCase): def test_was_published_recently_with_old_question(self): time = timezone.now() + datetime.timedelta(days=30) old_question = Question(pub_date=time) self.assertEqual(old_question.was_pu..
[django] Writing our first test
2015. 7. 25.We identify a bug Question.was_published_recently() 모듈은 설문 생성일이 도래하지 않은 미래인 경우에도 T 값을 반환하고 있다. Admin 페이지에서 설문생성일이 미래임에도 최근에 생성된 질문에 체크되어 있음을 아래와 같이 확인할 수 있다. 셀을 통해서도 위의 내용은 확인가능하다. >>> import datetime >>> from django.utils import timezone >>> from polls.models import Question >>> # create a Question instance with pub_date 30 days in the future >>> future_question = Question(pub_date=timezone.now..
[django] Use generic views: Less code is better
2015. 7. 18.제너릭 뷰 시스템을 사용할 수 있도록 poll 앱을 수정해보자. 그러면 상당량의 코드를 지울 수 있다. 1. URLconf 변환2. 오래되고 불필요한 뷰 삭제3. 장고의 제네릭 뷰에 입각한 새로운 뷰 도입 Amend URLconf /root/mysite/polls/urls.pyfrom django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^(?P[0-9]+)/$', views.DetailView.as_view(), name = 'detail' ), url(r'^(?P[0-9]+)/results/$$', views.ResultsView.as_..
[django] Write a simple form
2015. 7. 18.HTML 을 포함할 수 있도록 설문 상세 템플릿을 수정해보자. /root/mysite/polls/templates/polls/detail.html{{ question.question_text }} {% if error_message %}{{error_message}}{% endif %} {% csrf_token %}{% for choice in question.choice_set.all %} {{choice.choice_text}} {% endfor %} - 위의 템플릿에서는 각각의 답변에 대해 라디오 버튼을 적용했다. 각각의 라디오 버튼은 설문 보기 ID와 연관되어 있다. 각각의 라디오 버튼의 이름은 "choice"로, 이것은 어떤 사람이 라디오 버튼 중 하나를 선택했고, 그 폼을 전송한다, 그러면 c..
[django] Namespacing URL names
2015. 7. 18.Namespacing URL names 현재 예제에서는 하나의 앱만 다루고 있지만, 실제 프로젝트에서 앱의 수는 20개 그 이상일 수도 있다. 그러면 장고는 그러한 URL 네임들을 어떻게 차별화시키는 것일까?예를 들어, poll 앱의 경우 상세 뷰를 가지고 있고, 동일한 프로젝트에 블로그를 위한 앱을 가지고 있다고 하자. {% url %} 템플릿 태그를 사용할 때 어떤 앱의 뷰를 생성해야하는지 알 수 있을까? 그 해답은 현재의 root URLconf 에 네임스페이스를 추가하는 것이다. mysite/urls.py 에 네임스페이스를 포함하도록 변경해보자. /root/mysite/mysite/urls.py from django.conf.urls import include, urlfrom django.contr..
[django] Use the template system
2015. 7. 18.detail() 뷰로 다시 돌아가보자. polls/templates/polls/detail.html{{ question.question_text }}{% for choice in question.choice_set.all %} {{ choice.choice_text }}{% endfor %} 템플릿 시스템은 변수의 속성에 접근하기 위해 dot-lookup 구문을 사용한다. 위의 예에서 장고Django 는 우선 오브젝트 질문에 대해 dictionary lookup 을 수행한다. 그리고 그것이 실패하는 경우에 attribute lookup을 수행한다. attribute lookup 이 실패하면 list-index lookup 을 수행한다. {% for %} 루프에서 메서드 호출이 일어난다. question...
[django] Raising a 404 error
2015. 7. 18.설문에 대한 상세 내용을 보여주는 페이지를 다시 한 번 봅시다. polls/views.pyfrom django.shortcuts import renderfrom django.http import HttpResponse, Http404from django.template import RequestContext, loaderfrom .models import Question def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] context = {'latest_question_list': latest_question_list} return render(request, 'polls/index.html', con..
[django] Write views that actually do something
2015. 7. 17.각각의 뷰는 다음의 2가지 기능을 수행한다. 하나는 요청한 페이지의 컨텐츠를 담고 있는 HttpResponse 객체트를 반환하는 것이고, 다른 하나는 Http404 같은 예외를 선언하는 것이다. 뷰는 데이터베이스에서 레코드를 읽어오거나 또는 읽어오지 못한다. 장고나 또는 써드 파티 파이썬 템플릿을 사용하거나 또는 사용하지 못한다. 파이썬 라이브러리를 활용하여 PDF 파일을 생성하거나, XML 을 도출하거나, ZIP 파일을 생성하기도 한다. 장고는 HttpResponse 또는 예외를 원하는 것이다. 그러면 장고의 데이터베이스 API 를 이용하여 최근 5개의 질문을 뽑아내는 예제를 만들어보자. /root/mysite/polls/views.pyfrom django.shortcuts import renderfr..
장고 URLS 에서 달러($)와 캐럿(^)이 의미하는 것은?
2015. 7. 17.장고 URLS 에서 달러($)와 캐럿(^)이 의미하는 것은? $ 와 ^ 은 특별한 의미를 지닌 정규표현식이다. ^ 은 문자열의 시작과 ^ 다음과 같아야 한다는 뜻이며, $ 는 해당 문자열의 마지막과 일치하는 패턴을 의미한다. 예를 들어, 다음의 URL 패턴을 살펴보자. urlpatterns = patterns('', url(r'^hello/$', hello),) 만약 위의 예에서 $ 사인이 없다면 아래의 어떤 URL 과도 매칭이 되는 것이다. hello/satishhello/gandham/hello/satish/123/pqr 만약 루트 경로로 매칭하고 싶으면 url(r'^$', my_homepage_view) 와 같은 식으로 표현하면 된다.
[django] Writing more views
2015. 7. 17.아래와 같이 뷰를 추가해보자.기존의 것과 다른 점은 인수를 가진다는 점이다. mysite/polls/views.pyfrom django.shortcuts import renderfrom django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.") def detail(request, question_id): return HttpResponse("You're looking at the question %s." % question_id) def results(request, question_id): response = "You're looking at the res..
[django] admin 계정 패스워드 리셋하는 방법
2015. 7. 16.지금까지 장고django 로 기본 사이트 구성하는 것에 대해 올려드렸습니다. 이어서 게시물을 올리려고 하는데, 갑자기 계정 정보가 생각이 나지 않습니다. 이런.... 어떻게 하면 다시 로그인할 수 있을까요?아래와 같이 실행하면 현재 슈퍼유저 계정 목록과 패스워드를 리셋하실 수 있으니 참고하시기 바랍니다. (venv)root@cloud:~/mysite# python manage.py shellPython 2.7.3 (default, Aug 1 2012, 05:14:39)[GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from django.contrib..
[django] Write your first view
2015. 7. 13.뷰라는 것은 특정한 기능을 수행하고 특정한 템플릿을 지닌 장고 어플리케이션의 웹페이지의 한 유형이다.장고에서는 웹페이지와 기타 컨텐츠가 뷰에 의해 수행된다. 각각의 뷰는 간단한 파이썬 함수에 의해 표현된다. 현재 진행중인 투표 어플리케이션의 경우 아래의 4가지 뷰를 가진다.- 질문 '인덱스' 페이지 : 최근의 몇 가지 질문 표시- 질문 '상세' 페이지 : 질문의 내용 및 투표할 수 있는 폼 포함- 질문 '투표결과' 페이지 : 특정 질문에 대한 결과치 표시- 투표 행위 : 특정한 질문에 대해 특정한 대답을 하는 행위 관리 Write your first view첫 번째 뷰를 만들어 본다. polls/views.py 파일을 열어 다음 코드를 삽입한다. polls/views.pyfrom django.http i..
[django] Customize the admin look and feel
2015. 7. 13.Customizing your project’s templates프로젝트 디렉토리(manage.py 파일을 포함한 디렉토리)에 탬플릿 디렉토리를 생성해보자.setting.py 파일을 열어 템플릿 설정에서 DIRS 옵션을 수정하자. /root/mysite/mysite/settings.py DIRS는 장고 템플릿이 로딩되었을 때 체크해야할 파일시스템 디렉토리의 리스트이다. 장고 소스 파일이 위치한 디렉토리의 admin 템플릿에서 admin/base_site.html 을 복사하여 방금 생성한 admin 디렉토리에 복사한다. 장고 소스 파일 위치는 아래와 같이 찾을 수 있다. root@seoul:~# python -c" > import sys > sys.path = sys.path[1:] > import dja..
[django] Customize the admin change list
2015. 7. 13.Customize the admin change listist_display 옵션을 통해서 보여줄 필드를 아래와 같이 수정할 수 있다. 해당 컬럼의 헤더를 클릭함으로써 정렬 가능 (단, was_published_recently 는 정렬 안됨. 왜냐하면 사용자가 생성한 컬럼의 경우는 지원안됨) /root/mysite/polls/models.py list_display 에 대한 더욱 상세한 내용은 아래 링크 참조 https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display list_filter 를 이용해서 필터 기능을 넣어보자.QuestionAdmin 에 아래 줄을 삽입한다. list_f..
[django] Adding related objects
2015. 7. 13.Adding related objects 하나의 질문에 여러 개의 보기가 있을 수 있음에도, 예제 이미지에는 보기가 보이지 않는다.이 경우 아래와 같이 해결한다. "Question" 필드는 select box 형태를 지니고 있고 현재 존재하는 모든 질문이 들어간다. 즉, 답변이 질문에 대해 가지는 FK 관계가 박스로 표현되는 것이다. 하지만 위와 같이 답변 문항을 생성하는 것은 비효율적이다. 한꺼번에 해당 질문에 대한 답변을 등록할 수 있다면 더욱 효과적일 것이다. 먼저 Choice 모델을 호출하는 register() 를 삭제한 후 다음과 같이 코딩한다. 아래의 의미는 다음과 같다. Choice 오브젝트는 어드민 페이지의 Question 에서 편집 가능하며, 기본값으로 3개의 답변 필드를 가진다. 하지만..
[django] Creating an admin user, Explore the free admin functionality, Customize the admin form
2015. 7. 13.Creating an admin user어드민 사이트에 로그인할 수 있는 관리자 계정을 아래와 생성한다. (venv)root@seoul:~/mysite# python manage.py createsuperuser Username (leave blank to use 'root'): admin Email address: beingawesome@naver.com Password: Password (again): Superuser created successfully. (venv)root@seoul:~/mysite#Start the development server어드민 페이지는 기본적으로 활성화된다.http://127.0.0.1:8000/admin/ 과 같은 형식으로 접속한다. Enter the admin s..
[django] Playing with the API
2015. 7. 13.Playing with the API 단순히 "python"이라고 입력하는 대신에, 앞으로는 아래와 같이 사용할 것이다.왜냐하면 manage.py 가DJANGO_SETTINGS_MODULE 환경변수(mysite/settings.py file 의 경로를 가져온다)를 설정해주는 역할을 하기 때문이다. $ python manage.py shell아래와 같이 DJANGO_SETTINGS_MODULE 환경 변수를 직접 설정하는 방법도 있다.>>> import django >>> django.setup()manage.py 파일이 위치한 디렉토리에서 파이썬을 실행해야 한다.더욱 자세한 내용은 django-admin 문서에서 확인가능하다.이제 그러면 데이터베이스 API 를 살펴보자. # 방금 작성한 모델 클래스를 가져..
[django] Creating models / Activating models
2015. 7. 13.Creating models앞으로 여러분이 작성하게 될 어플리케이션은 특정 규약을 따르는 파이썬 패키지로 구성된다. 하나씩 살펴보자. Projects vs. apps먼저 app은 웹로그 시스템 등 웹 어플리케이션을 의미한다. project는 다수의 app 을 포함할 수 있으며, 하나의 app 은 다수의 프로젝트에서 활용할 수 있다. 아래에서 poll app 을 작성하는 법에 대해 알아보자. manage.py 파일이 위치한 디렉토리에서 아래와 같이 실행하여 app을 생성한다.$ python manage.py startapp polls아래와 같이 디렉토리 및 파일이 생성됨polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views...
[django] 프로젝트 생성, 데이터베이스 설정, 서버 실행 (Creating a project, Database setup, The development server)
2015. 7. 13.예제로 투표 시스템을 만들어 본다. 2가지 부분으로 구성이 되는데,1. 사용자가 개설된 투표 목록을 보고 투표 행위를 하는 부분과2. 투표를 추가/변경/삭제하는 관리자 페이지 부분이다. ※ 참고 : 예제는 Django 1.8 과 Python 2.7 버전 기준이다. Creating a project Django가 처음이라면 Django 프로젝트를 생성하는 몇 가지 코드를 실행해야 한다. (venv)root@seoul:~# django-admin startproject mysite 생성된 모습을 확인해보자.mysite/a container for your project. Its name doesn’t matter to Django; you can rename it to anything you like. ma..
[django] Django 설치하기
2015. 7. 11.장고(django) 프레임워크를 이용하기 위해서는 먼저 파이썬이 설치되어 있어야 한다. 그러므로 먼저 파이썬 설치 여부를 확인해본 후, 필요하다면 아래와 같이 설치하도록 한다. 1. Python 설치 1) 설치 위치 확인 root@seoul:~# which python /usr/bin/python 2) 파이썬 버전 확인 root@seoul:~# python -V Python 2.7.3 3) 파이썬이 설치되어 있지 않다면 아래에서 다운로드하여 설치한다. https://www.python.org/download/ 4) 정상적으로 설치되었는지는 아래와 같이 확인한다. root@seoul:~# python Python 2.7.3 (default, Dec 18 2014, 19:10:20) [GCC 4.6.3] o..
[django] Django 설치하기
2015. 6. 13. 장고(django) 프레임워크를 이용하기 위해서는 먼저 파이썬이 설치되어 있어야 한다. 그러므로 먼저 파이썬 설치 여부를 확인해본 후, 필요하다면 아래와 같이 설치하도록 한다. 1. Python 설치 1) 설치 위치 확인 root@seoul:~# which python /usr/bin/python 2) 파이썬 버전 확인 root@seoul:~# python -V Python 2.7.3 3) 파이썬이 설치되어 있지 않다면 아래에서 다운로드하여 설치한다. https://www.python.org/download/ 4) 정상적으로 설치되었는지는 아래와 같이 확인한다. root@seoul:~# python Python 2.7.3 (default, Dec 18 2014, 19:10:20) [GCC 4...
numpy - Arrays (9) (Vector and matrix mathematics)
2015. 4. 16.Vector and matrix mathematics 벡터의 내적(dot product) 계산>>> a = np.array([[0,1],[2,3]], float)>>> b = np.array([2,3], float)>>> c = np.array([[1,1],[4,0]], float)>>> aarray([[ 0., 1.], [ 2., 3.]])>>> np.dot(b,a)array([ 6., 11.])>>> np.dot(a,b)array([ 3., 13.])>>> np.dot(a,c)array([[ 4., 0.], [ 14., 2.]])>>> np.dot(c,a)array([[ 2., 4.], [ 0., 4.]])>>> inner product, outer product, cross product 의 계산>..
numpy - Arrays (8) (ArrayArray item selection and manipulation)
2015. 4. 11.Array item selection and manipulation Boolean array 의 array selectors 로의 활용 >>> a = np.array([[6,4],[5,9]], float) >>> print a [[ 6. 4.] [ 5. 9.]] >>> a >= 6# Boolean array 는 array selectors 로 사용가능하다 array([[ True, False], [False, True]], dtype=bool)# True인 원소만 반환 >>> a[a>=6] array([ 6., 9.]) Integer arrays의 사용 >>> a = np.array([2,4,6,8], float) >>> b = np.array([0,0,1,3,2,1], int) >>> print a [..
numpy - Arrays (7) (Comparison operators and value testing)
2015. 4. 11.Comparison operators and value testing 동일한 사이즈의 배열에서 원소 단위로 비교 가능반환값은 True/False 이며, 결과값은 배열은 저장가능 >>> a=np.array([1,3,0], float) >>> b=np.array([0,3,2], float) >>> a > b array([ True, False, False], dtype=bool)>>> a == b array([False, True, False], dtype=bool) >>> a >> c = a>b >>> c array([ True, False, False], dtype=bool) >>> broadcasting 을 통해 단일값과도 비교 가능 >>> a = np.array([1,3,0], float) >>> a..
Apache Worker MPM 과 Prefork MPM(Multi-Processing Module)
2015. 3. 14.MPM(Multi-Processing Module) apache 가 받아 들인 요청을 처리 하기 위해 'child processes'에게 분배하는 방식으로, Prefork MPM 과 Worker MPM 의 2가지 방식이 있다. 이 두가지의 차이점은 간단히 다음과 같다. Prefork MPM 은 하나의 쓰레드를 가진 다수의 child process 를 사용한다. 그리고 각각의 프로세스가 하나의 커넥션을 담당한다. 이에 반해 Worker MPM 은 다수의 쓰레드를 지닌 다수의 child processes 를 사용하며, 각각의 쓰레드가 하나의 커넥션을 핸들링한다. 대부분의 시스템에서는 prefor 방식이 좀 더 많은 메모리를 사용한다. 트래픽이 많은 웹사이트의 경우, 메모리 사용량 면에서 worker 방식..