본문 바로가기
Django/튜토리얼

[Django/장고] 파이썬으로 웹페이지 만들기 튜토리얼 - 4부

by 붕어사랑 티스토리 2021. 5. 22.
반응형

1. 모델(데이터베이스)에 정보 추가하기 - admin페이지

모델에 데이터를 추가하는 방법은 여러가지가 있습니다.

 

1. 웹페이지상 view에서 model에 데이터베이스 추가하도록 요청하는 기능 구현

2. 서버 개발자가 admin페이지에서 직접 데이터 추가

3. 서버 개발자가 django shell을 이용해서 직접 데이터 추가

 

장고 공식 튜토리얼에서는 2번과 3번을 소개해주고 있는데 저는 admin 페이지를 먼저 소개하겠습니다.

 

 

 

admin 페이지란?

간단히 말해 운영자가 쓰는 홈페이지라 생각하시면 됩니다.

Django의 장점은 이 admin페이지를 기본적으로 제공해준다는 점입니다. 개발하는 입장에서 아주 편하고 시간 덜 들여서 좋지요.

 

 

먼저 운영자 계정을 만들어보겠습니다. 이를 superuser라고 합니다.

프로젝트 폴더에서 아래와 같은 커맨드를 입력합시다.

python manage.py createsuperuser

위와같이 유저이름과 이메일주소 패스위드 입력이 나옵니다. 원하시는 정보 입력하여 계정을 생성해줍시다.

 

 

혹시 이전 튜토리얼에 mysite/urls.py에 admin페이지 주소가 기본적으로 추가되어 있던것 기억 나시나요?

 

mysite/urls.py

해당 주소로 들어가봅시다.

 

http://127.0.0.1:8000/admin/

 

 

짜잔! admin페이지가 나오는군요! 로그인해줍시다.

(화면이 까만건 제가 다크모드 플러그인 사용중이라 그렇습니다.)

 

 

 

이것이 장고 어드민 페이지입니다. 이 페이지를 통해 우리가 추가해준 모델에 데이터를 직접 추가해줄수 있습니다.

어? 그런데 polls에서 만든 모델이 안보이네요?

 

원인은 간단합니다. admin페이지에 우리가 polls앱에서 만든 모델을 추가해줘야 admin페이지에 나타납니다.

 

polls/admin.py

 

 

polls/admin.py가보면 텅텅 비어있군요. 아래와 같이 polls/models.py에서 추가해준 Question과 Choice를 등록해줍시다.

 

 

짜잔! Choice와 Question이 나타났습니다. 

 

반응형

 

아까 admin페이지는 운영자 페이지라고 얘기했었지요? 한번 운영자답게 데이터를 추가해봅시다.

 

Question 옆에 +Add 를 클릭합니다.

 

데이터를 추가하고 save를 눌러줍니다.

 

 

짜잔! 여러분이 직접 만든 데이터가 서버의 데이터베이스에 추가되었습니다!

 

 

 

지금하신 작업이 잘 이해가 안되시는분들, 여러분이 하신 작업은 간단히 설명하면 아래와 같습니다.

 

게임운영자가 무기아이템을 추가하고 싶어서 운영자 페이지에서 무기 모델을 클릭하고 무기이름과 날짜를 입력하여 무기를 하나 생성한것과 같습니다.

 

쉽쥬?

 

 

다음으로 Django Shell을 이용하여 데이터를 추가하는 방법을 알아보겠습니다.

 

 

 

 

 

 

 

초보자분들을 위해

여기서 잠깐,  쉘이란 무엇일까요?

 

sw를 공부하다 보면 커널과 쉘 이라는 단어가 나옵니다. 쉘은 또 다른말로 터미널이라고 불리기도 하고요.

일단 간단히 말하면 쉘은 커널(쉽게말하면 운영체제)과 소통하는 도구라는 개념입니다.

 

 

대표적인 예시로 여러분들 cmd 창이 있지요. cmd만 실행시키면 여러분들은 윈도우를 조작할 수 있습니다.

또다른 예시로 여러분이 지금 윈도우를 마우스와 화면으로 조작하는것 도 쉘입니다.

 

cmd의 경우 명령어로만 운영체제를 조작하기에 Command Line Interface(CLI) 라고 불리고

윈도우를 바탕화면에서 마우스로 조작하는건 Graphic User Interface(GUI) 라고 불립니다.

 

즉. 다음에 배울 장고 쉘 이라는것은, 장고를 cmd같은 창을 통하여 장고를 조작한다는 의미가 됩니다

 

 

 

 

 

2. 모델(데이터베이스)에 정보 추가하기 - 장고 shell을 이용

 

아래와 같은 커맨드로 장고 쉘을 실행하실 수 있습니다.

python manage.py shell
>>> from polls.models import Choice, Question  # Import the model classes we just wrote.

# 하기 커맨드로 데이터베이스에서 Question 데이터베이스를 전부 불러옵니다.
# 아직 추가한게 없으면 [] 이렇게 빈 데이터들이 뜹니다.
>>> Question.objects.all()
<QuerySet []>

# Question에 관한 새로운 데이터를 만드는 과정입니다.
# What's new? 라는 질문 데이터를 만들어봅시다.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# 데이터를 만들었으면 데이터베이스에다가 데이터를 저장해줍시다.
>>> q.save()

# 방금 저장한 데이터의 id는 1이 됩니다.
>>> q.id
1

# 파이썬 attribute를 통해 데이터의 내용을 확인 할 수 있습니다.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

# 아래처럼 데이터를 변경하고 save를 통하여 다시 데이터베이스에 업데이트 가능합니다.
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() 은 데이터베이스에서 Question에 관한 모든 데이터를 보여줍니다.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

 

여기서 Question.objects.all() 함수를 입력했는데 오브젝트에 관한 정보만 나오고 안에 데이터는 나오지가 않네요.

What's new?, What's up? 과 같은 우리가 입력한 데이터를 보고싶은데 말이에요!

 

알고리즘 풀때 처럼 클래스 안에 __str__(self) 함수를 재정의 하여 출력 데이터 형식을 바꿔봅시다!

 

from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

 

그럼 아래와 같이 What's up? 이 나오는군요!

>>> from polls.models import Choice, Question

>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

 

 

장고에서는 이러한 출력함수 __str__을 커스텀 하는것을 권장하고 있습니다.

 

개발자를 위해서 그리고 장고에서 기본적으로 생성해주는 admin페이지에서도 저 __str__ 커스텀한게 영향을 미치기 때문이라는 군요.

 

고로 커스텀 해주면 어드민 페이지에서도 데이터 정보를 확인하기 좋겠죠?

 

반응형

댓글