Ngày đăng: 20 tháng 11 năm 2023
Django là một framework web mã nguồn mở và miễn phí được viết bằng Python. Công cụ này cho phép khả năng mở rộng, tái sử dụng và phát triển nhanh chóng.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập nền tảng ban đầu cho một trang blog có kết nối với cơ sở dữ liệu MySQL. Điều này sẽ liên quan đến việc tạo cấu trúc skeleton,;ưk của ứng dụng web blog bằng django-admin
, tạo cơ sở dữ liệu MySQL và kết nối ứng dụng web với cơ sở dữ liệu.
Django sẽ cung cấp cho bạn môi trường phát triển để hoạt động trên ứng dụng web blog của bạn, nhưng bạn sẽ cần thực hiện nhiều bước hơn trước khi đưa blog của mình trực tuyến trên internet.
Để làm theo hướng dẫn này, bạn sẽ cần:
sudo
và tường lửa. Làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 22.04 của chúng tôi để thiết lập điều này.Sau khi mọi thứ đã được cài đặt và thiết lập, bạn có thể chuyển sang bước đầu tiên.
Django hỗ trợ một số hệ thống quản lý cơ sở dữ liệu phổ biến, nhưng hướng dẫn này tập trung vào việc kết nối Django với cơ sở dữ liệu MySQL. Để thực hiện việc này, bạn cần tạo cơ sở dữ liệu trên phiên bản MySQL của mình cũng như hồ sơ người dùng MySQL mà Django có thể sử dụng để kết nối với cơ sở dữ liệu.
Để thiết lập tính năng này, hãy kết nối với cơ sở dữ liệu MySQL của bạn với tư cách là root MySQL user bằng lệnh sau:
- sudo mysql
Bạn biết bạn đang ở trong máy chủ MySQL khi lời nhắc thay đổi:
-
Kiểm tra cơ sở dữ liệu hiện tại bằng lệnh sau:
- SHOW DATABASES;
Kết quả đầu ra của bạn sẽ tương tự như sau, giả sử rằng bạn chưa tạo bất kỳ cơ sở dữ liệu nào:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
Theo mặc định, bạn sẽ có 4 cơ sở dữ liệu đã được tạo: information_schema
, MySQL
, performance_schema
và sys
. Bạn sẽ không cần phải chạm vào những thứ này vì chúng chứa thông tin quan trọng đối với chính máy chủ MySQL.
Thay vào đó, hãy tạo cơ sở dữ liệu ban đầu sẽ chứa dữ liệu cho blog của bạn.
Để tạo cơ sở dữ liệu trong MySQL, hãy chạy lệnh sau, sử dụng tên có ý nghĩa cho cơ sở dữ liệu của bạn:
- CREATE DATABASE blog_data;
Sau khi tạo thành công cơ sở dữ liệu, kết quả đầu ra của bạn sẽ như sau:
OutputQuery OK, 1 row affected (0.00 sec)
Xác minh rằng cơ sở dữ liệu hiện được liệt kê là một trong những cơ sở dữ liệu có sẵn:
- SHOW DATABASES;
Cơ sở dữ liệu blog_data
bây giờ sẽ được liệt kê trong số các cơ sở dữ liệu có trong đầu ra:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Tiếp theo, tạo một tài khoản người dùng MySQL riêng mà Django sẽ sử dụng để vận hành cơ sở dữ liệu mới. Việc tạo cơ sở dữ liệu và tài khoản cụ thể có thể hỗ trợ bạn từ quan điểm quản lý và bảo mật. Chúng tôi sẽ sử dụng tên djangouser trong hướng dẫn này. Bạn có thể sử dụng bất kỳ tên nào bạn muốn nhưng sẽ hữu ích nếu chọn tên mang tính mô tả.
Bạn sẽ tạo tài khoản này, đặt mật khẩu và cấp quyền truy cập vào cơ sở dữ liệu bạn đã tạo. Đầu tiên, tạo người dùng và đặt mật khẩu của họ bằng cách gõ lệnh dưới đây. Hãy nhớ chọn mật khẩu mạnh cho cơ sở dữ liệu của bạn bằng cách thay thế password
trong ví dụ này:
- CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Hãy để cơ sở dữ liệu biết rằng djangouser phải có quyền truy cập đầy đủ vào cơ sở dữ liệu mà bạn thiết lập:
- GRANT ALL ON blog_data.* TO 'vdjangouser<^>'@'localhost';
Bây giờ bạn có cơ sở dữ liệu và tài khoản người dùng, mỗi tài khoản được tạo riêng cho Django. Xóa các đặc quyền để phiên bản hiện tại của MySQL biết về những thay đổi gần đây bạn đã thực hiện:
- FLUSH PRIVILEGES;
Khi hoàn tất, bạn có thể thoát khỏi máy chủ MySQL bằng cách viết EXIT
; hoặc nhấn CTRL + D
.
Thay vì chỉ định chi tiết kết nối MySQL của bạn trong tệp cấu hình Django, bạn có thể lưu trữ chúng trong tệp tùy chọn. Nhiều chương trình MySQL có thể đọc các tệp tùy chọn - còn được gọi là tệp cấu hình - để biết thông tin như tùy chọn khởi động hoặc chi tiết kết nối. Điều này có thể thuận tiện vì bạn chỉ phải lưu trữ thông tin đăng nhập cơ sở dữ liệu của mình ở một nơi.
Mở tệp cấu hình my.cnf
bằng trình soạn thảo văn bản ưa thích của bạn để cập nhật thông tin đăng nhập MySQL của bạn. Ở đây chúng tôi sẽ sử dụng nano
:
sudo nano /etc/mysql/my.cnf
Thêm các dòng sau và bao gồm thông tin liên quan của bạn:
```nginx
[label /etc/mysql/my.cnf]
…
[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8
Lưu ý rằng utf8
được đặt làm mã hóa mặc định. Đây là cách phổ biến để mã hóa dữ liệu unicode trong MySQL. Khi bạn chắc chắn rằng thông tin chi tiết của mình là chính xác, hãy lưu và đóng tệp. Nếu bạn đã sử dụng nano
để chỉnh sửa tệp, bạn có thể làm như vậy bằng cách nhấn CTRL + O
để lưu tệp và sau đó CTRL + X
để đóng trình chỉnh sửa.
Khi tệp đã được chỉnh sửa, hãy khởi động lại MySQL để các thay đổi có hiệu lực:
- sudo systemctl daemon-reload
- sudo systemctl restart mysql
Lưu ý rằng việc khởi động lại MySQL sẽ mất vài giây, vì vậy hãy kiên nhẫn.
Trong bước này, bạn sẽ đặt nền tảng cho ứng dụng của mình bằng cách tạo project skeleton (khung dự án) bằng lệnh django-admin
.
Điều hướng đến thư mục nơi bạn muốn xây dựng ứng dụng blog của mình. Trong thư mục đó, hãy tạo một thư mục cụ thể để xây dựng ứng dụng. Gọi thư mục đó bằng một cái tên có ý nghĩa đối với ứng dụng bạn đang xây dựng. Ví dụ: chúng tôi sẽ đặt tên cho my_blog_app
:
- mkdir my_blog_app
Bây giờ, điều hướng đến thư mục vừa tạo:
- cd my_blog_app
Tiếp theo, chuyển sang môi trường lập trình mà bạn muốn sử dụng để làm việc ở Django. Bạn có thể sử dụng một cái hiện có hoặc tạo một cái mới. Lệnh sau tạo một môi trường mới gọi là env
, nhưng bạn nên sử dụng tên có ý nghĩa với mình:
- python3 -m venv env
Khi nó được tạo, bạn có thể kích hoạt nó:
- . env/bin/activate
Bây giờ hãy cài đặt Django vào môi trường này nếu bạn chưa làm như vậy:
- pip install django
Trong thư mục my_blog_app
, hãy tạo một dự án bằng cách chạy lệnh sau:
- django-admin startproject blog
Xác minh rằng nó hoạt động bằng cách điều hướng đến thư mục blog/:
- cd blog
Sau đó chạy ls
để xác minh rằng các tệp và thư mục cần thiết đã được tạo trong thư mục dự án:
- ls
Đầu ra sẽ liệt kê thư mục blog
và tệp manage.py
:
Outputblog manage.py
Bây giờ bạn đã tạo một thư mục dự án chứa phần khởi động ban đầu của ứng dụng blog của mình, bạn có thể tiếp tục sang bước tiếp theo.
Để sử dụng MySQL với dự án của bạn, bạn cần có thư viện trình kết nối cơ sở dữ liệu Python 3 tương thích với Django. Bước này phác thảo cách cài đặt một trình kết nối cơ sở dữ liệu như vậy, mysqlclient
, đây là phiên bản phân nhánh của MySQLdb
.
Đầu tiên, cài đặt các tiêu đề và thư viện phát triển MySQL cần thiết:
- sudo apt install libmysqlclient-dev default-libmysqlclient-dev
Tiếp theo, sử dụng pip
để cài đặt gói wheel
. Wheel là một định dạng gói (package) được sử dụng trong Python để cài đặt các mô-đun từ Python Package Index. Việc cài đặt chương trình Python từ các gói wheel thường nhanh hơn và tiết kiệm tài nguyên hơn so với việc xây dựng các gói từ mã nguồn của chúng. Để cài đặt và làm việc với các chương trình được gói dưới dạng wheels, trước tiên bạn cần đảm bảo gói wheel
đã được cài đặt:
- pip install wheel
Sau đó tiến hành cài đặt mysqlclient
:
- pip install mysqlclient
Đầu ra của bạn sẽ tương tự như sau, xác minh rằng máy khách đã được cài đặt đúng cách:
Output...
Successfully installed mysqlclient-2.1.1
Bây giờ bạn đã cài đặt thành công máy khách MySQL bằng thư viện trình kết nối mysqlclient
PyPi.
Khi bạn chạy django-admin
trước đó, nó đã tạo một tệp cấu hình cho Django có tên là settings.py
. Bạn cần thay đổi một số cài đặt mặc định trong tệp này để mọi thứ hoạt động chính xác.
Để chỉnh sửa tệp, hãy mở đường dẫn đến tệp bằng trình soạn thảo văn bản bạn chọn:
- nano ~/my_blog_app/blog/blog/settings.py
Để blog của bạn có thời gian chính xác được liên kết với khu vực của bạn, bạn có thể chỉnh sửa tệp settings.py
để nó sử dụng múi giờ hiện tại của bạn. Bạn có thể sử dụng danh sách múi giờ này làm tài liệu tham khảo. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng giờ America/New_York
.
Trong tệp, điều hướng đến trường TIME_ZONE
gần phần dưới cùng của tệp:
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
Sửa đổi dòng TIME_ZONE
để nó được đặt theo múi giờ hiện tại của bạn. Chúng tôi sẽ sử dụng múi giờ của New York trong ví dụ này:
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
Giữ tệp mở, vì tiếp theo bạn cần thêm đường dẫn (path) cho tệp tĩnh (static files) của mình. Các tệp được cung cấp từ ứng dụng web Django của bạn được gọi là tệp tĩnh. Điều này có thể bao gồm bất kỳ tệp nào cần thiết để hiển thị trang web hoàn chỉnh, bao gồm JavaScript, CSS và hình ảnh.
Đi đến cuối tệp settings.py
và thêm STATIC_ROOT
:
…
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...
Bây giờ bạn đã thêm múi giờ và đường dẫn cho tệp tĩnh, hãy thêm IP của bạn vào danh sách máy chủ được phép. Điều hướng đến dòng của tệp settings.py
có ghi ALLOWED_HOSTS
, nó sẽ nằm ở đầu tệp settings.py
. Thêm địa chỉ IP của máy chủ của bạn, được bao quanh bởi dấu ngoặc đơn, giữa dấu ngoặc vuông:
...
ALLOWED_HOSTS = ['your_server_IP_address']
...
Tiếp theo, thêm mô-đun Python OS cung cấp nhiều chức năng khác nhau cho các thư mục. Nếu không có mô-đun này, bạn sẽ gặp lỗi khi thiết lập người dùng quản trị để bắt đầu sử dụng giao diện Django. Để thực hiện việc này, bạn cần nhập mô-đun os
sẽ hoạt động trên hệ điều hành tương ứng của bạn. Thêm dòng import os
phía trên dòng from pathlib import Path
:
...
import os
from pathlib import Path
...
Cho đến nay bạn đã chỉnh sửa tệp settings.py
của mình để múi giờ thích hợp được định cấu hình. Bạn cũng đã thêm đường dẫn cho các tệp tĩnh, đặt ip address
của bạn thành ALLOWED_HOST
cho ứng dụng của bạn và nhập mô-đun Python OS để giúp thiết lập người dùng quản trị của bạn sau này.
Đoạn mã cuối cùng cần thêm vào tệp của bạn là thông tin xác thực kết nối cơ sở dữ liệu để kết nối ứng dụng blog Django của bạn với MySQL. Để làm được điều này, hãy tìm từ điển dữ liệu DATABASES
trong tệp. Nó sẽ trông giống như sau theo mặc định:
…
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
...
Thay thế các tùy chọn ENGINE
và NAME
của từ điển dữ liệu DATABASES
bằng các dòng sau:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
Dòng 'ENGINE': 'django.db.backends.mysql'
yêu cầu Django sử dụng phần phụ trợ cơ sở dữ liệu MySQL tích hợp của nó. Tùy chọn read_default_file
trỏ đến /etc/mysql/my.cnf
, tệp tùy chọn MySQL mà bạn đã chỉnh sửa trước đó. Điều này cho Django biết nơi nó có thể tìm thấy chi tiết kết nối có liên quan để kết nối với cơ sở dữ liệu MySQL mà bạn đã tạo ở Bước 1.
Lưu ý rằng Django đọc cài đặt kết nối cơ sở dữ liệu theo thứ tự sau:
OPTIONS
NAME
, USER
, PASSWORD
, HOST
, PORT
Bằng cách trỏ Django tới tệp tùy chọn MySQL của bạn trong cài đặt OPTIONS
như trong ví dụ này, nó sẽ được ưu tiên hơn bất kỳ cài đặt name
nào, nếu không thì sẽ ghi đè tệp tùy chọn nếu bạn trỏ đến nó bên ngoài cài đặt OPTIONS
.
Tại thời điểm này, bạn có thể lưu và đóng tệp.
Tiếp theo, kiểm tra các thay đổi di chuyển bằng cách chạy như sau:
- python manage.py makemigrations
Sau đó, chạy migrate
để đảm bảo các thay đổi được thực hiện:
- python manage.py migrate
Bây giờ các thay đổi của bạn đã được di chuyển, bạn có thể tạo người dùng quản trị để sử dụng cho giao diện quản trị Django. Thực hiện việc này bằng lệnh createsuperuser
:
- python manage.py createsuperuser
Bạn sẽ được nhắc nhập tên người dùng, địa chỉ email và mật khẩu cho người dùng của bạn.
Sau khi hoàn thành thông tin này, bạn có thể chuyển sang điều chỉnh cài đặt tường lửa của mình để cho phép thử nghiệm.
Trước khi thử nghiệm ứng dụng web Django, bạn phải đảm bảo rằng cài đặt tường lửa của mình đã được điều chỉnh. Bắt đầu bằng cách thay đổi cài đặt ufw
của bạn để cho phép truy cập vào cổng 8000
:
- sudo ufw allow 8000
Kiểm tra trạng thái để đảm bảo các cài đặt quyền này đã được cập nhật thành công:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8000 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
8000 (v6) ALLOW Anywhere (v6)
Cài đặt tường lửa của bạn hiện đã được điều chỉnh chính xác để cho phép kiểm tra kết nối của bạn trong bước tiếp theo.
Bây giờ bạn có thể xác minh rằng cấu hình trong Django phát hiện đúng máy chủ MySQL của bạn. Bạn có thể làm điều này bằng cách chạy máy chủ. Nếu không thành công, điều đó có nghĩa là kết nối không hoạt động bình thường. Ngược lại, kết nối là hợp lệ.
Đầu tiên điều hướng đến thư mục sau:
- cd ~/my_blog_app/blog/
Từ đó, chạy lệnh sau:
- python manage.py runserver your-server-ip:8000
Bạn sẽ nhận được một đầu ra tương tự như sau:
OutputPerforming 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.
Lưu ý: Bạn sẽ nhận thấy rằng bạn có các migration chưa được áp dụng trong đầu ra. Đừng lo lắng, điều này không ảnh hưởng đến quá trình thiết lập ban đầu cho ứng dụng của bạn và bạn có thể tiếp tục.
Làm theo hướng dẫn từ đầu ra và đi theo liên kết được đề xuất, http://your-server-ip:8000/
, để xem ứng dụng web của bạn và xác minh rằng nó đang hoạt động bình thường.
Nếu trang của bạn trông giống như ảnh chụp màn hình ở trên thì ứng dụng Django của bạn đang hoạt động như mong đợi.
Khi bạn hoàn tất việc kiểm tra ứng dụng của mình, hãy nhấn CTRL + C
để dừng lệnh runserver
. Điều này sẽ đưa bạn trở lại môi trường lập trình của bạn.
Khi bạn đã sẵn sàng rời khỏi môi trường Python, bạn có thể chạy lệnh deactivate
:
- deactivate
Việc tắt môi trường lập trình sẽ đưa bạn trở lại dấu nhắc lệnh đầu cuối.
Trong hướng dẫn này, bạn đã tạo nền tảng ban đầu cho blog Django của mình. Bạn đã cài đặt, định cấu hình và kết nối MySQL với phần phụ trợ Django. Bạn cũng đã thêm một số thông tin quan trọng vào tệp settings.py
của ứng dụng, chẳng hạn như TIME_ZONE
, ALLOWED_HOSTS
, import os
và thông tin xác thực cơ sở dữ liệu để kết nối ứng dụng Django của bạn với MySQL. Bạn cũng đã điều chỉnh cài đặt tường lửa để đảm bảo quá trình kiểm tra diễn ra suôn sẻ.
Bây giờ các cài đặt và cấu hình cơ bản này đã hoàn tất, bạn có thể bắt đầu phát triển các mô hình và áp dụng quá trình di chuyển trong ứng dụng Django của mình.