Chuyển đến nội dung chính

Phát triển Web với Django trong Python

Tìm hiểu các kiến thức cơ bản về phát triển web bằng Django để xây dựng ứng dụng blog có chức năng CRUD (Create, Read, Update, Delete).
· 12 phút đọc

Khám phá cùng AI

Django là một framework phát triển web miễn phí, mã nguồn mở và cấp cao được sử dụng rộng rãi. Nó cung cấp nhiều tính năng “có sẵn” cho nhà phát triển, giúp quá trình phát triển diễn ra nhanh chóng. Tuy vậy, các website xây dựng bằng Django vẫn đảm bảo an toàn, khả năng mở rộng và dễ bảo trì.

Mục tiêu

Mục tiêu của hướng dẫn này là xây dựng một ứng dụng blog, trong đó nội dung blog có thể được tạo và cập nhật thông qua bảng điều khiển quản trị. Nội dung blog được hiển thị trên trang và có thể xóa khi cần. Toàn bộ ứng dụng cung cấp chức năng CRUD (Create, Read, Update, Delete).

Hướng dẫn này không sử dụng các công nghệ FrontEnd như Javascript, CSS, v.v., mà tập trung vào các khái niệm cơ bản nhưng thiết yếu cần có trong mọi dự án Web với Django.

Thiết lập cần thiết

  1. Git Bash: Người dùng của mọi hệ điều hành đều có thể sử dụng. Tất cả lệnh liên quan đến Django và lệnh Unix sẽ được thực hiện qua công cụ này. Để tải Git Bash: Click Me.
  2. Trình soạn thảo văn bản: Có thể dùng bất kỳ trình soạn thảo nào như Sublime Text hoặc Visual Studio Code. Trong dự án sau đây, sử dụng Sublime Text.
  3. Python 3: Tải phiên bản mới nhất của Python tại Download Python.

Lưu ý: Bạn có thể dễ dàng theo dõi hướng dẫn này nếu hiểu các kiến thức cơ bản về Python và biết về vòng lặp, hàm, lớp, v.v., cùng với một chút kiến thức về bash hoặc dòng lệnh.

Môi trường ảo (Virtual Environment)

Môi trường ảo đóng vai trò quản lý phụ thuộc cho các dự án liên quan đến Python. Nó hoạt động như một vùng chứa độc lập, nơi các gói Python và phiên bản cần thiết cho một dự án cụ thể được cài đặt. Vì các phiên bản mới của Python, Django hoặc các gói sẽ liên tục phát hành, nên nhờ Môi trường ảo bạn có thể làm việc với các phiên bản cũ phù hợp với dự án của mình. Tóm lại, bạn có thể bắt đầu một dự án độc lập dùng Django phiên bản 2.0 trong khi một dự án độc lập khác dùng Django 3.0 cũng chạy trên cùng máy tính.

Lưu ý: Có nhiều cách tạo Môi trường ảo, nhưng dưới đây chỉ trình bày một cách.

Các bước tạo Môi trường ảo

  1. Bạn có thể tạo thư mục mới tên 'project-blog' bằng lệnh 'mkdir' trên Desktop.
  2. Chuyển vào thư mục 'project-blog' bằng lệnh 'cd'.
    Steps to Create a Virtual Environment

  3. Tạo môi trường ảo bằng lệnh 'python -m venv env', trong đó env là môi trường ảo của chúng ta, có thể kiểm tra bằng lệnh 'ls'.
    Steps to Create a Virtual Environment

  4. Kích hoạt Môi trường ảo: Kích hoạt bằng lệnh 'source', trong đó thư mục 'Scripts' cần được bật/ kích hoạt.
    Steps to Create a Virtual Environment
    Nếu kích hoạt thành công, 'env' sẽ hiển thị trong ngoặc đơn.

  5. Cài đặt Django: Dùng 'pip install django' để cài Django trong Môi trường ảo của bạn.
    Steps to Create a Virtual Environment

