본문 바로가기

Legacy(~18.10)/Django

[Tutorial] Django 공식튜토리얼 - 모델생성과 관리자 페이지

반응형

Djang 공식 홈페이지에 나와 있는 튜토리얼 이다.

이 튜토리얼을 처음 설치 부터 배포 까지 내 공부 겸 요약 겸 나중에 참고 할 겸 작성해보려고 한다.

튜토리얼을 그냥 똑같이 따라하면 재미 없으니까, 내 입맛에 따라서, 생략하는 부분도 있을 것이고,

더 추가되는 내용도 있을 것이다.

자세한 설명이 필요한 부분은 따로 해당 주제에 대해서 블로그 글을 쓰는 것으로 하고,

튜토리얼에서는 최대한 기본적인 것들과 실행에 중점을 두고 한다.

Index


모델 생성

장고에서 모델의 역할은 매우 중요하다. 모델을 어떻게 설계를 하느냐에 따라서, 관련된, 뷰와 컨트롤러를 설계하는데에도 많은 영향을 미치기 때문이다.

이 장고 튜토리얼에서 다루는, 모델형태는 매우 쉽다. 간단히 살펴보면,

#src/polls/models.py

from django.db import models


class Question(models.Model):
   question_txt = models.CharField(max_length=200)
   pub_date = models.DateTimeField(auto_now_add=True)


class Choice(models.Model):
   question = models.ForeighKey(Question, on_delete=models.CASCADE)
   choice_text = models.CharField(max_length=200)
   votes = models.IntegerField(default=0)
  • 장고는 데이터 베이스의 테이블을 표현 할 때 위와 같이 클래스로 표현한다. 즉, Question이라는 테이블과 Choice라는 테이블을 생성하고, 각각의 멤버 변수들은 테이블의 컬럼값이 된다.

  • 위의 구조는 Question이라는 테이블이 있고, 이 Question을 외래키로 가지는 Choice라는 클래스가 있다. QuestionChoice의 관계는 1:N의 관계 인데, 쉽게 말해서, 1개의 Question은 여러개의 Choice를 가질 수 있다라는 말이다.

  • 이 말은 매우 당연한 말인 것이, 설문조사 앱이기 때문에 질문이 있을 것이고 선택지가 있을 것인데, 한 질문에 종속된 선택지는 당연히 여러개가 있을 것이고, 이것을 표현하는 방식은 데이터베이스에서는 외래키를 이용하여서, 1:N 의 관계를 표현한다.

  • Question 테이블의 컬럼 값으로는 질문에 대한 내용과, 이것이 만들어진 시간이 필요 할 것이고, Choice 테이블은 Question의 id 값을 외래키로 가지는 컬럼과 선택지에 대한 내용과 해당 선택지의 투표 Count에 관한 것이다. 현재 위의 코드는 말한바와 똑같이 구현이 되어있다.

  • auto_now_add=True 를 설정하면, Question 인스턴스 생성 시, 현재 시간으로 자동 생성 된다.


Migration 과 Migrate

위와 같이 모델에 대한 코드를 작성했다면, 이것을 데이터베이스에 직접 반영을 해야한다.

장고는 직접 쿼리를 통해서 데이터베이스 내 CRUD를 처리하는 것이 아니라, ORM을 이용한다.

위와 같이 클래스 형태로 테이블을 나타낸 것도 ORM이 적용된 것이고, 우리는 이 ORM을 이용해서, 테이블 생성, 수정, 삭제, 검색, 등등을 다 수행한다.

그 이전에 가장 먼저 해야 할 것은 migration 이다.

#shell
python manage.py makemigrations


makemigrations 명령어는 Django가 모델의 변경사항을 저장하는 방법 이다.(수정 혹은 새로 생성되는 모델의 변경사항과 관련한 파일로 존재) 이를 기준으로 migrate명령어를 내려주면,migration 파일에 설정되어 있는 것에 따라서, 데이터베이스에 그대로 반영이 된다.

#shell
python manage.py migrate

다음 명령어를 치면 모델을 오류 없이 제대로 짰다면, 정상적으로 데이터 베이스에 반영이 된다.

이렇게 migrate가 끝나면, 우리는 이제 데이터베이스에서 자료를 입력 수정 삭제 등등이 가능 하고, 이 데이터 베이스 데이터를 활용할 수 있다.


Django Shell 다루기

위와 같이 정상적으로 데이터베이스에 migrate까지 성공적으로 끝냈다면, 이제 데이터베이스를 이용하여서, 내가 만들어 놓은 모델 객체을 테스트 해볼 수 있다.

아직 값은 들어가 있지 않기 때문에 값을 넣는 것부터 수정, 삭제, 기타 등등을 해보자.

python manage.py shell #파이썬 쉘을 사용 할 수 있다.

#python shell
>> from polls.models import Question #Question 모델을 임포트 한다.
#1. Question instance 생성
1. Question.objects.create(question_txt='test1')
  Question.objects.create(question_txt='test2')
   
#2. Question 의 모든 객체 출력    
2. Question.objects.all()

#3. Question 객체 중 첫번째 객체의 question_text 값 수정
3.
first = Question.objects.all()[0]
first.question_txt="test3"
first.save()

#4. Question 객체 중 두번째 객체 삭제
4.
second = Question.objects.all()[1]
second.delete()

이외에도 Django Shell을 이용해서 다양한 내장 메소드들을 사용할 수 있고, 개발자가 직접 오버라이딩 해서 커스텀 하거나, 본인이 직접 만들어서 사용할 수도 있다.


관리자 생성 및 관리자 페이지 보기

장고에서 좋은 점 중에 하나가 자체적으로 관리자 페이지를 지원하다는 것이다.

이 관리자 페이지는 잘 활용하면, 꽤나 괜찮게 활용 할 수 있다. 그러나 그냥 내 생각으로는 단순히 개발자가 사용하는 용도에서 쓰기는 괜찮지만, 개발자 이외의 사람들이 관리자 페이지를 통해 관리하는 것은 그다지 좋은 것 같진 않다.

관리자 페이지를 사용하려면 관리자 계정을 만들어야 한다.

아래 명령어를 치면 다음과 같이 계정이 생성된다.

#shell
python manage.py createsuperuser

위와 같이 계정을 생성한 후에, 127.0.0.1:8000/admin/ 으로 접속해서, 생성한 계정을 입력하면,

관리자 페이지에 접속할 수 있다.

관리자페이지에서 할 수 있는 것은 개발자가 만든 모델들을 시각적으로 보는 것인데, 관리자 페이지에서 보려면, 모델들을 등록을 시켜줘야 한다.

#src/polls/admin.py
from django.contrib import admin
from .models import Question

admin.site.register(Question)

위와 같이 코드를 추가 한후, runserver를 통해서 관리자 페이지에 접속하면 Question모델을 시각적으로 보면서, 다룰 수 가 있다.

끝.



반응형