🏐

004. 관리자 페이지

1. 관리자 페이지란?

관리자 페이지는 해당 프로젝트를 개발자들이 쉽게 관리할 수 있도록 GUI를 활용한 페이지입니다. 원래는 개발자가 직접 만들어야 하지만 장고는 프로젝트를 생성하면 기본적으로 관리자 페이지 앱을 만들어주는데 그것이 바로 admin 앱입니다.
관리자 페이지에서 우리가 만든 모델들의 요소를 쉽게 추가할 수 있습니다.
 

2. 관리자 계정 만들기

관리자 페이지로 들어가려면 프로젝트URL/admin/ 으로 접속하면 됩니다. 그러면 관리자 로그인 화면이 뜰 것입니다.
notion imagenotion image
 
하지만 우리는 아직 관라자 계정을 만들지 않았습니다. 관리자 계정을 만들려면 createsuperuser 명령어를 사용하면 됩니다.
$ python manage.py createsuperuser
notion imagenotion image
그러면 그림처럼 관리자 계정의 정보를 입력하는 프롬프트가 나타납니다. 필요한 정보를 입력하고 Superuser crewated successfully 메시지가 뜨면 관리자 계정을 만드는 것에 성공한 것입니다.
(비밀번호는 username이나 이메일과 같이 화면에 나타나지 않으니, 감으로 쳐주셔야 합니다.)
 

3. 관리자 페이지에서 모델 요소 추가하기

3.1. 모델 등록하기

이제 만들어진 관리자 계정으로 관리자 페이지에 로그인하면 해당 화면을 볼 수 있습니다.
notion imagenotion image
원래는 여기서 해당 프로젝트의 모델들을 볼 수 있는데, 우리가 만든 모델들이 보이지 않습니다.
그 이유는 admin 앱에 해당 모델들을 등록을 하지 않았기 때문입니다. 구름 IDE로 돌아가서 main/admin.py 파일을 다음과 같이 수정합니다.
from django.contrib import admin from .models import Developer, Question, Choice admin.site.register(Developer) admin.site.register(Question) admin.site.register(Choice)
 
그러면 이제 관리자 페이지에서 우리가 만든 모델들을 볼 수 있습니다.
notion imagenotion image

3.2. 모델 요소 추가하기

3.2.1 Developer(개발자 유형) 추가하기

이제 DevelopersAdd 버튼을 눌러서 프론트 엔드 라는 개발 유형을 추가해봅니다.
notion imagenotion image
name 필드 값으로 프론트 엔드를 추가하고 SAVE 버튼을 누릅니다.
notion imagenotion image
그러면 Developer object (1)이 추가된 것을 볼 수 있습니다. 여기서 숫자 (1)은 요소의 id 값을 의미합니다.
같은 방식으로 백엔드 개발, 게임 개발, 데이터 분석과 인공지능, 정보보안을 추가해봅니다.
 

3.2.2. Question(문항) 추가하기

이번에는 QuestionsAdd 버튼을 눌러서 당신이 가장 재밌었던 수업은? 이라는 문항을 1번 문항으로 만들어봅시다.
notion imagenotion image
notion imagenotion image
Question object (1)이 만들어졌습니다.
 

3.2.3. Choice(선택지) 추가하기

이번에는 ChoicesAdd 버튼을 눌러서 프론트엔드(HTML, CSS, Javascript, etc) 라는 선택지를 1번문항에 추가해봅니다. 해당 선택지는 프론트 엔드 개발 유형에 해당하므로 연관 개발자 유형을 프론트 엔드로 등록합니다.
notion imagenotion image
notion imagenotion image
 

3.3. 모델 요소 표현방식 정의하기

각 모델 요소들을 한 번씩 만들어 보았습니다. 하지만 불편한 점이 있습니다. 각 모델 요소들은 [모델명] object (id값)으로 표현된다는 것입니다. 이것만 봐서는 몇 번 문항인지, 어떤 개발자 유형인지, 어떤 선택지인지 알 수가 없습니다.
몇 번째 문항인지, 어떤 개발자 유형인지 등 이러한 항목들을 데이터 구별을 위해 제목으로 표시하고 싶다면 모델 요소들의 표현 방식을 모델 클래스에서 __str__() 메소드를 정의함으로써 바꿀 수 있습니다.
main/models.py에서 각 모델의 __str__() 메소드를 정의합니다.
from django.db import models class Developer(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Question(models.Model): number = models.IntegerField(unique=True) content = models.CharField(max_length=100) def __str__(self): return f'{self.number}. {self.content}' class Choice(models.Model): content = models.CharField(max_length=100) question = models.ForeignKey(to='main.Question', on_delete=models.CASCADE) developer = models.ForeignKey(to='main.developer', on_delete=models.CASCADE, null=True) def __str__(self): return self.content
 
그러면 다음 그림 처럼 모델 요소들이 사람이 알아 볼 수 있게 표현됩니다.
notion imagenotion image
notion imagenotion image
 
notion imagenotion image