Lưu ý: Người dùng Linux và Mac cần dùng cụ thể 'python3' trong lệnh vì Python phiên bản 2 thường đã được cài sẵn trên máy. Ngoài ra, hiện nay nên dùng phiên bản 3, vì Python đã ngừng hỗ trợ phiên bản 2 sau năm 2020.

Tạo một dự án Django

  1. Bước đầu tiên là tạo dự án bằng lệnh 'django-admin startproject project_name', trong đó 'project_name' ở đây là 'django_blog'. Lệnh này sẽ tạo nhiều tệp bên trong dự án mới; bạn có thể tìm hiểu thêm trong tài liệu Django nếu cần.
    Creating a Django Project
  2. Chuyển vào thư mục dự án vừa tạo bằng lệnh 'cd' và dùng 'ls' để xem các tệp đã tạo.
    Creating a Django Project
  3. Bạn có thể chạy dự án bằng 'python manage.py runserver'.
    Creating a Django Project
  4. Có thể xem dự án trong trình duyệt ưa thích (Google Chrome, Mozilla Firefox, v.v.). Mở trình duyệt và gõ 'localhost:8000' hoặc '127.0.0.1:8000' trên thanh địa chỉ như bên dưới.
    Creating a Django Project
    Lưu ý: Để có trang giống như trên, máy chủ trong bash cần đang chạy nền. Bạn có thể dừng máy chủ thủ công khi cần bằng 'Ctr+C' trên Windows/Linux và 'Cmd+C' trên Mac.

Bắt đầu dự án Django mới

Để tạo một dự án mới trong Django, luôn gồm hai bước như sau.

  1. Bước đầu là tạo một app bằng lệnh 'python manage.py startapp app_name', trong đó app_name ở đây là 'blog'. Trong Django, một dự án có thể có nhiều app, mỗi app đảm nhiệm một chức năng riêng cho dự án.
    Starting the New Project
  2. Bước hai là để dự án biết về app vừa tạo bằng cách chỉnh sửa phần INSTALLED_APP trong 'django_blog/settings.py'.
    Starting the New Project

Thay đổi trong Models

Django dùng 'SQLite' làm cơ sở dữ liệu mặc định, nhẹ và phù hợp cho các dự án nhỏ, điều này ổn cho dự án này. Django sử dụng 'Object Relational Mapper (ORM)', giúp làm việc với cơ sở dữ liệu rất dễ dàng. Bạn không viết mã SQL trực tiếp; thay vào đó, các bảng cơ sở dữ liệu được tạo thông qua từ khóa 'class' trong 'models.py'.

Bên trong 'blog/models.py', bạn cần tạo một model mới tên 'Post'. Đây là một lớp sẽ trở thành một bảng trong cơ sở dữ liệu và hiện kế thừa từ 'models.Model'. Như trong một blog tiêu chuẩn, mỗi 'Post' chứa một tiêu đề, sẽ là một trường CharField. Đây là cột dạng văn bản và yêu cầu đối số bắt buộc 'max_length', ở đây là 50. Ngoài ra còn có trường 'content' là TextField, chứa nội dung chi tiết của 'Post' như trong blog. Phương thức kép gạch dưới ('str') được định nghĩa để ghi đè trường 'title' và trả về tên 'title' thực thay vì đối tượng.
Changing in our Models

Tạo migrations

'python manage.py makemigrations' là bước đầu tiên, lệnh sẽ đọc 'models.py' sau khi bạn tạo. Nó tạo một thư mục mới tên 'migrations' với tệp '0001_initial.py', có thể dùng xuyên suốt các hệ quản trị cơ sở dữ liệu.
Changing in our Models

Áp dụng migration vào cơ sở dữ liệu

Đây là bước thứ hai, trong đó 'python manage.py migrate' đọc thư mục 'migrations' vừa tạo, tạo cơ sở dữ liệu và cập nhật khi có thay đổi trong model.
Changing in our Models

Đăng ký với trang quản trị

Chuyển đến 'blog/admin.py' và import model 'Post' bằng 'from .models import Post'. Để đăng ký model với trang quản trị, dùng lệnh 'admin.site.register(Post)'.


