[Django] 데이터베이스 연결하기 - MySQL / Django Admin 페이지 활용하기

hwwwa·2023년 2월 16일
0

🚀 Django Tutorial

목록 보기
3/5

커넥터 설치

Python에서 MySQL 서버와 통신할 수 있게 해주는 파이썬용 데이터베이스 커넥터 설치

$ pip3 install mysqlclient

Django에서 데이터베이스 설정

  • mysite/settings.py를 열어보면 DATABASES에 기본 값으로 SQLite가 설정되어있음
  • DATABASESdefault에서 데이터베이스 변경
DATABASES = {
	'default': {
		'ENGINE': 'django.db.backends.mysql',
		'NAME': 'testdjango',
		'USER' : 'root',
		'HOST' : 'localhost',
		'PORT' : '3306'
	}
}
  • TIMEZONE 설정해주기
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False	# DB에 TIME_ZONE 반영을 위해 False로 설정

DB 감지

  • inspectdb 실행 시 자동으로 해당 DB에 존재하는 테이블들을 정리하여 터미널에 출력해줌
❯ python3 manage.py inspectdb

# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models


class Test1(models.Model):
    name = models.CharField(max_length=20, blank=True, null=True)
    id = models.CharField(primary_key=True, max_length=20)
    age = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'test1'
  • 복사하여 polls/models.py에 붙여넣기

모델 활성화

  • 먼저 현재 프로젝트에 polls 앱을 포함시켜야 함

앱을 프로젝트에 포함시키기

  • polls/apps.py에 존재하는 클래스를 INSTALLED_APPS 설정에 추가
  • 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',
]

모델 변경 사항을 Django에 적용

$ python3 manage.py makemigrations polls
$ python3 manage.py migrate

DB의 데이터 적용하기

  • polls/views.py에 아래 내용 추가
from .models import Test1	# Test1 모델 불러오기

def test_view(request):
	items = Test1.objects.all()	# Test1 테이블의 모든 객체를 불러와 items 변수에 저장
	return render(request, 'index.html', {"items": items})
  • polls/urls.py에 아래 내용 추가
from . import views

urlpatterns = [
	path('', views.index, name='index'),
	path('items/', views.test_view),
]
  • polls/templates/index.html 추가
<table class="table-contents" style="padding: 10px">
  <tr>
    <th>Name</th>
    <th>Age</th>
  </tr>
  {% for item in items %}
    <tr>
      <td>{{item.name}}</td>
      <td>{{item.age}}</td>
    </tr>
  {%endfor%}
</table>

Django Admin Page

Django에서 제공하는 모델에 대한 관리용 인터페이스 활용해보기

관리자 생성하기

$ python3 manage.py createsuperuser

Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
Superuser created successfully.
  • Django Admin 페이지는 기본으로 활성화되어 있음
    • 서버 시작: python3 manage.py runserver
    • Admin 페이지(http://127.0.0.1:8000/admin/)에 접속
    • 설정에서 LANGUAGE_CODE를 설정하면 원하는 언어로 화면을 볼 수 있음

Admin 페이지에 앱 등록하기

  • 앞서 생성한 polls app을 Admin 페이지에서 변경할 수 있도록 추가
  • polls/admin.py
from django.contrib import admin
from .models import Test1

admin.site.register(Test1)

Admin 기능 살펴보기

  • 등록한 Test1을 클릭해보면 change list로 이동

  • 데이터베이스에 저장된 모든 데이터를 보여주며 데이터 추가, 수정, 삭제 가능


0개의 댓글