如何创建 Django 应用并连接到数据库

介紹

Django 是一個使用Python編寫的免費、開源的Web框架。這個工具可以實現可擴展性、重用性和快速開發。

在本教程中,您將學習如何為具有與MySQL數據庫連接的博客網站建立初始基礎。這將涉及使用django-admin創建博客Web應用程序的骨架結構,創建MySQL數據庫,並將Web應用程序連接到數據庫。

Django將為您提供一個開發環境,以便您可以在其中開發博客Web應用程序,但在將您的博客上線到互聯網之前,您需要採取更多步驟。

先決條件

要遵循本教程,您將需要:

一切安裝和設置完成後,您可以進入第一步驟。

第1步 — 創建資料庫

Django 支援多個流行的資料庫管理系統,但本指南專注於將 Django 連接到 MySQL 資料庫。為了做到這一點,您需要在 MySQL 實例上創建一個資料庫,以及一個 Django 可以用來連接到資料庫的 MySQL 使用者配置文件。

為此,請使用以下命令連接到您的 MySQL 資料庫,作為root MySQL 使用者:

  1. sudo mysql

當提示變更時,您就知道自己在 MySQL 伺服器中:

使用以下命令檢查當前資料庫:

  1. SHOW DATABASES;

假設您尚未創建任何資料庫,您的輸出將類似於以下內容:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

默認情況下,您已經創建了 4 個資料庫:information_schemaMySQLperformance_schemasys。您不需要觸及這些資料庫,因為它們包含了對 MySQL 伺服器本身非常重要的資訊。

相反,請創建一個初始的資料庫,用於存儲您的網誌資料。

要在MySQL中创建数据库,请运行以下命令,并为您的数据库使用有意义的名称:

  1. CREATE DATABASE blog_data;

成功创建数据库后,您的输出将如下所示:

Output
Query OK, 1 row affected (0.00 sec)

验证数据库现在是否列为可用数据库之一:

  1. SHOW DATABASES;

应该在输出中列出blog_data数据库:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

接下来,创建一个单独的MySQL用户帐户,Django将用于操作新数据库。创建特定的数据库和帐户可以从管理和安全性方面支持您。在本指南中,我们将使用名称djangouser。您可以使用任何您喜欢的名称,但选择一个描述性的名称可能会有所帮助。

您将创建此帐户、设置密码,并授予其访问您创建的数据库的权限。首先,通过输入以下命令创建用户并设置其密码。请通过替换此示例中的password来为您的数据库选择一个强密码:

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

让数据库知道djangouser应该完全访问您设置的数据库:

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

现在您有了一个专门为Django创建的数据库和用户帐户。刷新权限,以便当前的MySQL实例了解您所做的最近更改:

  1. FLUSH PRIVILEGES;

完成后,您可以通过编写EXIT;或按CTRL + D退出MySQL服务器。

步驟 2 — 建立 MySQL 選項檔案

不要在 Django 配置文件中指定 MySQL 連接詳細信息,您可以將它們存儲在一個選項檔案中。許多 MySQL 程序可以讀取選項檔案 — 也稱為配置文件 — 以獲取啟動選項或連接詳細信息。這樣做很方便,因為您只需將數據庫登錄憑證存儲在一個地方。

使用您首選的文本編輯器打開 my.cnf 配置文件以更新您的 MySQL 憑證。這裡我們將使用 nano

  1. sudo nano /etc/mysql/my.cnf

添加以下行並包含您的相關信息:

/etc/mysql/my.cnf
…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

請注意,utf8 被設置為默認編碼。這是在 MySQL 中編碼 Unicode 數據的常見方法。確保詳細信息正確無誤後,保存並關閉文件。如果您使用 nano 編輯文件,可以通過按下 CTRL + O 保存文件,然後按下 CTRL + X 關閉編輯器。

編輯完文件後,重新啟動 MySQL 以使更改生效:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

請注意,重新啟動 MySQL 需要幾秒鐘,請耐心等待。

第三步 – 创建初始的 Django 项目框架

