Hướng dẫn python project model - mô hình dự án python

Ghi chú

Nội dung bài viết bạn đang xem được update từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữ VIDEO và NỘI DUNG BÀI VIẾT.update từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữ VIDEO và NỘI DUNG BÀI VIẾT.

Chúng ta sẽ có nhiều cập nhập hơn về cả bài viết lẫn video trong thời gian tới. Nhớ like/ share hoặc đánh giá 5 sao để Kteam có động lực nhé! like/ share hoặc đánh giá 5 sao để Kteam có động lực nhé! 

Cảm ơn các bạn! 


Dẫn nhập

Sau khi THIẾT KẾ HOÀN CHỈNH WEBSITE BLOG, chúng ta sẽ bắt đầu tạo ra bảng lưu trữ các bài viết để hiển thị lên giao diện. tạo ra bảng lưu trữ các bài viết để hiển thị lên giao diện.


Nội dung

Để theo dõi bài này tốt nhất, bạn nên xem qua bài:

  • GIỚI THIỆU VỀ PYTHON DJANGO
  • TẠO PROJECT VỚI PYTHON DJANGO
  • TẠO WEB APP VÀ XỬ LÝ KHI NGƯỜI DÙNG YÊU CẦU TRUY CẬP TRONG PYTHON DJANGO
  • SỬ DỤNG TEMPLATE VÀ JINJA TRONG PYTHON DJANGO
  • FILE TĨNH VÀ THIẾT KẾ WEB BẰNG BOOTSTRAP TRONG PYTHON DJANGO
  • THIẾT KẾ HOÀN CHỈNH BLOG TRONG PYTHON DJANGO

Bài này sẽ giới thiệu những nội dung sau:

  • Khái niệm ORM
  • Tạo bảng Post để lưu trữ các bài viết
  • Migration là gì?

Khái niệm ORM

Object-Relational Mapping (ORM) là một kĩ thuật cho phép chúng ta truy vấn và quản lý dữ liệu từ database bằng cách sử dụng mô hình hướng đối tượng. Khi nhắc đến ORM, hầu hết mọi người đều nói đến thư viện đã áp dụng kĩ thuật ORM. là một kĩ thuật cho phép chúng ta truy vấn và quản lý dữ liệu từ database bằng cách sử dụng mô hình hướng đối tượng. Khi nhắc đến ORM, hầu hết mọi người đều nói đến thư viện đã áp dụng kĩ thuật ORM.

 

Hướng dẫn python project model - mô hình dự án python

Những thư viện ORM là những thư viện đã hoàn chỉnh được viết bằng ngôn ngữ lập trình bạn đang dùng và nó đã gói nhóm code cần thiết để quản lý data, như vậy bạn không cần sử dụng SQL nữa, bạn sẽ tương tác trực tiếp qua cách viết hướng đối tượng của ngôn ngữ bạn đang sử dụng


Tạo bảng Post lưu trữ các bài viết

Bây giờ Kteam sẽ tạo một app Blog nhằm quản lý các table liên quan đến bài viết, đầu tiên sẽ dùng lệnh startapp để tạp app Blog:Blog nhằm quản lý các table liên quan đến bài viết, đầu tiên sẽ dùng lệnh startapp để tạp app Blog:

python manage.py startapp blog

Sau đó, khai báo settings.py có thêm app mới:settings.py có thêm app mới:

Hướng dẫn python project model - mô hình dự án python

Bây giờ ta vào file models.py trong app blog để thiết kế bảng Post:models.py trong app blog để thiết kế bảng Post:

Hướng dẫn python project model - mô hình dự án python

Kteam muốn tạo một bảng Post có 3 cột là:

  • title: lưu tiêu đề bài viết, có đồ dài tối đa là 100 kí tự : lưu tiêu đề bài viết, có đồ dài tối đa là 100 kí tự
  • body: nội dung bài viết, không giới hạn kí tự : nội dung bài viết, không giới hạn kí tự
  • date: ngày viết bài, tự thêm ngày hiện tại khi tạo ra bài viết : ngày viết bài, tự thêm ngày hiện tại khi tạo ra bài viết

Dựa vào thư viện models được hỗ trợ trong Django, Kteam sẽ thiết kế classPost để map với bảng Post như sau:class Post để map với bảng Post như sau:

class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

Ý nghĩa dòng code như sau:

  • Khai báo class Post kế thừa models.Model, là class được viết ra ánh xạ đến bảng trong Database. class Post kế thừa models.Model, là class được viết ra ánh xạ đến bảng trong Database.
  • Khai báo field titleánh xạ đến cột title trong bảng. Field title sẽ thuộc CharField có tham số max_length=100, có nghĩa cột title sẽ lưu trữ kiểu String và dài nhất 100 ký tự. field titleánh xạ đến cột title trong bảng. Field title sẽ thuộc CharField có tham số max_length=100, có nghĩa cột title sẽ lưu trữ kiểu String và dài nhất 100 ký tự.
  • Khai báo field bodyánh xạ đến cột body trong bảng. Field body sẽ thuộc TextField, có nghĩa cột body lưu trữ kiểu String vài không giới hạn độ dài. field bodyánh xạ đến cột body trong bảng. Field body sẽ thuộc TextField, có nghĩa cột body lưu trữ kiểu String vài không giới hạn độ dài.
  • Khai báo field  dateánh xạ đến cột date trong bảng. Field date sẽ có thuộc tính DateTimeField có tham số auto_now_add=True, có nghĩa cột date lưu kiểu Date và tự động thêm ngày hiện tại cho record mới. field  dateánh xạ đến cột date trong bảng. Field date sẽ có thuộc tính DateTimeField có tham số auto_now_add=True, có nghĩa cột date lưu kiểu Date và tự động thêm ngày hiện tại cho record mới.

