ユーニックス総合研究所

  • home
  • archives
  • django-createsuperuser

Djangoのcreatesuperuserで管理者ユーザーを作成/追加する

  • 作成日: 2021-08-03
  • 更新日: 2023-12-24
  • カテゴリ: Django

createsuperuserで管理者ユーザーを追加する

Djangoの管理サイトでは、ログインのために管理者ユーザーが必要になります。
管理者ユーザーとはDjangoの管理サイトにおいて最上位の権限を持つユーザーです。
この管理者ユーザーを追加するにはDjangoのコマンドcreatesuperuserを使います。

この記事ではDjangoのコマンドcreatesuperuserの使い方とその周辺の事柄について解説します。
具体的には↓を見ていきます。

  • データベースのマイグレート
  • createsueruserの使い方
  • createsuperuserで管理者ユーザーを作成する
  • シェルで追加した管理者ユーザーを確認する
  • 作成した管理者ユーザーで管理サイトにログインする
  • changepasswordで管理者ユーザーのパスワードを変更する
  • createsuperuserでオプションを利用する

データベースのマイグレート

createsuperuserコマンドを使うには、データベースがマイグレートされている必要があります。
プロジェクト開始直後のデータベースはまっさらな状態なので、管理者ユーザー用のテーブルなども作成されていません。
そのため、データベースが空の状態でcreatesuperuserコマンドを実行するとエラーになります。

↓のようにmigrateコマンドを使ってデータベースにテーブルを作成しておきます。

$ python manage.py migrate  

すでにプロジェクト開始直後にマイグレートを実行している場合は、この操作は必要ありません。

createsueruserの使い方

createsuperuserコマンドは-hあるいは--helpオプションを持っています。
そのため↓のように実行するとcreatesuperuserの使い方を表示することが出来ます。

$ python manage.py createsuperuser -h  

createsuperuserで管理者ユーザーを作成する

createsuperuserコマンドを実行すると、↓のように対話的なプロンプトが表示され、ユーザー名、Eメールアドレス、パスワードの入力をうながされます。

$ python manage.py createsuperuser  
Username (leave blank to use 'xxx'): admin  
Email address: xxx@xxx  
Password:  
Password (again):  
Superuser created successfully.  

ユーザー名、Eメールアドレス、パスワードを順に入力していくと「Superuser created successfully」と表示されます。
このコマンドで作成するユーザーは管理サイトにおける全権限を持っています。なんでもできます。
そのため、ショルダーハックなどされないように気をつけてください。
周りに自分しかいないことを確認してからコマンドを実行しましょう。

シェルで追加した管理者ユーザーを確認する

shellコマンドで追加した管理者ユーザーの存在を確認することが出来ます。
↓のようにpython manage.py shellを実行するとプロンプトが表示されます。

$ python manage.py shell  
>>>  

この状態でdjango.contrib.auth.modelsからUserモデルをインポートします。
これが管理者ユーザーおよび認証済みユーザーのモデルです。
↓のようにプロンプトにコードを入力していきます。

>>> from django.contrib.auth.models import User  
>>>  
>>> users = User.objects.all()  
>>> users  
<QuerySet [<User: admin>]>  
>>>  
>>> admin = users[0]  
>>> admin.username  
'admin'  
>>> admin.is_authenticated  
True  
>>> admin.is_staff  
True  
>>> admin.is_superuser  
True  
>>>  

admin変数のis_sueruser属性がTrueになっているのがわかります。
この属性がTrueUserは管理者ユーザーの権限を持っています。

作成した管理者ユーザーで管理サイトにログインする

開発用サーバーを起動して、管理サイトにログインしてみましょう。

$ python manage.py runserver 0.0.0.0:7123  

ブラウザで「http://localhost:7123/admin/」にアクセスすると、管理サイトへのログイン画面が現れます。

ここに先ほど追加した管理者ユーザーのユーザー名とパスワードを入力すると、ログインが可能です。

changepasswordで管理者ユーザーのパスワードを変更する

追加した管理者ユーザーのパスワードはchangepasswordコマンドで変更することが出来ます。
↓のようにchangepasswordコマンドを実行します。

$ python manage.py changepassword admin  
Changing password for user 'admin'  
Password:  
Password (again):  
Password changed successfully for user 'admin'  

パスワードの入力がプロンプトでうながされるので、新しいパスワードを2回入力します。
パスワードの更新に成功すると「Password changed successfully for user 'ユーザ名'」というメッセージが表示されます。

createsuperuserでオプションを利用する

createsuperuserはオプションをいくつか持っていますが、--usernameオプションと--emailオプションを使うと、ユーザー名とEメールアドレスの入力を省略することが出来ます。

$ python manage.py createsuperuser --username admin2 --email xxx@xxx  
Password:  
Password (again):  
Superuser created successfully.  

↑のように--usernameオプションにユーザー名、--emailオプションにEメールアドレスを指定している場合は、パスワードのプロンプトだけが表示されます。

おわりに

今回はDjangoのcreatesuperuserコマンドについて見てみました。
プロジェクトを開始した場合、比較的に実行する確率が高いコマンドの1つと言えます。

🦝 < 管理してほしい

🐭 < 自己管理おつ