在这一步中,您将使用 django-admin 命令生成项目框架,为您的应用程序奠定基础。

导航到您想要构建博客应用程序的目录。在该目录中,创建一个特定的目录来构建该应用程序。为您正在构建的应用程序取一个有意义的名称。作为示例,我们将把它命名为 my_blog_app

  1. mkdir my_blog_app

现在,导航到新创建的目录:

  1. cd my_blog_app

接下来,进入您想要在 Django 中工作的编程环境。您可以使用现有的环境,也可以创建一个新的环境。以下命令创建一个名为 env 的新环境,但您应该使用一个对您有意义的名称:

  1. python3 -m venv env

一旦创建完成,您可以激活它:

  1. . env/bin/activate

如果您还没有在此环境中安装 Django,请现在安装它:

  1. pip install django

my_blog_app 目录中,运行以下命令生成一个项目:

  1. django-admin startproject blog

通过导航到 blog/ 目录来验证是否成功:

  1. cd blog

然后运行 ls 命令验证项目文件夹中是否创建了必要的文件和目录:

  1. ls

输出将列出 blog 目录和一个 manage.py 文件:

Output
blog manage.py

現在您已經創建了一個包含博客應用程序初始開始的項目目錄,您可以繼續下一步。

步驟4 — 安裝 MySQL 數據庫連接器

為了在您的項目中使用 MySQL,您需要一個與 Django 兼容的 Python 3 數據庫連接器庫。此步驟概述了如何安裝一個這樣的數據庫連接器,即 mysqlclient,這是 MySQLdb 的一個分支版本。

首先,安裝必要的 MySQL 開發標頭和庫:

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

接下來,使用 pip 安裝 wheel 套件。 Wheel 是 Python 中用於從 Python 套件索引安裝模塊的打包格式。從 wheel 套件安裝 Python 程序通常比從其源代碼構建包更快速和更節省資源。為了安裝並使用打包為 wheel 的程序,您首先需要確保已安裝了 wheel 套件:

  1. pip install wheel

然後繼續安裝 mysqlclient

  1. pip install mysqlclient

您的輸出將類似於以下內容,確認客戶端已經正確安裝:

Output
... Successfully installed mysqlclient-2.1.1

您現在已成功安裝了 MySQL 客戶端,使用了 PyPi 的 mysqlclient 連接器庫。

步驟5 — 編輯設置

之前運行 django-admin 時,它會為 Django 創建一個配置文件,名為 settings.py。您需要更改此文件中的一些默認設置,以便一切正常運作。

要編輯該文件,使用您喜歡的文本編輯器打開文件的路徑:

  1. nano ~/my_blog_app/blog/blog/settings.py

為了讓您的博客擁有與您所在地區相關聯的正確時間,您可以編輯 settings.py 文件,使其使用您當前的時區。您可以使用這個 時區列表 作為參考。在我們的示例中,我們將使用 America/New_York 時區。

在文件內部,導航到文件底部附近的 TIME_ZONE 字段:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

修改 TIME_ZONE 行,將其設置為您當前的時區。在本示例中,我們將使用紐約的時區:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

保持文件打開,因為接下來,您需要為您的靜態文件添加一個路徑。從您的 Django Web 應用程序提供的文件稱為 靜態文件。這可能包括用於渲染完整網頁的任何文件,包括 JavaScript、CSS 和圖像。

轉到 settings.py 文件的末尾並添加 STATIC_ROOT

~/my_blog_app/blog/blog/settings.py
…

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

現在您已經添加了時區和靜態文件的路徑,將您的 IP 添加到允許的主機列表中。導航到 settings.py 文件中顯示 ALLOWED_HOSTS 的行,它將位於 settings.py 文件的頂部。在方括號之間添加您的服務器 IP 地址,用單引號括起來:

~/my_blog_app/blog/blog/settings.py
...
ALLOWED_HOSTS = ['your_server_IP_address']
...

接下來,添加提供各種目錄功能的 Python OS 模塊。如果沒有此模塊,當設置管理用戶以開始使用 Django 介面時,您將收到錯誤消息。為此,您需要導入將在您的相應操作系統上運行的 os 模塊。在 from pathlib import Path 行上面添加以下行:

