什麼是超級使用者 Super User呢?django預設有一整套完整的資料庫管理介面,也就是我們在一開始startproject預設中的urls.py裡面的urlpatterns裡面的那個admin,沒錯!Super User就是admin,今天就來看看Super User怎麼被建立出來的?還有admin裡面究竟又有些什麼呢?
django要怎麼建立Super User呢?只要輸入python manage.py createsuperuser
在依照指示輸入django就會幫你把Super User建立起來,這邊要注意!再輸入python manage.py createsuperuser
之前要記得先幫django的預設資料表migrate進DB,python manage.py migrate
!!不然Super User的資料會沒地方存,而django自己也會抱錯並提示!
create完後,我們再把server run起來,python manage.py runserver
,進去後在url後面加上/admin
就能看到admin的登入頁面囉~此時在輸入我們剛剛create的帳號密碼,就可以登入了
登入後會看到
在這邊就可以簡單的對django的table進行圖形介面的CRUD,如果是自己寫在models.py的table的話,就必須要註冊進去admin.py裡面django才能順利的去讀取到!寫起來像這樣,假設我有兩個models,分別為Person
、Todo
,把他註冊進去
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Person)
admin.site.register(Todo)
就可以很順利的在admin頁面中看到這兩個table的資訊囉~
那麼接下來,我們就來看看python manage.py createsuperuser
做了什麼吧!不出意料的話應該就是簡單的把我們輸入的資料寫進特定的table而已~
這次位置變了,換去django.contrib.auth.management.commands.createsuperuser.py
,那我們一樣看到handle()
先處理username
再來是相關資訊
接著處理password
密碼這邊有使用python內建函式庫getpass
會讓你在CLI看不到你打的字
最後前面的步驟都沒問題的話就會寫進資料庫!
步驟大概是上面那樣,和我們實際操作create super user的時候差不多,但裡面有些變數都不太清楚在哪邊,來找找看吧!
首先就來看看self.UserModel
這個變數吧,熟悉django的夥伴一看名稱大概就可以猜測出他是ORM的model了!只不過具體的位置在哪邊呢?
再往裡看
這邊就可以看到他是根據settings中的變數AUTH_USER_MODEL來去定位的,那反推我們如果需要客製化或許就需要去修改到這個變數~
再往裡面挖,就可以在這邊找到了django.conf.global_settings.py
這邊有一些django相關的settings預設變數
那我們在根據這個的位置來去找!
最後終於找到我們的model位置django.contrib.auth.models.User
讓我們看重要的他是如何create的!
我目前沒看到他是怎麼定義_default_manager
的部分,不過可以知道他是UserManager
然後就可以在UserManager
那邊找到create_superuser
部分啦!
至於ORM的部分我們之後再找一天來看看吧!!
沒想到django的model也可以有這樣的寫法,之前都只有用最普通的寫法,一個model一個table那樣~真的看著source code都會有不同的驚喜在等著我們!!