장고
장고 사이트에 reCAPTCHA 넣기 Add reCAPTCHA to Django site
2017. 4. 10.장고 사이트에 reCAPTCHA 넣기Add reCAPTCHA to Django site 각종 봇과 스팸으로부터 사이트를 보호하기 위해 구글의 reCATCHA 를 많이 사용하는데요. 본 포스팅에서는 장고로 만들어진 사이트에 이를 손쉽게 적용해보는 방법을 살펴겠습니다. 1. Requirements1) reCAPTCHA > Get reCAPTCHA 클릭하여 다음과 같이 키를 획득한다. 사이트 등록이 끝나면 2개의 키를 받게 되는데 Site key와 Secret key가 바로 그것이다. 여기서 Site key(사이트와 사용자간)는 원하는 페이지에 렌더링하기 위해 사용되고, Secret key(사이트와 구글간 통신)는 settings.py 모듈에 등록하여 구글과 사이트 간의 통신을 위해 사용된다. 2) setti..
Django Channels로 채팅룸 만들기
2017. 2. 21.Django Channels로 채팅룸 만들기 먼저 아래 그림을 보자. 아래는 전형적인 requests와 responses의 도해이다. 브라우저는 request를 생성하고, Django는 브라우저로 돌려보낼 response를 담고 있는 view를 호출한다. 반면 Django Channels은 request/response cycle을 채널을 관통하는 메시지(message)라는 컨셉으로 대체한다. 채널은 Django로 하여금 전형적인 HTTP views 와 유사한 방식으로 웹소켓을 지원한다. HTTP request는 여전히 같은 방식으로 작동하지만 채널을 경유하게 된다. 결론적으로 Channels하에서 Django는 아래와 같은 구조를 띠게 된다. 1. Install Channels & Configure I..
django 자동완성 구현하기 django-autocomplete-light
2016. 12. 26.django 자동완성 구현하기 django-autocomplete-light django-autocomplete-light 설치 documentation http://django-autocomplete-light.readthedocs.io/en/master/ 타이틀이나 태그 등 입력시 텍스트를 자동 완성해주는 django 패키지 django-autocomplete-light 3.2.1 를 설치해보자.DAL(django-autocomplete-light)는 Python 2.7, 3.4, Django 1.8+ 이상에서 작동하며, 태그입력시 적용할려면 django-taggit 이 먼저 설치되어 있어야 한다. 다음과 같이 설치한다.12345678910# pip install django-autocomplete-..
Django 404/500 에러페이지 만들기 Django - creating a custom 500/404 error page
2016. 5. 13.Django 환경에서 http 404 및 http 500 에러 메시지 커스토마이징하는 법 1. 먼저 DEBUG 모드를 종료한다.settings.py 123DEBUG = False ALLOWED_HOSTS = ['www.pywiki.xyz']cs 2. urls.py 파일에 아래 내용 삽입urls.py 12345678from django.conf.urls import ( handler400, handler403, handler404, handler500) handler400 = 'blog.views.bad_request'handler403 = 'blog.views.permission_denied'handler404 = 'blog.views.page_not_found'handler500 = 'blog.view..
MariaDB 장고 프레임워크 연동
2016. 3. 19.1. 커넥터 설치 mysql-python 은 파이썬 3.5 를 지원하지 않는다.아래와 같이 3.5를 지원하는 커넥터를 설치한다. sudo apt-get install libmysqlclient-dev pip install mysqlclient 1234567891011121314151617raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'(envalpha)root@localhost:~# conda install mysql-pythonFetching package ..
Anaconda for Windows와 Django 설치
2016. 2. 11.1. Windows Anaconda 설치 https://www.continuum.io/downloads 2. 가상환경 설정 12345C:\Users\fukaeri>mkdir haskelC:\Users\fukaeri>cd haskelC:\Users\fukaeri\haskel>python3 -m venv envhaskelC:\Users\fukaeri\haskel>envhaskel\Scripts\activate(envhaskel) C:\Users\fukaeri\haskel>cs 3. 장고 설치 1) 설치된 장고 확인 - 아래에서 보다시피 django 라는 모듈이 없다. 123456789(envhaskel) C:\Users\fukaeri>pythonPython 3.5.1 |Anaconda 2.5.0 (32-bi..
Django Suit 설치 - 장고 어드민 인터페이스 모던 테마 적용하기
2015. 12. 9.밋밋한 장고 어드민 인터페이스를 모던한 느낌의 인터페이스로 바꿔보자.Django-suit (http://djangosuit.com) 설치하기 1. pip 또는 easy_install 을 이용하여 django_usit 설치123456789101112(envtread)root@localhost:~# pip install django-suit==0.2.15Collecting django-suit==0.2.15 Downloading django-suit-0.2.15.tar.gz (1.4MB) 100% |████████████████████████████████| 1.4MB 181kB/sBuilding wheels for collected packages: django-suit Running setup.py bd..
장고 삭제하기 (How to remove django from Ubuntu?)
2015. 9. 27.1.Install python-pip sudo apt-get install python-pip 2.Remove django using pip sudo pip uninstall Django 3.Uninstall python-pip sudo apt-get remove python-pip
장고 소스 파일 위치 찾기 (Where are the Django source files?)
2015. 9. 24.장고 소스 파일의 위치는 다음과 같이 찾을 수 있다. C:\Users\fukaeri>python Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on wi n32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path = sys.path[1:] >>> import django >>> print(django.__path__) ['C:\\Python27\\lib\\site-packages\\django-1.9-py2.7.egg\\django'] >>>
Django에서 ForeignKey 사용시 NameError 가 뜨는 경우
2015. 9. 12.Django에서 ForeignKey 사용시 NameError 가 뜨는 경우 아래 예제에서와 같이 Chpater 클래스에서 UserInfor 클래스의 sn 을 Foreign Key 관계를 맺을려고 하는 경우 아래와 같이 NameError가 뜨는 경우이다. NameError : .... is undefined. class Chapter(models.Model): sn = models.ForeignKey(UserInfo) .......... class UserInfo(models.Model): sn= models.CharField(max_length=20, primary_key=True) nm = models.CharField(max_length=50, blank=True, null=True) userid =..
외부에서 장고 웹서버 접속하기(Accessing local django webserver from outside)
2015. 9. 10.외부에서 장고 웹서버에 접속하기 위해서는 서버의 호스트나 포트를 변경해야 한다. 아래에서 이에 대해 살펴본다. 기본적으로 장고는 포트 8000 으로 실행된다. 만약 서버 포트를 변경하고 싶다면 아래와 같이 한다. python manage.py runserver 8080 이렇게 실행을 하였다고 해서 http://127.0.0.1:8000/ 으로 접속하는 것이 불가능한 것은 아니다. http://127.0.0.1:8000 과 http://127.0.0.1:8080 둘다 가능하다고 보면 된다. 그리고 IP 주소를 지정함으로서 로컬이 아닌 외부에서도 접속이 가능하다. 다음과 같이 실행한다. python manage.py runserver 0.0.0.0:8000 여기서 0.0.0.0 라는 IP 주소는 어떤 네트워..
파이썬, 장고, 그리고 오라클 데이터베이스 연결하기 (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..
[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 를 살펴보자. # 방금 작성한 모델 클래스를 가져..