前言
學了 Ruby on Rails 之後,想說再繼續學其他的框架和語言,那就決定是最熱門的 Python 語言所以使用的網頁框架 Django 了 ٩(^ᴗ^)۶,本系列會是我以初階網頁工程師的角度所寫的學習筆記,歡迎不吝指教~
開啟新專案
因為 Django 不像 Rails 有內建的套件管理工具,所以我使用 Poetry 做為套件管理工具,詳細下載教學可以參考:https://python-poetry.org/docs/
- 新增資料夾
$ mkdir my_project
- 使用 vscode 開啟資料夾
- 新增 pyproject.toml
$ poetry init --no-interaction --dependency django
- 安裝依賴項目
$ poetry install
- 進入虛擬環境
$ poetry shell
- 初始化專案
$ poetry run django-admin startproject project
- 進入專案資料夾
$ cd project
- 跑資料庫遷移
$ python manage.py migrate
- 開啟伺服器
$ python manage.py runserver
MVC v.s. MTV?
在 Django 不是採用 MVC 架構,而是採用 MTV,差別如下:
MTV | MVC |
---|---|
Model | Model |
Template | View |
View | Controller |
關於 MVC,可以參考之前所寫的文章:Ruby on Rails: MVC 是什麼?
APP?
Django 將整個網站分成很多模塊,可以把不同模塊整理出來,稱為 app,
像是如果要製作 blog app,可以運用指令生成:$ python manage.py startapp blog
運行指令後會長出很多資料夾:
這些檔案的相關說明:
檔案 | 說明 |
---|---|
migrations | 資料庫遷移資料 |
admin.py | 內建的 admin 站點 |
models.py | 資料庫設計 |
test.py | 測試檔案 |
view.py | MVC 的 controller |
看字面意思應該也不難猜裡面的內容~
設計 Table
- 每個 model 都是一個 Python class,繼承自 django.db.models.Model
- 模型的每個屬性代表一個資料庫欄位。
Model fields 可為 Django Model 定義不同型態的屬性,比較常見的有:
類型 | 說明 |
---|---|
CharField | 字串欄位,適合像 title、location 這種有長度限制的字串。 |
TextField | 適合放大量文字的欄位 |
URLField | URL 設計的欄位 |
DateTimeField | 日期與時間的欄位,使用時會轉成 Python datetime 型別。 |
當然不只以上這些屬性,還有更多屬性可以參考:Django docs
理解基本觀念之後,就可以來設計我們的 Table 了~
1 |
|
上面內容所代表的意思:
數據庫設計好後,要和 Django 說,我們有一個 blog 的 app,需要在數據庫進行初始化:
1 |
|
添加完成之後就可以運行 $ python manage.py makemigrations blog
生成我們的 Table 啦~
輸入完成後會出現以下文字:
blog/migrations/0001_initial.py
- Create model Post
blog/migrations 資料夾生成0001_initial.py
文件,這個檔案到底是什麼東西呢?(´・ω・`) ? 又做了什麼事呢?
想知道的話,可以透過以下命令,查看這裡執行的 SQL 語法,這樣就更一目了然了 ٩(๑❛ᴗ❛๑)۶:
$ python manage.py sqlmigrate blog 0001
1 |
|
可以從指令中看出,我們新增了一張名稱為blog_post
的 Table,另外也新建了我們在上面所填寫的欄位,而預設欄位都是NOT NULL
。
Django 和 Rails 一樣都使用 ORM,我們就不用特地使用 SQL 語法來操作資料庫了~
最後可以執行$ python manage.py migrate
就完成了 Table 的建立了!
添加新欄位
做到後面發現忘記加 slug,要怎麼增加呢?
一樣到建立 Model 的blog/models.py
,在剛剛新增的Class Post
內新增:
1 |
|
接著運行 $ python manage.py makemigrations blog
最後運行$ python manage.py migrate
就完成了新增~沒想到光新增 Table 就寫了一大篇(´・ω・`),剩下的就留到下一次分享了~
本篇文章是我由以下參考資料整理而成,如果您有興趣了解更多,請參考:
评论