Xử lý lỗi 404 trong Python Django

Lập trình web với Python bằng Django

4.0 (3 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 3 năm trước 27.130 lượt xem 7 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

Xử lý lỗi 404 trong Python Django

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.

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é! 

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


Dẫn nhập

Ở bài trước, Kteam đã hướng dẫn các bạn xong cách LOẠI BỎ HARDCODED URL TRONG PYTHON DJANGO.

Trong bài này Kteam sẽ hướng dẫn cho các bạn cách xử lý lỗi 404 trong Python Django.


Nội dung

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

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

  • Lỗi 404 là gì?
  • Cách trả lỗi 404
  • Custom template 404

Lỗi 404 là gì?

Lỗi 404 trong HTTP là không tìm ra được đường dẫn url. Ví dụ Kteam thử nhập 1 đường dẫn không tồn tại

Django sẽ tự trả về lỗi 404 cho mình. Tuy nhiên ta sẽ gặp vấn đề như sau, ở đường dẫn bài viết mình thử vô một url có id bài viết không tồn tại

Mặc dù đường dẫn url mình nhập vào vẫn đúng theo quy tắc đặt path.Tuy nhiên, hiện tại Blog của mình chỉ có 2 bài viết, nên ở đường dẫn có bài viết id = 12 nó sẽ tạo ra bug ở câu truy vấn. Ta cần phải xử lý ở đây phải trả về 404, không thể quăng lỗi kiểu này cho người dùng được.


Cách trả lỗi 404

Vậy ta để xử lý khi xử lý ở Post với id không tồn tại, Kteam sẽ dùng thêm exception 404 của Django. Ở views.py trong app blog

Sau đó ta thay câu truy vấn như sau


Custom template 404

Ở template 404 hiện tại là hiển thị ở chế độ Debug để giúp dân lập trình có thể biết nguyên nhân và tìm ra bug. Còn chúng ta hãy thử xem template 404 ở người dùng

Nhìn nó khá là bình thường, bây giờ Kteam sẽ tạo template mới xử lý 404. Ở template app home, ta tạo thêm 1 template error.html như sau:

Ta sẽ override hàm xử lý 404 như sau, ở views.py trong app home:

urls.py tổng, ta thực hiện như sau:

Để hiển thị template này, ta phải tắt chế độ Debug, ta qua setting chuyển biến DEBUG thành false, đồng thời khai báo host cho phép ở server thật. Kteam sẽ đưa kí tự ‘*’ để báo Django là bất kì host nào cũng chấp nhận:

Ta sẽ xem kết quả:


Kết

Như vậy Kteam đã hướng dẫn các bạn xong cách xử lý lỗi 404 trong Python Django.

Ở bài tiếp theo, Kteam sẽ giới thiệu cho các bạn DJANGO SỬ DỤNG MÔ HÌNH MVC.

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ó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Xử lý lỗi 404 trong Python Django dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


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.

Tác giả/Dịch giả

Khóa học

Lập trình web với Python bằng Django

Lập trình web với Python bằng Django

Đánh giá

4.0
3 đánh giá
Đánh giá
5
1
4
1
3
1
2
1
hau.vuvan.0110 đã đánh giá 4 năm trước

HuyIT đã đánh giá 5 năm trước

tuanna đã đánh giá 5 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
qkhanhnguyen đã bình luận 5 năm trước

nếu dùng: 

def post(request, id):
    try:
        post = Post.objects.get(id=id)
    except Post.DoesNotExist:
        raise Http404("Bài viết không tồn tại")
    
    return render(request, 'blog/post.html', {'post': post})

VSCode: Class 'Post' has no 'DoesNotExist' member 

nếu dùng code trên phải fix thế nào mọi người?

dangdinhchung đã bình luận 5 năm trước

a cho e hỏi ở chỗ :  urls.py tổng

handler404 = 'home.views.error' mình chưa import thì xao hiểu được anh nhỉ, e đang bị error chỗ đó anh ạ

?: (urls.E007) The custom handler404 view 'home.views.error' does not take the correct number of arguments (request, exception).

 

Không có video.