Migrations là gì?

Migrations là những cách Django kiểm tra sự thay đổi mà bạn đã tác động đến các models (thêm hay xoá model, thêm sửa xoá các field trong models, …) mà bạn muốn nó tác động đến database của bạn. Migrations được thiết kế cách tự động, tuy nhiên bạn nên cần biết để dễ config và chỉnh sửa.là những cách Django kiểm tra sự thay đổi mà bạn đã tác động đến các models (thêm hay xoá model, thêm sửa xoá các field trong models, …) mà bạn muốn nó tác động đến database của bạn. Migrations được thiết kế cách tự động, tuy nhiên bạn nên cần biết để dễ config và chỉnh sửa.

Như hướng dẫn trên, Kteam vừa thiết kế xong model Post, bây giờ chúng ta bắt đầu cho Django tác động đến Database bây giờ.Post, bây giờ chúng ta bắt đầu cho Django tác động đến Database bây giờ.

Như những bài trước có nói về Database, khi bạn mới tạo project Django, Django sẽ mặc định config là database SQLite, là 1 database đơn giản giúp bạn dễ học và dễ làm dự án lúc đầu. Ở file settings.py có dòng code này thể hiện rõ:config là database SQLite, là 1 database đơn giản giúp bạn dễ học và dễ làm dự án lúc đầu. Ở file settings.py có dòng code này thể hiện rõ:

Hướng dẫn python project model - mô hình dự án python

Django hiện tại chỉ có hỗ trợ ORM cho 4 hệ quản trị cơ sở dữ liệu là: SQLite, MySQL, PostgreSQL và Oracle. Nếu bạn muốn đổi sử dụng Database trong nhóm này thì có thể đọc ở link này để tham khảo. SQLite, MySQL, PostgreSQL Oracle. Nếu bạn muốn đổi sử dụng Database trong nhóm này thì có thể đọc ở link này để tham khảo.

Bây giờ, chúng ta sẽ tạo ra file migration cho Database ta đã thiết kế một model Post trong app blog:migration cho Database ta đã thiết kế một model Post trong app blog:

python manage.py makemigrations blog

Lệnh makemigrations để tạo các file migration, ta thêm blog để báo cho Django biết ta vừa thiết kế ở app blog. Nếu không ghi tên app thì Django sẽ quét toàn bộ các app hiện tại.makemigrations để tạo các file migration, ta thêm blog để báo cho Django biết ta vừa thiết kế ở app blog. Nếu không ghi tên app thì Django sẽ quét toàn bộ các app hiện tại.

Hướng dẫn python project model - mô hình dự án python

Sau khi chạy lệnh này, ở folder migrations trong blog đã có 1 file migration đầu tiên:migrations trong blog đã có 1 file migration đầu tiên:

Hướng dẫn python project model - mô hình dự án python

File migration này nhằm xử lý sẽ tác động đến database tạo ra bảng Post. Sau này bạn chỉnh sửa các file models.py thì khi makemigrations sẽ có thêm các file migration, nó như là các file lịch sử bạn đã tác động gì đến database.migration này nhằm xử lý sẽ tác động đến database tạo ra bảng Post. Sau này bạn chỉnh sửa các file models.py thì khi makemigrations sẽ có thêm các file migration, nó như là các file lịch sử bạn đã tác động gì đến database.

Bây giờ, ta cần bắt django chạy các file migration này để nó thực hiện đến database. Ta sẽ chạy lệnh migrate để xem kết quả:

Hướng dẫn python project model - mô hình dự án python

Kết quả nói rằng đã chạy các file migration thành công. Bây giờ ta sẽ mở database xem kết quả như thế nào.migration thành công. Bây giờ ta sẽ mở database xem kết quả như thế nào.

Vì bây giờ Kteam đang sử SQLite, nên Kteam sẽ dùng phần mềm DB Browser for SQLite để mở file db.sqlite3 trong project Django:SQLite, nên Kteam sẽ dùng phần mềm DB Browser for SQLite để mở file db.sqlite3 trong project Django:

Hướng dẫn python project model - mô hình dự án python

Như hình ảnh trên, db.sqlite3 đã thêm 1 bảng là blog_post chính là model Post trong app Blog. Ngoài các cột title, body và date thì có thêm cột id (là id để phân biệt các record, giá trị sẽ tự tăng) đây là cột sẽ bắt buộc có ở mỗi table mà Django đã mặc định trước.db.sqlite3 đã thêm 1 bảng là blog_post chính là model Post trong app Blog. Ngoài các cột title, body và date thì có thêm cột id (là id để phân biệt các record, giá trị sẽ tự tăng) đây là cột sẽ bắt buộc có ở mỗi table mà Django đã mặc định trước.


Kết

Như vậy Kteam đã hướng dẫn các bạn xong cách dùng Model tạo bảng Database trong Python Django.

Ở bài tiếp theo, Kteam sẽ giới thiệu cho các bạn TƯƠNG TÁC DATABASE BẰNG PYTHON

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.Luyện tập – Thử thách – Không ngại khó”.


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.