대부분의 웹 서비스에는 관리자 페이지가 있다. 관리자 페이지에서는 가입한 회원과 관련된 데이터들을 조회할 수 있다. 이를 통해 회사는 서비스가 어떻게 운영되고 있는지도 판단할 수 있기 때문에, 대부분의 웹 서비스에는 관리자 페이지가 있다. 

장고(django)에서도 관리자 페이지 기능을 제공한다. 

 

python manage.py runserver 명령어로 서버를 띄우면 기본 주소인 http://127.0.0.1:8000(포트번호) url로 로컬 서버에 접속할 수 있다. 

 

관리자 페이지를 보려면 http://127.0.0.1:8000/admin url로 접속하면 된다. 

그러면 관리자 페이지를 보기 위해서 관리자 아이디와 비밀번호를 입력하라는 창이 뜬다. 

 

관리자 계정 생성하는 방법

관리자는 보통 다른 사용자(유저)들의 정보를 열람, 수정 및 삭제할 수 있는 권한을 가진다. 따라서 장고에서도 관리자를 user이 아니라 superuser 이라고 부른다. 

 

관리자 계정으로 로그인하려면 우선 관리자 계정을 생성해야 한다. 

python manage.py createsuperuser

 

그러면 이메일, 이메일 주소, Password, Password(again) 을 입력하라는 메시지가 뜬다. 이에 맞게 입력해 주면 된다. 

나중에 관리자 계정으로 로그인할 때는 이메일과 Password를 입력해야 하니 이 두 정보는 꼭 기억하자!

 

Superuser created successfully.

이 메시지가 뜨면 성공적으로 관리자 계정이 만들어진 것이다. 

 

그럼 이제 로그인을 해 보자. 

python manage.py runserver

 

http://127.0.0.1:8000/admin url을 입력하면 로그인 화면이 나온다. 

이메일 에는 앞서 입력한 이메일 정보를, 비밀번호에는 앞서 입력한 Password 정보를 입력하면 로그인이 된다. 

 

그러면 관리자 페이지가 뜨고, 지금까지 프로젝트 내에서 정의한 모델이 있다면 각 모델에 데이터를 추가하거나 변경할 수 있다. 

 

관리자 계정 삭제하는 방법

만약에 관리자 계정의 정보를 잘못 입력하거나 새로운 관리자를 만들고 싶다면 기존 계정을 삭제하면 된다. 

관리자 계정도 결국은 하나의 사용자이기 때문에, 프로그램 내부에서 사용자를 조회하고 superuser인 유저를 삭제하는 방식으로 관리자 계정을 삭제하면 된다. 

 

우선 Shell에 접속한다. 

python manage.py shell

 

Python Shell 에서는 파이썬 문법의 코드를 사용해서 프로젝트의 DB에 저장된 데이터를 조회, 삭제 및 변경할 수 있다. 장고 ORM이 제공하는 기능 중 하나이다. 

파이썬 쉘(shell)이 아니었다면 직접 DB에 들어가서 SQL문으로 데이터를 조회해야 한다. 

 

여기서 확인해야 할 것이 있다. 

보통 관리자 계정은 django.contrib.auth.models.User 의 인스턴스로 저장된다. 

그러나 settings.py 파일의 AUTH_MODELS 필드가 위 클래스가 아닌 다른 클래스로 되어 있다면 관리자 계정이 AUTH_MODELS에 해당하는 클래스의 인스턴스로 저장된다. 

그러므로 settings.py의 AUTH_MODELS 필드가 어떤 클래스로 지정되어 있는지 먼저 확인하자. 

 

내 프로젝트의 경우는 사용자가 직접 만든 account.User 모델로 되어 있었다. 

이 경우, django.contrib.auth.models.User 모델을 import 해서 관리자 계정을 조회하면 다음과 같은 오류가 발생한다. 

즉 관리자를 조회하는 데 사용한 클래스와 AUTH_MODELS 의 클래스가 다를 때 이런 오류가 발생하는 것이다. 

 

User.objects.get(username="", is_superuser=True)

 

AUTH_MODELS 에 입력된 클래스를 import 하고 관리자 계정을 조회해 보자. 

이때 다른 기존의 유저들이 등록되어 있는 상황이라면, 헷갈리지 않기 위해서 is_superuser=True 를 옵션으로 추가한다. 

만약 관리자 계정이 나온다면, 이 계정을 제거해 주면 된다. 

User.objects.get(username="", is_superuser=True).delete()

 

그리고 위의 과정을 통해 다시 관리자 계정을 생성하면 된다. 

 

🗒️ORM이란?

object-relational-mapping 의 약자로, 객체(object)와 관계지향 데이터베이스(relational database)를 연결(mapping)하는 방법이다. 대부분의 프로그래밍 언어(python, java 등)에서는 객체 개념이 있고, 사용자 등 여러 모델을 만들 때 객체를 사용한다. 

하지만 그 모델을 저장할 때는 DB(데이터베이스)에 저장하게 된다. 

ORM은 프로그래밍 언어의 객체 개념을 관계지향 데이터베이스와 연결해 준다. 

 

예를 들어 파이썬으로 프로젝트를 개발하는데 ORM이 없다고 가정해 보자.

그러면 프로젝트에서 유저 등 객체를 생성할 때 DB에 쿼리(query)를 날려야 하고, 파이썬 프로젝트 코드 내부에 직접 유저를 생성하는 SQL 코드를 입력해 줘야 한다. 

그러나 ORM이 있다면 User.objects.create() 등의 간단한 파이썬 문법의 코드로 프로젝트 DB에 유저를 생성할 수 있다. 

 

 

지금까지 장고에서 기본으로 제공하는 관리자 페이지를 보기 위해서 관리자 계정을 생성하고, 조회하는 방법까지 알아보았다. 

그러나 장고는 관리자 페이지에 대해서 더 다양한 기능을 많이 제공하고, 관리자 페이지를 원하는 대로 직접 커스터마이징 할 수도 있다고 한다..! 

다음 번에는 장고의 관리자페이지 커스터마이징 방법에 대해서 작성해 보겠다. 

 

 

참고한 포스트

Writing your first Django app, part 2 | Django documentation | Django (djangoproject.com)

장고(django)에서 superuser를 삭제하는 방법. : 네이버 블로그 (naver.com)

 

+ Recent posts