이 내용은 장고(Django) 튜토리얼 https://docs.djangoproject.com/en/1.11/intro/ 을 정리한 내용 입니다. 이전 "파이썬 웹프로그래밍 - 장고(Django)설치" 에서 Django 를 설치하고, 명령행으로 사이트를 작성하고 실행하는 방법을 보았습니다. 이제부터 튜토리얼 내용을 하나씩 따라해 볼텐데, 여기서는 Eclipse와 PyDev 를 사용해서 애플리케이션을 작성하고 실행해 보겠습니다.
1. 프로젝트를 생성하고 실행해 봅니다.
프로젝트 생성까지의 이미지는 "장고(Django)설치"를 참조해 주십시오.
1.1. 이클립스 메뉴에서 File -> New -> Project... 를 선택합니다. PyDev -> PyDev Django Project를 선택하고 "Next" 버튼을 누릅니다.
1.2. Create a new Pydev Django Project.
프로젝트 생성창에서 각 항목에 다음과 같이 있력하고, "Next" 버튼을 누릅니다.
- Project name : mysite
- Project contents : Use default 체크
- Choose the project type : Python 체크
- Grammar Version : 3.6
- Interpreter : 3.6
- Add project directory to the PYTHONPATH 체크
1.3. Reference page에서 다른 참조 프로젝트를 선택할 수 있는데 아무것도 선택하지 않고, "Next"를 누릅니다.
1.4. Basic Django Settings
Django version: 1.4 or later 를 선택합니다. 데이터베이스 설정은 현재 그대로 둡니다. "Finish" 버튼을 누릅니다.
이 프로젝트의 생성은 명령 프롬프트에서 다음 명령을 사용해서 수행할 수 있습니다.
C:\workspace\python>django-admin startproject mysite
1.5. 설문조사 애플리케이션 추가하기
프로젝트명에 마우스 오른쪽키를 눌러서 Django -> Create application (manage.py startapp)을 선택합니다. 팝업창에서 polls 를 입력합니다.
이 과정은 명령 프롬프트에서 다음 명령을 수행해서 생성 합니다.
C:\workspace\python\mysite>python manage.py startapp polls
1.6. 설문조사 애플리케이션의 초기화면을 만듭니다.
첫 번째로 view 파일을 작성합니다. /mysite/polls/views.py 파일 입니다.
from django.http import HttpResponse
def index(request):
return HttpResponse("설문조사의 인덱스 위치 입니다.")
두 번째로 polls 애플리케이션의 /mysite/polls/urls.py 파일을 생성합니다.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
- Django 2.0에서는 path 함수를 사용하는 것으로 변경되었습니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
세 번째로 root 의 /mysite/urls.py 파일을 수정합니다. 수정 내용은 polls/ 로 요청이 들어오면 polls.urls 를 실행하도록 하는 것입니다.
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
- Django 2.0에서는 path 함수를 사용하는 것으로 변경되었습니다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
1.7. 애플리케이션을 실행해 봅니다.
프로젝트명에 마우스 오른쪽 키를 누르고, Run As -> PyDev: Django 를 선택하여 서버를 실행합니다. 브라우저에서 http://127.0.0.1:8000/polls 로 요청합니다.
여기까지가 앞에서 장고(Django)를 설치하고 간단한 화면을 출력해본 것 까지를 이클립스 PyDev로 실행해 본 것입니다. 이제는 계속 나아가기 위해서 Django 를 MySQL과 연동을 해보겠습니다.
2. 장고(Django) 데이터베이스(MySQL, MariaDB)와 연동하기
기본적으로 Python에는 sqlite 가 포함되어 있습니다. 따로 설치하지 않아도 바로 사용할 수 있습니다. 하지만 여기서는 MySQL을 사용해보겠습니다. 실제는 MariaDB 가 되겠습니다. 데이터베이스의 설치는 "Windows용 XAMPP 설치하기 - (Apache, PHP, MariaDB)" 에서 설치한 MariaDB를 사용하겠습니다.
2.1. 테스트용 데이터베이스 생성하기
명령행 툴로 설문조사 애플리케이션에서 사용할 데이터베이스를 생성합니다.
MariaDB [(none)]> CREATE DATABASE pollsdb;
MariaDB [(none)]> GRANT ALL ON pollsdb.* TO 'pollsdbadm'@'localhost' IDENTIFIED BY 'pollsdbadm';
MariaDB [(none)]> FLUSH PRIVILEGES;
2.2. MySQL 드라이버를 설치합니다.
드라이브 관련 정보는 다음 URL에서 찾아볼 수 있습니다. Python 버전에 따라 다른 드라이버를 선택할 수 있습니다.
https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-db-api-drivers
Pyhton 3 이상의 버전에서는 mysqlclient 드라이버를 사용할 수 있습니다. 다음 URL에서 다운 받을 수 있습니다.
https://pypi.python.org/pypi/mysqlclient
드라이버를 설치합니다.
pip install mysqlclient-1.3.10-cp36-cp36m-win32.whl
2.3. 데이터베이스 연동하기
※ Django 2.0 으로 업그레이드 되고 설정방법이 변경되었습니다. 2.0에서의 설정방법을 먼저 알아봅니다. mysite/settings.py 파일만 아래와 같이 수정하면 됩니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'pollsdb',
'USER': 'pollsdbadm',
'PASSWORD': 'pollsdbadm',
'HOST': '127.0.0.1',
'PORT': '3306',
},
}
※ 아래는 Django 1.11에서의 연동방법입니다.
이제 데이터베이스가 만들어지고, 드라이버도 설치되었으니 둘을 연동해 보겠습니다. mysite/settings.py 파일에서 데이터베이스 부분을 수정합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': os.path.join(BASE_DIR, 'my.cnf'),
},
}
}
데이터베이스 연결정보를 가지고 있는 mysite/my.cnf 파일을 만듭니다.
[client]
database = pollsdb
user = pollsdbadm
password = pollsdbadm
default-character-set = utf8
이것으로 데이터베이스 연동에 필요한 작업이 모두 완료되었습니다.
2.4 기본 애플리케이션들이 변경된 데이터베이스를 사용하도록 수정합니다.
장고(Django) 사이트를 생성하면 기본적으로 설치되는 애플리케이션들이 있습니다. mysite/settings.py 파일내에 정의되어 있으며 다음과 같습니다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
- django.contrib.admin : 관리 사이트 입니다.
- django.contrib.auth : 인증 시스템 입니다.
- django.contrib.contenttypes : 컨텐츠 타입 프레임웍 입니다.
- django.contrib.sessions : 세션 프레임웍 입니다.
- django.contrib.messages : 메세징 프레임웍 입니다.
- django.contrib.staticfiles : 정적 파일을 관리하는 프레임웍 입니다.
이러한 기본 애플리케이션은 데이터베이스를 사용하고 있는 것이 있으므로 기존의 sqlite 에서 바뀐 MySQL을 사용하도록 migration 합니다.
프로젝트명에 마우스 오른쪽키를 누르고, Django -> Migrage (Django >= 1.7)(manage.py migrate) 를 실행합니다. 실행결과가 아래와 같이 Console 창에 보여집니다.
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
Finished "C:\workspace\workspace_neon\mysite\manage.py migrate" execution.
2.5. 설문조사 애플리케이션을 위한 모델을 생성 합니다.
모델은 설문조사 애플리케이션에서 사용되는 테이블 객체들을 나타내는 클래스입니다. 모델이 생성되면 이 모델로부터 데이터 테이블을 자동으로 생성하게 됩니다.
mysite/polls/models.py 파일을 수정합니다.
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
이 파일에는 Question 클래스와 Choice 클래스가 정의되어 있습니다. 둘은 1:다 관계로 질문과 질문에 속한 답변 항목을 나타내는 클래스 입니다.
모델에 관해서는 다음 URL을 참조하세요.
- 모델 인스턴스 레퍼런스 : https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model
- 모델(필드 타입 등) : https://docs.djangoproject.com/en/1.11/topics/db/models/
- 데이터베이스 쿼리 : https://docs.djangoproject.com/en/1.11/topics/db/queries/https://docs.djangoproject.com/en/1.11/topics/db/queries/
2.6. 애플리케이션 활성화
장고(Django)에게 설문조사 애플리케이션을 알려서 Question, Choice 데이터베이스 생성 및 데이터베이스 액세스 객체를 생성할 수 있게 합니다. 설정파일에 애플리케이션을 추가 합니다. mysite/settings.py
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
이제 다음 명령으로 polls 애플리케이션이 데이터베이스를 생성하기 위한 초기 파일을 생성합니다. 다음 명령은 장고(Django)에게 모델에 변경된 것이 있다는 것을 알립니다. mysite/polls/migrations/0001_initial.py 파일이 생성됩니다.
프로젝트명에 마우스 오른쪽 키를 누르고, Django -> Make Migrations (Django >= 1.7) (manage.py makemigrations) 를 실행합니다.
Migrations for 'polls':
polls\migrations\0001_initial.py
- Create model Choice
- Create model Question
- Add field question to choice
Finished "C:\workspace\workspace_neon\mysite\manage.py makemigrations polls" execution.
2.7. 이제 실행되어질 SQL 문장을 확인해 봅니다.
프로젝트명에 마우스 오른쪽 키를 누르고, Django -> Custom command (manage.py ${custom_command}) 를 선택합니다. 명령어 입력창이 뜨면 sqlmigrate polls 0001 를 입력하고, "OK"를 눌러 실행합니다. sqlmigrate 명령으로 model이 마이그레이션 될때 실행될 SQL 문장을 확인할 수 있습니다.
데이터베이스에 따라 다르겠지만, 다음과 같은 출력이 보여질 것입니다.
BEGIN;
--
-- Create model Choice
--
CREATE TABLE `polls_choice` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `polls_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE `polls_choice` ADD COLUMN `question_id` integer NOT NULL;
ALTER TABLE `polls_choice` ADD CONSTRAINT `polls_choice_question_id_c5b4b260_fk_polls_question_id` FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`);
COMMIT;
Finished "C:\workspace\workspace_neon\mysite\manage.py sqlmigrate polls 0001" execution.
2.8. 다시 migrate 명령을 수행해서 데이터베이스를 생성합니다.
프로젝트명에 마우스 오른쪽키를 누르고, Django -> Migrage (Django >= 1.7)(manage.py migrate) 를 실행합니다.
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Applying polls.0001_initial... OK
Finished "C:\workspace\workspace_neon\mysite\manage.py migrate" execution.
mysql 툴로 생성된 데이블을 확인합니다.
여기까지 해서 MariaDB 연동 후 테이블 생성까지 알아보았습니다.
'프로그래밍 > Python' 카테고리의 다른 글
파이썬 문법 9 - 클래스(class) 만들기 (0) | 2018.04.09 |
---|---|
파이썬 문법 8 - 모듈(module)과 패키지(package) 사용하기 (6) | 2018.04.09 |
파이썬 문법 7 - 자료 구조 (0) | 2018.04.09 |
파이썬 문법 6 - 이터레이터(Iterator) 와 제너레이터(Generator) (0) | 2018.04.08 |
파이썬 GUI - wxPython Phoenix 설치하기 (1) | 2018.04.08 |