728x90
반응형

장고 튜토리얼

이전 글에서는 장고 기본 환경 설정 및 앱 서비스 호출하는 방법에 대해 알아보았습니다. 

이번 글에서는 MySQL 과 Django 연동하는 방법에 대해 알아보겠습니다. 

 

MySQL 설치 

Mysql 설치 과정은 이전에 작성해 놓았던 글로 대체 하겠습니다. 

Mysql 설치 

서버는 docker-compose 파일로 쉽게 설치 하실수 있습니다. 

하지만 Mysql 서버는 리눅스 서버에 설치 하였고 

개발은 윈도우에서 개발해야 합니다. 

Django 에서 Mysql 서버에 접속하기 위해서는 Mysqlclient 가 필요합니다. 

  • Django -> Mysql Client -> Mysql Server

파이선 가상환경에서 mysql client 를 설치하도록 하겠습니다. 

pip install mysqlclient

pip mysqlclient install

mysql 클라이언트 설치시 에러가 난다면 아래 경로에서 별도로 mysqlclient를 다운로드하여 설치하시기 바랍니다.

pip install mysqlclient-1.4.6-cp37-cp37m-win32.whl

 

https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

Django Mysql 연결 설정(config/settings/base.py)

settings.py -> config/settings/base.py 로 수정했습니다. 

DATABASE 항목을 수정 합니다. 

DATABASES = {
     'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysql8',
        'USER': 'testuser',
        'PASSWORD':'userpasswd',
        'HOST':'192.168.17.56',
        'PORT':'23306',
    }
}

Django mysql table migrate

장고 서비스를 수행하기 위해서는 연동하고자 하는 DB(Mysql)에 장고에서 필요로 하는 테이블들이 생성되어야 합니다. 

장고는 정말 편리하게도 base.py(settings.py) 에서 정의된 앱  목록(INSTALLED_APPS)을 보고 자동으로 연동할 database 에 앱 실행에 필요로 하는 테이블들을 만들어 줍니다. 

python manage.py migrate

위 명령을 수행하면 아래와 같이 mysql db 에 테이블들이 자동으로 생성됩니다. 

 

(pollsEnv) C:\pydev\venv\polls>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, 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 admin.0003_logentry_add_action_flag_choices... 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 auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying polls.0001_initial... OK
  Applying sessions.0001_initial... OK

Django 모델 만들기 (models.py)

  • polls/models.py 에 Qustion, Choice 클래스를 생성합니다. 
from django.db import models


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)

Django 모델 활성화 (config/settings/base.py)

  • settings.py 파일을 이전에 base.py 파일로 변경하였습니다. 
  • 해당 파일에 장고 polls 앱을 추가합니다. 
  • 'polls.apps.PollsConfig',
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • python manage.py migrate 는 실제 mysql db에 테이블을 생성 하고 makemigrations polls 앱 model.py 에 등록된 클래스 정보를 바탕으로 데이터 모델을 파일을 만든다. 
  • 해당 명령을 수행하면 polls\migrations 디렉토리에 \0001_initial.py 파일이 자동으로 생성 된다. 
  • model.py 변경 사항이 발생하면 makemigrations  명령 수행 이후 python manage.py migrate 수행하면 db 에 변경된 사항이 적용된다. 
python manage.py makemigrations polls

python manage.py makemigrations polls
Migrations for 'polls':
  polls\migrations\0001_initial.py
    - Create model Question
    - Create model Choice

  • polls\migrations
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question_text', models.CharField(max_length=200)),
                ('pub_date', models.DateTimeField(verbose_name='date published')),
            ],
        ),
        migrations.CreateModel(
            name='Choice',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('choice_text', models.CharField(max_length=200)),
                ('votes', models.IntegerField(default=0)),
                ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')),
            ],
        ),
    ]

Django 웹 관리자 생성하기

이제 장고웹 접속 계정 관리 방법에 대해 알아보겠습니다. 

아래 명령을 수행 하면 장고 admin에 접속할 수 있습니다. 

INSTALLED_APPS에 정의된 django.contrib.**** 앱 서비스와 관련된 테이블들이 만들어졌기에 가능합니다. 

아래 명령을 수행하면 장고 admin(super 계정) 을 만들 수 있습니다. 

python manage.py createsuperuser
  • amin user 에 비밀번호는 admin123으로 유저를 생성했습니다. 
(pollsEnv) C:\pydev\venv\polls>python manage.py createsuperuser
사용자 이름 (leave blank to use 'tester'): admin
이메일 주소: admin@example.com
Password:
Password (again):
비밀번호가 사용자 이름와 너무 유사합니다.
비밀번호가 너무 일상적인 단어입니다.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

Django admin 화면 접속 

  • http://127.0.0.1:8000/admin 으로 접속을 해보겠습니다. 

django admin 접속

 

앞서 생성한 user와 비밀 번호를 입력하면 그럴듯한 화면이 나타납니다. 

별다른  코드 작성을 하지 않았는데 Django에서는 기본으로 admin 앱을 제공해주고 있습니다. 

django admin login

Django admin  poll app 추가 하기

장고 어드민에 접속 했지만 poll app 관련 메뉴는 보이지 않습니다.

이번에는 polls 앱을 장고 어드민 화면에 추가 하는 작업을 진행하겠습니다. 

 

  • polls/admin.py 파일에 polls 앱을 추가합니다. 
from django.contrib import admin

from .models import Question

admin.site.register(Question)
  • 다시 장고 어드민 화면에 접속 해보세요 !
  • polls 앱이 등록된 것을 확인하실 수 있습니다. 

  • polls Questions 등록해보기 

내용을 작성해서 이것저것 눌러보시기 바랍니다. 

 

이상으로 두 번째 강좌를 마치겠습니다. 

728x90
반응형

+ Recent posts