Hướng dẫn xây dựng webapp đọc truyện bằng Django Framework

MỤC LỤC

Giao diện tổng quát và một số chức năng chính

Một số hàm cơ bản cần dùng cho giao diện trang chủ như getNewView() để lấy danh sách những truyện mới cập nhập. Tương tự ta có một số hàm như getTopView(), getNewChap(), getLoveView() để cung cấp nội dung cho template hiển thị. Phần giao diện được thiết kế bằng html5 + css và có sử dụng thêm bootstrap để chia bố cục cũng như reponsive website để có thể sử dụng trên mọi thiết bị.

Ngoài code html chúng ta còn cần sử dụng một số thẻ trong django template như if, for, để hiển thị được dữ liệu từ server gửi về. Để hiển thị các thuộc tính dữ liệu ta cần phải bỏ trong cặp dấu {{}} để hệ thống nhận diện và in ra dữ liệu lên màn hình.

Mô Hình MVC

    Khả năng dễ đọc của Python, cùng với tính đơn giản, đầy đủ, cho phép lập trình viên tập trung vào các vấn đề phức tạp, logic nghiệp vụ cao mà không tốn thời gian cho những rắc rối đã được người khác giải quyết. Ngoài ra, Django sở hữu khả năng mở rộng tốt, đáp ứng lượng traffic lớn và không cần lo lắng về khả năng scale sản phẩm của mình. - Nhanh: Django được thiết kế để giúp các nhà phát triển đưa các ứng dụng từ ý tưởng đến hoàn thành càng nhanh càng tốt….

    - Có đầy đủ các thư viện/module cần thiết: Django chăm sóc xác thực người dùng, quản lí, nội dung, bản đồ trang web,…. - Tính linh hoạt: Các công ty, tổ chức và chính phủ đã sử dụng Django để xây dựng tất cả mọi thứ - từ hệ thống quản lý nội dung đến mạng xã hội đến nền tảng toán khoa học. Cộng đồng sử dụng Django hiện nay đang phát triển mạnh mẽ, newbie có thể tìm kiếm sự giúp đỡ trên các trang facebook, diễn đàn, blog,.

    Để khởi tạo cơ sở dữ liệu cho app MyTruyen ta vào thư mục Data/models.py và tạo models như sau - đây cũng chính là phần Model trong mô hình MVC. Trong thư mục Data, vào file formRegister.py tạo class PostForm form này được kế thừa từ ModelForm - form mặc định của Django, dùng để pass vào template của trang forum. Trong Controler tạo file ForumView.py chứa các Views để xử lý các request từ người dùng và trả về các Respone tương ứng – đây chính là phần Controller trong mô hình MVC.

    Vì bản thân template forum.html, add_post.html, article_details.html được kết thừa từ lớp ForumView khi đó cần thêm phương thức as_view() để có truy xuất. Trong thư mục templates, tạo thư mục con Forum chứa 3 template là forum.html, article_details.html và add_post.html dùng để render thông tin cần hiển thị cho người dùng với dữ liệu từ các View tương ứng - đây chính là phần View trong mô hình MVC. Khi nhấn vào title của một review sẽ hiện ra trang article_detail.html và có nut Back phía dưới bên trái để quay lại Forum.

    Hình MVC
    Hình MVC

    User Registation and Login Authentication – Đăng ký người dùng và xác thực đăng nhập

    Trong Controler tạo file AuthView.py chứa các Views để xử lý các request từ người dùng và trả về các Respone tương ứng. Trong thư mục templates, tạo thư mục con Auth chứa 2 template là loginPage.html và registerPage.html dùng để render thông tin cần hiển thị cho người dùng với dữ liệu từ các View tương ứng.

    Password Change and Edit Infor Account– Đổi mật khẩu tài khoản và chỉnh sửa thông tin tài khoản

    Trong thư mục templates, tạo thư mục con registration chứa 2 template là change- password.html và edit_account.html dùng để render thông tin cần hiển thị cho người dùng với dữ liệu từ các View tương ứng.

    Profile Page and Edit Profile Page– Trang cá nhân và trang chỉnh sửa trang cá nhân

    Trong Controler tạo file ProfileView.py chứa các Views để xử lý các request từ người dùng và trả về các Respone tương ứng.

    Model trong Django

    Lý thuyết về Model trong Django Model là gì ?

    Sau khi đã khai báo trong file settings.py, bạn phải chạy 2 lệnh là manage.py makemigrations để bảo Django là bạn đã thay đổi cái gì đó trong cấu trúc cơ sở dữ liệu, sau đó là lệnh manage.py migrate để thực hiện cập nhật lại cơ sở dữ liệu. Các trường ( Field ): Thành phần quan trọng và cũng là thành phần bắt buộc phải có trong một model là danh sách các trường hay các thuộc tính của một lớp. Mỗi trường phải là một đối tượng kế thừa từ lớp Field, đây là một lớp ảo trong Django.

    Các lớp Field sẽ cho Django biết kiểu dữ liệu của các cột trong bảng (chẳng hạn như INTEGER, VARCHAR, TEXT). Ví dụ lớp CharField nhận tham số max_length để biết số lượng kí tự sẽ được dùng trong cột VARCHAR trong CSDL, đây là tham số bắt buộc phải có. Vẫn còn rất nhiều tham số khác nhưng ở đây tôi chỉ giỏi thiệu các tham số sẽ dùng trong bài làm của mình.

    Sau khi chúng ta đã tạo các lớp model, Django sẽ tự động tạo các phương thức mới trong model đó cho phép bạn thao tác với cơ sở dữ liệu, bạn có thể tạo, sửa, xóa, cập nhật dữ liệu. Mỗi bản ghi hay mỗi dòng trong từng bảng cơ sở dữ liệu sẽ tương ứng với một đối tượng cụ thể. Để tạo một bản ghi trong cơ sở dữ liệu thì chúng ta chỉ cần tạo một đối tượng tương ứng với trong Python rồi gọi phương thức save() là xong.

    Đoạn code trên sẽ thực hiện câu lệnh INSERT, bạn phải gọi phương thức save() thì dữ liệu mới được cập nhật lên cơ sở dữ liệu. Bạn có thể thay đổi giá trị của các đối tượng trong Python rồi chỉ cần gọi phương thức save() là Django sẽ cập nhật mới trong cơ sở dữ liệu. Còn nhiều vấn đề liên quan đến Model trong Django nhưng trong phạm vi của bài viết này và việc áp dụng vào bài làm của mình thì chúng tôi chỉ giới thiệu sơ qua đến đây.

    Áp dụng vào Project

    Tham số này cho Django biết sẽ dùng giá trị NULL thay cho các bản ghi có giá trị rỗng.  primary_key: True hoặc False, chỉ định trường đó có phải là khóa chính hay không. Truyen : Với các thuộc tính như Idtruyen, tentruyen, tacgia, nguon, trangthai, luotxem,anh,..cùng các kiểu tương ứng như CharField, BooleanField, IntegerField, ImageField,….

    Theloai : Thể loại của truyện, bao gồm các thuộc tính như Idtheloai (ID của thể loại), tentheloai (tên thể loại, ví dụ như : Kiếm hiệp, ngôn tình, cổ tích,…). Chaptruyen : Chương, phần của truyện, với các thuộc tính như : chap (kiểu IntegerField), tenchap (tên chương, ví dụ như : Chương mở đầu, chương kết thúc,.), noidung (nội dung của chương), thoigian (thời gian tạo chương). Checktheloai : Thực hiện việc xác định từng truyện sẽ thuộc thể loại nào.Với các thuộc tính IDtheloai,IDtruyen.

    Thedoi : Theo dừi, dựng để thực hiện cho việc độc giả sẽ theo dừi cỏc truyện mà họ quan tâm.Với các thuộc tính là user và IDtruyen.

    Trang Admin trong Django

    Tìm hiểu cơ bản về hệ thống Admin trong Django Hệ thống Admin

    Truy cập trang admin : Để truy cập vào trang admin thì bạn chỉ cần thêm /admin vào đường dẫn trang chủ là được. Mặc định tại trang admin chúng ta có thể thao tác với 2 bảng là User và Group. Để đăng ký các bảng (hay các mô hình) với admin thì chúng ta chỉ cần dùng phương thức admin.site.register() trong file admin.py mà Django đã tạo cho chúng ta.

    Sau khi đã đăng kí xong thì 2 bảng Question và Choice sẽ hiện ra trong giao diện admin. Khi chúng ta đăng ký các lớp model Question và Choice bằng hàm admin.site.register(), Django sẽ dựa vào các thuộc tính mà chúng ta khai báo trong các lớp đó để hiển thị form trên trang admin. Chúng ta có thể quy định Django chỉ chọn một số thuộc tính được phép hiện ra để chỉnh sửa, thay vì hiện ra hết.

    Dự kiến sẽ trả về một trong hai None hoặc một list hoặc tuple các tên trường trên danh sách thay đổi sẽ được liên kết với chế độ xem thay đổi. Còn nhiều vấn đề liên quan đến ModelAdmin methods trong Django nhưng trong phạm vi của bài viết này và việc áp dụng vào bài làm của mình thì chúng tôi chỉ giới thiệu sơ qua đến đây.

    Áp dụng Admin vào Project

    Django admin interface : Django cung cấp giao diện quản trị mặc định có thể được sử dụng để thực hiện các thao tác tạo, đọc, cập nhật và xóa trực tiếp trên mô hình. Nó đọc tập hợp dữ liệu giải thích và cung cấp thông tin về dữ liệu từ mô hình, để cung cấp giao diện tức thì, nơi người dùng có thể điều chỉnh nội dung của ứng dụng. Thực hiện thêm các đoạn code sau để cấu hình trong file setting.py : Import các thư viện hỗ trợ.

    Trang thay đổi : tại đây chúng ta có thể dễ dàng tùy chỉnh giao diện trang admin một cách dễ dàng. Sau khi thiết lập xong hãy chọn ACTIVE và load lại trang để xem thành quả.