Changing in our Models

Tạo SuperUser và xem trong bảng điều khiển quản trị

Bạn cần tạo SuperUser trước khi truy cập trang 'admin'. Thực hiện bằng 'winpty python manage.py createsuperuser'.
Changing in our Models
Lưu ý: winpty là lệnh riêng của bash dùng để giao tiếp với các chương trình Console trên Windows.

Chạy máy chủ nền trong bash bằng lệnh python manage.py runserver. Mở trình duyệt và nhập URL sau.

Sau đó điền thông tin của bạn, tức tên người dùng và mật khẩu đã tạo trước đó:
Changing in our Models
Xem bảng điều khiển quản trị với model 'Post' vừa tạo.
Changing in our Models
Thay đổi nội dung của 'Post' bằng cách nhấn nút 'Add'. Điền thông tin và 'Save' lại.
Changing in our Models

Thay đổi trong views và urls

Chuyển đến 'blog/views.py' và chỉnh sửa như bên dưới. Thêm hàm 'blog_list', nhận request. Thực hiện truy vấn để lấy tất cả đối tượng được tạo bằng 'Post.objects.all()' và lưu vào post. Tạo một dictionary mới tên 'context' để truyền đối tượng dưới dạng khóa và lấy trong template 'blog-list.html', thông qua việc trả về phản hồi với render.
Changing in views and urls
Tạo tệp mới tên 'urls.py' trong 'django_blog/blog' và thêm các thay đổi sau. Có import tương đối đến view 'blog_list', đồng thời có 'urlpatterns' là danh sách các đường dẫn đến trang cụ thể trên website. Hiện tại, phần <b'path' chứa chuỗi rỗng và tên của view.
Changing in views and urls
Chuyển đến 'django_blog/urls.py', import include và chỉnh sửa 'urlpatterns'. Thêm đường dẫn đến URLs của app thông qua include. Khi người dùng truy cập 'posts/', họ sẽ được chuyển đến 'blog.urls.'

Tạo và chỉnh sửa Templates

Tạo thư mục templates, nơi lưu các tệp 'HTML' và dùng ngôn ngữ template riêng tên 'Jinja2'. Thư mục cần đặt theo quy ước 'templates/blog/blog_list.html'.
Making and Changing the Templates
Như bên dưới, có cú pháp liên quan đến 'HyperTextMarkup Language (HTML) với 'h1' cho tiêu đề lớn và danh sách không thứ tự (ul) với phần tử danh sách li. Đồng thời, dùng cú pháp vòng lặp 'for' của 'Jinja 2' để lặp qua đối tượng 'blog_list' được truyền làm khóa từ 'blog/views.py', mỗi phần tử gọi là 'list'.
Making and Changing the Templates
Xem 'title' có tên 'First Post' trên trang web.
Making and Changing the Templates
Hãy thêm một mục nữa trong trang quản trị như trên và đặt title cho bài thứ hai là 'Second Post.'
Making and Changing the Templates
Sau khi thêm và tải lại trang chủ, thông tin sẽ được cập nhật.
Making and Changing the Templates

Chi tiết cho từng bài viết

Bạn sẽ tạo trang riêng cho từng bài, chứa thông tin về tiêu đề và nội dung của bài đó. 'url' sẽ là "localhost:8000/posts/'id'" trong đó id là số duy nhất hoặc khóa chính gắn với mỗi 'Post' do Django cấp.
Hãy tạo hàm 'blog_detail' trong 'blog/view.py' , nhận id làm tham số. Đồng thời thực hiện truy vấn để lấy đúng id và lưu vào 'each_post'. Tương tự như trên, thông tin cần thiết được truyền làm context đến 'blog_detail.html'.
Details for Each Individual post
URL trong 'blog/urls.py' được thay đổi, trong đó path chứa '<id>' để nhận id duy nhất dạng số nguyên. Giả sử người dùng truy cập 'posts/' sẽ thấy tất cả bài viết, còn khi vào 'posts/1' chỉ thấy thông tin của bài viết đầu tiên.
Details for Each Individual post
Tạo tệp mới 'blog/blog_detail.html' và thực hiện các thay đổi sau. Vì blog_detail được truyền trong context, 'title' và 'content' có thể truy cập bằng ký pháp dấu chấm.
Details for Each Individual post
Mở URL trong trình duyệt và nhập tương tự để xem từng bài viết. Do 'id' của mục đầu tiên là '1', mục thứ hai là '2' và cứ thế cho các mục mới.
Details for Each Individual post

