Cách tạo Ứng dụng Django và Kết nối nó đến Database
Cách tạo Ứng dụng Django và Kết nối nó đến Database
Mở đầu
Django là một framework viết bằng Python miễn phí và mã nguồn mở, với ưu điểm là dễ dàng mở rộng, tương thích với nhiều hệ thống khác nhau và sự phát triển nhanh chóng.
Trong hướng dẫn này, bạn sẽ học cách thiết lập nền tảng ban đầu cho một trang web blog với các kết nối đến một cơ sở dữ liệu MySQL. Quá trình này liên quan đến việc tạo ra các cấu trúc khung cơ bản của ứng dụng web blog với django-admin, tạo cơ sở dữ liệu MySQL và sau đó kết nối các ứng dụng web tới cơ sở dữ liệu.
Yêu cầu
- Các phần mềm cần thiết để sử dụng Django trên Ubuntu 16.04 theo bài viết Cách cài Django và Thiết lập Môi trường phát triển trên Ubuntu 16.04
- MySQL được cài đặt sẵn trên server. Có nhiều cách để cài MySQL trên Ubuntu, bạn có thể tham khảo bài viết Thiết lập ban đầu cho server chạy Ubuntu 16.04
Bước 1 — Tạo khung cho Project
Để đặt nền tảng cho các ứng dụng, chúng ta cần phải tạo ra bộ khung cơ bản cho project với lệnh django-admin. Project được tạo ra này sẽ là nền tảng của ứng dụng blog.
Đầu tiên ta cần chuyển đến thư mục home với lệnh:
cd ~
Hiển thị các thành phần của thư mục:
ls
Danh sách các thư mục con sẽ được hiển thị:
Output
django-apps
Vì đây chỉ là một ví dụ, ta không cần đến thư mục này, thay vào đó ta sẽ tạo ra một thư mục mới, chẳng hạn my_blog_app
.
mkdir my_blog_app
Truy cập vào thư mục vừa tạo:
cd my_blog_app
Sau đó tạo và kích hoạt một trường Python ảo:
virtualenv env
. env/bin/activate
Cài Django:
pip install django
Trong thư mục my_blog_app
ta sẽ tạo ra một project mới với lệnh:
django-admin startproject blog
Kiểm tra lại bằng cách truy cập vào thư mục blog/
cd blog
Thư mục blog/
sẽ đã được tạo trong ~/my_blog_app/
, sau khi ta chạy lệnh django-admin
Chạy lệnh ls
để kiểm tra. Bạn sẽ thấy có một thư mục blog
và một file manage.py
:
Output
blog manage.py
Bước 2 — Thay đổi Cài đặt
Sau bước 1, ta đã có file settings.py
bên trong thư mục blog
Để blog có thời gian khớp với múi giờ tại khu vực, ta sẽ chỉnh sửa file settings.py. Ví dụ ở đây ta sẽ sử dụng múi giờ. America/New_York
.
Chuyển đế thư mục chứa file settings.py
rồi mở nó để chỉnh sửa:
cd ~/my_blog_app/blog/blog/
nano settings.py
Kéo xuống mục TIME_ZONE
bên dưới file, nó sẽ trông như thế này:
...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
Ta sẽ sửa dòng TIME_ZONE
để khớp với múi giờ hiện tại.
...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
Giờ ta cần thêm path cho các file tĩnh, là các file được phục vụ bởi ứng dụng web Django.
Kéo xuống tận cùng của file settings.py
và thêm dòng STATIC_ROOT
như bên dưới:
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static/'STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Tiếp theo ta sẽ thêm địa chỉ IP của server vào danh sách các host. Chuyển đến dòng ALLOWED_HOSTS
, ở đầu file settings.py
:
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['your server IP address']
# Application definition
...
Thêm địa chỉ IP của server vào giữa hai dấu ngoặc vuông.
Bấm tổ hợp phím CTRL
+ X
và y
để lưu thay đổi.
Vậy là ta đã xong phần cài đặt trên Django. Giờ hãy chuyển sang các thao tác trên cơ sở dữ liệu.
Bước 3 — Cài đặt MySQL Database Connector
Để sử dụng MySQL với project, ta sẽ cần một thư viện connector của Python 3 tương thích với Django. Ở đây, ta sẽ cài mysqlclient
, một nhánh của MySQLdb
.
Đầu tiên ta cần cài python3-dev
:
sudo apt-get install python3-dev
Tiếp theo là các header và thư viện hỗ trợ việc cần thiết cho Python and MySQL:
sudo apt-get install python3-dev libmysqlclient-dev
Bạn sẽ thấy output:
Output
After this operation, 11.9 MB of additional disk space will be used. Do you want to continue? [Y/n]
Bấm y
rồi ENTER
.
Tiếp theo, ta sẽ dùng pip3
để cài thư viện mysqlclient
từ PyPi
. Vì phiên bản của pip
hiện tại là pip3
, ta có thể sử dụng lệnh pip
.
pip install mysqlclient
Ouput:
successfully installed mysqlclient
Collecting mysqlclient
Downloading mysqlclient-1.3.12.tar.gz (82kB)
100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
Running setup.py bdist_wheel for mysqlclient ... done
Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12
Giờ hãy cài MySQL
server:
sudo apt-get install mysql-server
Bước 4 — Tạo Database
Kiểm tra xem MySQL có đang chạy không:
systemctl status mysql.service
Output:
mysql.service active
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-12-29 11:59:33 UTC; 1min 44s ago
Main PID: 26525 (mysqld)
CGroup: /system.slice/mysql.service
└─26525 /usr/sbin/mysqld
Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.
Nếu bạn gặp lỗi như sau:
mysql.service inactive
● mysqld.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
thì hãy chạy lệnh sudo systemctl start mysql
để khởi động mysql.service
.
Đăng nhập vào MySQL:
mysql -u db_user -p
Nhập vào mật khẩu
Output
Enter password:
Sau khi nhập mật khẩu, bạn sẽ thấy:
Output
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Hiển thị các database trên server với lệnh:
SHOW DATABASES;
Mặc định nếu chưa tạo thêm database nào bạn sẽ thu được output:
Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
Mặc định sẽ có 4 database được tạo sẵn là information_schema
,MySQL
, performance_schema
và sys
.
Giờ ta sẽ tạo database sẽ lưu dữ liệu của blog, ở đây ta gọi nó là blog_data:
CREATE DATABASE blog_data;
Output
Query OK, 1 row affected (0.00 sec)
Note: Nếu bạn thấy:
database creation failedERROR 1007 (HY000): Can't create database blog_data; database exists
Thì nghĩa là một database tên blog_data
đã tồn tại.
Còn nếu thấy output như sau:
ERROR 1064 (42000): You have an error in your SQL syntax;
Thì nghĩa là cú pháp lệnh của bạn có vấn đề.
Hiển thị danh sách các database thêm một lần nữa để kiểm tra lại:
SHOW DATABASES;
Bạn sẽ thấy database blog_data
được thêm vào:
Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Thoát MySQL server bằng cách bấm CTRL
+ D
.
Bước 5 — Kết nối MySQL Database tới Ứng dụng
Cuối cùng ta sẽ cấp các quyền kết nối để database có thể hoạt động với ứng dụng Django.
Note: Chú ý rằng các cài đặt kết nối được sử dụng theo trật tự sau:
- OPTIONS
- NAME
, USER
, PASSWORD
, HOST
, PORT
- MySQL option files.
Trở lại file settings.py
và thay thế dòng DATABASES
bằng đoạn cấu hình bên dưới.
...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}}...
Mở file cấu hình MySQL với sudo
rồi chỉnh sửa nó:
sudo nano /etc/mysql/my.cnf
...
[client]
database = db_nameuser = db_userpassword = db_passworddefault-character-set = utf8
Ở đây database sẽ là blog_data
, username và password cho MySQL server là username và password ở trên , bộ mã hóa mặc định là utf8
.
Sau đó khởi động lại MySQL server:
systemctl daemon-reload
systemctl restart mysql
Bước 6 — Kiểm tra kết nối giữa MySQL và Ứng dụng Django
Cuối cùng ta cần phải xác minh rằng các cấu hình trong Django nhận dạng được máy chủ MySQL bằng cách trực quan nhất là khởi động server.
Chuyển đến thư mục lưu các file blog:
cd ~/my_blog_app/blog/
Chạy lệnh sau:
python manage.py runserver your-server-ip:8000
Output:
Output
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
Note: Bạn sẽ thấy thông báo có những bản migration chưa được áp dụng. Không cần quan tâm đến thông báo này vì ta sẽ làm việc với các migation sau.
Làm theo hướng dẫn trong output rồi truy cập địa chỉ http://your-server-ip:8000/
để tiếp tục:
Nếu bạn thấy trang web như trên, ứng dụng Django của bạn đã hoạt động.
Sau khi test xong, bấm CTRL
+ C
để dừng lệnh runserver
và trở lại môi trường phát triển ứng dụng ban đầu.
Nếu không muốn làm gì thêm, chạy lệnh deactivate
để ngừng môi trường Python:
deactivate
Tổng kết
Trong bài viết này, bạn đã thực hiện những bước cơ sở cho một ứng dụng blog Django với việc cài đặt, cấu hình và kết nối MySQL làm backend của Django. Bạn cũng đã thêm vào một số thông tin cấu hình cơ bản cho ứng dụng Django trong file settings.py
, như là TIME_ZONE
và ALLOWED_HOSTS
.
Một số bài viết trong serie về Django: