# 註冊 Django 應用程式(APP)

在專案中會將大部分功能模組化,每個模組稱為應用程式(APP)。

# api/products/apps.py
from django.apps import AppConfig

class ProductsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'api.products'
    verbose_name = "產品管理"  # 🔹 Django Admin 會顯示「產品管理」

# settings 設定

settings.py 中註冊應用程式,Django 會自動尋找 apps.py 中的 ProductsConfig 類別,並用它來配置應用程式

INSTALLED_APPS = [
 ...
    # 註冊 api(後端資料夾名稱) app
    'api.products.apps.ProductsConfig',
]

並替換資料庫連線資訊

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

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'XXX',
        'USER': 'XXX',
        'PASSWORD': 'XXXXXXXXXX',
        'HOST': '192.xxx.xxx.xxx',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

# 資料庫 migrate 流程

本專案使用的 MySQl 驅動為 pymysql

# 建立虛擬環境

本人習慣在各個不同專案目錄底下建立 venv,方便管理,並且不會互相干擾,只需格外注意要再 .gitignore 中加入 venv 別讓虛擬環境被版控即可

python -m venv venv
source venv/bin/activate

# 資料庫遷移

進入後端目錄開始進行資料遷移同步 Django 專案下 models.py 中的類別(Class)至資料庫

cd backend/
python manage.py makemigrations
python manage.py migrate

# mysql_native_password 錯誤排除

若在遷移時遇到 "Authentication plugin 'mysql_native_password' cannot be loaded: 的錯誤訊息,是因為 MySQL 8+ 的身份驗證機制與 mysqlclient 兼容性問題,解決方法為在 backend/__init__.py 中加以下程式碼:

# __init__.py
import pymysql
pymysql.install_as_MySQLdb()

原因:Django 預設使用 MySQLdb,而這兩行能切換為 pymysql。避免對 Django 進行額外的設定變更,同時繞過 mysqlclient 的兼容性問題,不依賴 mysql_native_password.so

加入這兩行後在執行一次 python manage.py migrate 即可完成資料庫遷移

migrate_success

# MySQL

Django 會使用 app_label_modelname 的格式來命名資料表,例如:

先前我把我所有的應用程式名稱「不再」設定為 api,而是依據它們不同的功能命名,例如 productorderuserblog 等等,這樣資料表更容易管理,那我將所有與 product 相關的資料表都放在 products 應用程式中

因此能看到在 MySQL 中資料表名稱從原本的 api_product、api_productimage、api_specification..

products_product、products_productimage、products_specification..等等。

mysql-table_name

請我喝[茶]~( ̄▽ ̄)~*

Young 微信支付

微信支付

Young 支付寶

支付寶