Xóa bài viết

Định nghĩa blog_delete, nhận request và id. Thực hiện truy vấn 'Post.objects.get(id=id)' để lấy đối tượng có id duy nhất và lưu vào each_post. Sau đó gọi 'each_post.delete()' để xóa 'Post'. Cuối cùng import HttpResponseRedirect từ module 'django.http' để chuyển hướng trang về '/posts/'
Deleting the Post
. Trong 'urls.py', import 'blog_delete' và đặt path là '<id>/delete', trong đó id kèm từ delete ở cuối sẽ xóa đối tượng hoặc thông tin tương ứng.
Deleting the Post
Hãy xóa bài viết bằng cách gõ như sau trong 'urls.py'.
Deleting the Post
Cuối cùng, trang sẽ được chuyển hướng về '/posts' khi gọi 'posts/1/delete/' trong trường hợp trên trang chủ chỉ có một bài.
Deleting the Post

Kết luận

Chúc mừng bạn đã hoàn thành hướng dẫn! Bạn đã học các kiến thức cơ bản về phát triển Web với Django và hiểu chức năng CRUD. Để biết thêm chi tiết về các chủ đề cụ thể, hãy truy cập Tài liệu Django.

Tài liệu tham khảo:

Câu hỏi thường gặp về Phát triển Web với Django trong Python

Django là gì?

Django là một framework web miễn phí và mã nguồn mở được viết bằng Python, tuân theo mô hình kiến trúc model-template-view. Nó được thiết kế để giúp nhà phát triển đưa ứng dụng từ ý tưởng đến hoàn thiện nhanh nhất có thể.

Những tính năng nào của Django?

Một số tính năng của Django gồm thiết kế nhẹ, mô-đun; ORM (Object-Relational Mapper) mạnh mẽ giúp đơn giản hóa tương tác cơ sở dữ liệu; và hỗ trợ sẵn cho các tác vụ phát triển web phổ biến như xác thực và quản lý người dùng, xử lý form, và quản trị nội dung.

Làm thế nào để bắt đầu với Django?

Để bắt đầu với Django, bạn cần cài đặt Python và thư viện Django trên máy. Sau đó, bạn có thể tạo một dự án Django mới bằng lệnh django-admin startproject và bắt đầu xây dựng ứng dụng bằng các tính năng và công cụ dựng sẵn của Django.

Làm sao để tạo cơ sở dữ liệu trong Django?

Mặc định, Django sử dụng SQLite, đi kèm với Python. Bạn có thể tạo cơ sở dữ liệu mới bằng cách định nghĩa các model trong app Django và chạy lệnh migrate. Lệnh này sẽ tạo các bảng cần thiết trong cơ sở dữ liệu để lưu dữ liệu cho các model của bạn.

Làm sao để tạo views và templates trong Django?

Trong Django, view là các hàm xử lý HTTP request và trả về HTTP response. Bạn có thể tạo view bằng cách định nghĩa các hàm trong app Django, nhận request và trả về response. Template là các tệp HTML có chứa placeholder cho nội dung động. Bạn có thể dùng ngôn ngữ template của Django để chèn nội dung động vào template và render trong view.

Triển khai ứng dụng Django như thế nào?

Có nhiều cách triển khai (deploy) ứng dụng Django, tùy nhu cầu và sở thích lưu trữ. Một số lựa chọn phổ biến gồm triển khai lên nền tảng đám mây như Heroku hoặc AWS, dùng web server như Apache hoặc Nginx, hoặc dùng dịch vụ lưu trữ như PythonAnywhere hay DigitalOcean.

Chủ đề

Liên quan