Cách tạo Ứng dụng Django và Kết nối nó đến Database

2 năm trước

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

 

 

 

 

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ị:

Outputdjango-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 :

Outputblog 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:

settings.py
...
# 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.

settings.py
...
# 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:

settings.py
...
# 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 :

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:

OutputAfter 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

OutputEnter 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,MySQLperformance_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; 
OutputQuery 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
NAMEUSERPASSWORDHOSTPORT
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.

settings.py
...
# 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 
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:

Django Default Page

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: