【Python】 Django에서 재생 (관리 화면)

이 기사에 대하여



이전 기사에서 장고를 설정했습니다.
【Python】 Django에서 플레이 (설치 · HTML 파일 표시)

이번에는 기본적으로 설정되는 관리 사이트(admin 사이트)를 조금 살펴보겠습니다.

환경



OS: Windows10 Home
파이썬: 3.9.2
장고: 3.1.7

관리 사이트(admin 사이트)란?



이번은 로컬 환경 http://127.0.0.1 로 구축했습니다만, 아무것도 만지지 않아도 http://127.0.0.1/admin 에 액세스 하면 이하의 페이지가 표시됩니다.


다만, 유저명・패스워드는 모릅니다. .
만들고 로그인해 봅시다.

계정 생성



다음 명령으로 계정을 만들 수 있습니다.
python manage.py createsuperuser

그러자 뭔가 오류를 뱉었습니다 ...
$ python manage.py createsuperuser

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
Traceback (most recent call last):
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\python39\lib\site-packages\django\db\backends\sqlite3\base.py", line 413, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: auth_user

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Works\Dev\Django\demosite\manage.py", line 22, in <module>
    main()
  File "C:\Works\Dev\Django\demosite\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\python39\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "C:\python39\lib\site-packages\django\core\management\__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\python39\lib\site-packages\django\core\management\base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\python39\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 79, in execute
    return super().execute(*args, **options)
  File "C:\python39\lib\site-packages\django\core\management\base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "C:\python39\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 100, in handle
    default_username = get_default_username()
  File "C:\python39\lib\site-packages\django\contrib\auth\management\__init__.py", line 140, in get_default_username
    auth_app.User._default_manager.get(username=default_username)
  File "C:\python39\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\python39\lib\site-packages\django\db\models\query.py", line 425, in get
    num = len(clone)
  File "C:\python39\lib\site-packages\django\db\models\query.py", line 269, in __len__
    self._fetch_all()
  File "C:\python39\lib\site-packages\django\db\models\query.py", line 1308, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\python39\lib\site-packages\django\db\models\query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "C:\python39\lib\site-packages\django\db\models\sql\compiler.py", line 1156, in execute_sql
    cursor.execute(sql, params)
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 98, in execute
    return super().execute(sql, params)
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\python39\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\python39\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\python39\lib\site-packages\django\db\backends\sqlite3\base.py", line 413, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: auth_user

계정을 만들기 전에 migrate 를 해 주시기 때문에 다음 명령으로 migrate 합니다.
python manage.py migrate
$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

성공했습니다.

기본적으로 db.sqlite3에 테이블이 작성됩니다.
이 설정은 setting.py 아래에 설명되어 있습니다.

setting.py
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

덧붙여서 db.sqlite3 는 이러한 느낌으로 테이블이 작성되고 있습니다.


테이블이 생성되었으므로 다시 사용자를 만듭니다.
python manage.py createsuperuser

사용자 이름, 이메일 주소, 비밀번호를 입력합니다.
메일 주소는 미등록이라도 괜찮은 것 같습니다.
이제 계정을 만들 수 있었습니다.

로그인



계정을 만들었으므로 로그인합니다.


기본적으로 그룹과 사용자를 설정하는 기능을 사용할 수 있는 것 같습니다.
그룹을 설정할 때의 권한도 많이 있군요.


마지막으로



이번은 여기까지입니다.
DB를 변경하고 관리할 항목을 늘리는 것은 다음과 같은 경우에도 가능합니다.

좋은 웹페이지 즐겨찾기