[Python] 우분투에서 django mysql과 연동하기

2013. 11. 8. 17:03Programming/python

해당 글은 python과 mysql이 설치되어 있다는 가정 하에서 진행합니다.

python pip를 통해 django를 설치 합니다.

sudo pip install django


설치가 완료되었으면, 제대로 설치되었는지 확인해 봅니다.

쉘에서 django-admin.py 명령을 쳤을 때 명령어 목록이 출력되면 django가 제대로 설치 된 것입니다.


이제 django로 관리할 프로젝트 폴더를 하나 만들고, 해당 폴더로 이동한 후 아래와 같이 입력합니다.

$> mkdir testProject

$> cd testProject

$> django-admin.py startproject testProject


위와 같이 만들면 testProject 안에 testProject라는 폴더가 하나 더 생성이 되고, 해당 폴더 안에는 testProject 폴더와 manage.py 파일이 생성됩니다. testProject 폴더 안에는 __init__.py, settings.py, urls.py, wsgi.py 파일이 생성되는 것을 확인 할 수 있습니다.

우선 django 서버를 실행 시켜봅니다.

$> python manage.py runserver


아직 아무런 설정도 하지 않았기 때문에 서버 화면은 127.0.0.1:8000을 통해 확인해 볼 수 있습니다.


이제 Django 프로젝트 안에 앱을 등록해야 합니다. 아래와 같이 쉘에 입력합니다.

$> python manage.py startapp "앱이름"


앱이 성공적으로 만들어지면 앱이름을 가진 폴더가 생성되며, 폴더 안에는 models, views, tests python 파일이 생성됩니다.

models 파일에는 DB와 관련된 모델을 기입, views에는 html에 렌더링 될 정보를 기입합니다.

여기서는 views는 다루지 않고 DB 연동만 다룰 예정이어서 models 파일만 수정하도록 합니다.


from django.db import models

from django.contrib import admin

 

# Create your models here.

class DjangoTest(models.Model) :

     userID = models.CharField(max_length=20, db_column='userID')

     contents = models.CharField(max_length=255, db_column='contents')

     accessTime = models.DateTimeField(db_column='accessTime')

 

     class Meta :

         db_table = 'DjangoTest'

        

     def __unicode__(self) :

            return "%s %s" %(self.id, self.userID)

  

 class DjangoTestAdmin(admin.ModelAdmin):

     list_display = ["id", "userID", "contents", accessTime"]

     search_fields = ["userID"]


DjangoTest와 DjangoTestAdmin이라는 클래스를 생성하였습니다.

DjangoTest Class는 DB의 한 테이블로써 다루게 될 내용들을 기입하였으며, DjangoTestAdmin Class는 DjangoTest의 Admin으로써 다루게 될 내용들을 기입하였습니다.

간략하게 필드는 userID와 contents, accessTime만 생성하였습니다.

이제 admin.py를 열어서 방금 생성한 DjangoTest 클래스와 DjangoTestAdmin 클래스를 등록해야 합니다.

 from django.contrib import admin

  from polls.models import *

  # Register your models here.

  admin.site.register(DjangoTest, DjangoTestAdmin)


아까 보았던 프로젝트의 settings.py 파일을 수정해서 DB와의 sync를 맞춥니다. 

settings.py 내에 DATABASES와 LANGUAGE_CODE, TIME_ZONE을 수정합니다.

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': database 명,

'USER': 사용자명,

'PASSWORD': 암호,

'HOST' : '',

'PORT' : '',

}

}

LANGUAGE_CODE = 'ko-KR'

TIME_ZONE = 'Asia/Seoul'


모든 설정이 끝났으면, 쉘에 db와의 sync를 맞추겠다는 명령을 전달합니다.

$>python manage.py syncdb


자동적으로 해당 Table과 column들을 생성하는 것을 볼 수 있습니다.

(만약 error가 발생했을 시엔 python에  mysqldb 플러그인이 있는지 확인해 보도록 합니다.)


다시 Django 웹서버를 시작하면, 아래와 같이 db 화면이 연결되어 있는 것을 확인 할 수 있습니다.