iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
Modern Web

From Django 1.11 to Django 2.1 系列 第 5

Day5 : Django 資料庫的概念

雖然說資料庫不是萬能的,但是沒有資料庫萬萬不能!!

Day 4的範例是為了讓大家了解 Django架構的運作模式

所以 Day4 的範例,並沒有去做資料庫的動作

但是如果每次資料都是這樣,只能呈現一段文字,難免都會顯得枯燥乏味

想像一下今天在玩寶可夢,打開遊戲你看到了一段文字
歡迎進入寶可夢的世界
哦!!! 還是 粗體

然後裡面沒有捕捉、培養,更沒有跟朋友一起打塔的功能,然後你就這樣拿著這一段文字去跟另一位拿著這段文字的朋友互相討論寶可夢,會顯得相當無趣,而且還蠻搞笑的 (打著打著我自己也笑了...xD

那為了要能夠做出更多功能,呈現出各式各樣的資料,我們要依靠的就是 資料庫(Database)了

那 Django 要怎麼設定呢? Django它很貼心的,幫我們完成了很多事情
在 內部的 ithome 資料夾底下,可以看到 settings.py 檔案,我們將它打開來,並且搜尋DATABASES,你就會看到下面這一段文字

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

上圖是Django資料庫的設定
沒錯! Django一開始就幫你預設使用 SQLite 了,等於是說,資料庫的設定你可以遵循著 Django 預設的模式走,不需要做更改

但這並不意味著 Django不支援使用其他的資料庫,它還能使用的有

  • MySQL
  • PostgreSQL
  • Oracle
  • ...以下省略

你可以根據自己的需求來決定要使用哪一種資料庫^^,而最大的差別,像是使用MySQL,就要新增 USERPASSWORD的設定,就不像 SQLite一樣,你可以直接拿來使用

接著我們搜尋另一個關鍵字 INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

這傢伙的概念其實很好懂,也很 tricky ^^",翻開說明文件你會看到他的解釋為 :

That holds the names of all Django applications that are activated in this Django instance. Apps can be used in multiple projects, and you can package and distribute them for use by others in their projects.

前面那一段話就是在解釋這一個 INSTALLED_APPS 的作用,換句話說,只要將你創建的 apps 放進來這裡,配合 著 migrate,則它就會去監督該 apps 的 models,相信你還沒有忘記 models的作用,就是資料庫的型態^_^,那為什麼說它很tricky,這部分留到後半段再告訴大家

而後面那一段話 Apps can be...,其實就是在強調 Django 的另一項特色 可插拔性,而這個特色也是遵循著 Django的一個中心理念DRY

Don’t repeat yourself (DRY)
Every distinct concept and/or piece of data should live in one, and only one, place. Redundancy is bad. Normalization is good.
The framework, within reason, should deduce as much as possible from as little as possible.

也就是說,很多的 apps 在我們打造完之後,可能會因為不同的需求而被挪到其他地方去使用,而要重新造一個相同的輪子

講完了這些概念,相信你對 Django 資料庫的概念有了進一步的認識 ^^

我們接著就來使用 migrate 這個功能吧!

(ithome_enve) C:\Users\User\Desktop\ithome\ithome>py 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 sessions.0001_initial... OK

migrate的用途這裡再強調一次,它會去看 installed_apps裡面的設定,並根據設定來找相對應的models,並根據我們所使用的資料庫來轉換成該資料庫的形式

今天大致上講到這裡,內容比較抽象,明天再來些實際的操作帶大家了解 ^^

不積跬步,無以致千里;不積小流,無以成江海,一步一腳印卡實在 From BY


上一篇
Day4 : 打造Apps跟Django say hello!
下一篇
Day6 : 資料庫的創建 - Models
系列文
From Django 1.11 to Django 2.1 30

尚未有邦友留言

立即登入留言