~/my_blog_app/blog/blog/settings.py
...
import os
from pathlib import Path
...

到目前為止,您已經編輯了您的 settings.py 文件,以便配置正確的時區。您還添加了靜態文件的路徑,將您的 ip 地址 設置為應用程序的 ALLOWED_HOST,並導入了 Python OS 模塊,以幫助稍後設置管理用戶。

要添加到文件中的最後一個片段是數據庫連接凭據,以將您的 Django 博客應用程序連接到 MySQL。為此,找到文件中的 DATABASES 字典。默認情況下,它看起來如下:

~/my_blog_app/blog/blog/settings.py
…

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

用以下行替換 DATABASES 字典的 ENGINENAME 選項:

~/my_blog_app/blog/blog/settings.py
...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

'ENGINE': 'django.db.backends.mysql'行告訴Django使用其內建的MySQL數據庫後端。 read_default_file 選項指向之前您編輯的 /etc/mysql/my.cnf,這告訴Django它可以在哪裡找到相關的連接詳細信息以連接到您在第1步中創建的MySQL數據庫。

請注意,Django按照以下順序讀取數據庫連接設置:

  • OPTIONS
  • NAMEUSERPASSWORDHOSTPORT
  • MySQL選項文件

通過在此示例中將Django指向MySQL選項文件的OPTIONS設置,它將優先於任何NAME設置,否則如果您將其指向OPTIONS設置之外,它將覆蓋選項文件。

在此時,您可以保存並關閉文件。

接下來,通過運行以下命令檢查遷移更改:

  1. python manage.py makemigrations

然後,運行migrate以確保更改已生效:

  1. python manage.py migrate

現在,您的更改已經遷移,您可以創建一個管理用戶以供Django管理界面使用。使用createsuperuser命令執行此操作:

  1. python manage.py createsuperuser

系統將提示您為用戶輸入用戶名、電子郵件地址和密碼。

完成此信息後,您可以繼續調整防火牆設置以允許進行測試。

第6步 — 調整防火牆設定

在測試您的 Django 網絡應用程序之前,您必須確保已調整防火牆設置。首先更改您的 ufw 設置以允許訪問端口 8000

  1. sudo ufw allow 8000

檢查狀態以確保這些權限設置已成功更新:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

您的防火牆設置現在已經正確調整,以便在下一步測試您的連接。

第7步 — 測試 MySQL 對應用程序的連接

現在,您可以驗證 Django 中的配置是否正確地檢測到您的 MySQL 服務器。您可以通過運行服務器來執行此操作。如果失敗,則意味著連接工作不正常。否則,連接有效。

首先切換到以下目錄:

  1. cd ~/my_blog_app/blog/

然後運行以下命令:

  1. python manage.py runserver your-server-ip:8000

您將收到類似以下的輸出:

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

注意:您將注意到輸出中有未應用的遷移。別擔心,這不會影響應用程序的初始設置,您可以繼續進行。

請按照輸出中的指示並訪問建議的鏈接 http://your-server-ip:8000/,檢查您的 Web 應用程序是否正常工作。

如果您的頁面顯示類似於上面的屏幕截圖,則您的 Django 應用程序正在按預期運行。

測試應用程序完成後,按下 CTRL + C 以停止 runserver 命令。這將返回您的編程環境。

當您準備離開 Python 環境時,可以運行 deactivate 命令:

  1. deactivate

停用您的編程環境將返回您到終端命令提示符。

結論

在本教程中,您建立了 Django 博客的初始基礎。您已安裝、配置並將 MySQL 連接到 Django 後端。您還向應用程序的 settings.py 文件中添加了一些重要信息,例如 TIME_ZONEALLOWED_HOSTSimport os,以及數據庫憑據以將 Django 應用程序連接到 MySQL。您還調整了防火牆設置,以確保測試進行順利。

現在,這些基本設置和配置完成後,您可以開始在 Django 應用程序中開發模型並應用遷移。

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database