Hiện nay có rất nhiều framework mạnh mẽ giúp chúng ta xây dựng website với nhiều tính năng một cách nhanh chóng. Một trong số đó là Django mà mình muốn giới thiệu hôm nay.
{index}
Django là gì?
Django là phần mềm bạn có thể sử dụng để phát triển các ứng dụng web một cách nhanh chóng và hiệu quả. Hầu hết các ứng dụng web có một số chức năng phổ biến, như xác thực, truy xuất thông tin từ cơ sở dữ liệu và quản lý cookie. Các nhà phát triển phải viết mã cho chức năng tương tự vào mọi ứng dụng web mà họ viết. Django giúp họ làm việc dễ dàng hơn bằng cách nhóm các chức năng khác nhau thành một tập hợp lớn các mô-đun có thể tái sử dụng, được gọi là một khung ứng dụng web. Các nhà phát triển sử dụng khung web Django để sắp xếp và viết mã của họ hiệu quả hơn và giảm đáng kể thời gian phát triển web.
Tại sao các nhà phát triển web chọn Django?
Có một số khung web trên thị trường. Django được viết bằng ngôn ngữ Python và là một trong nhiều khung web Python. Tuy nhiên, các nhà phát triển thường ưu ái khung web Django hơn so với những khung web khác vì các lý do sau.
Tốc độ phát triển
Khung Django có cấu trúc hợp lý và dễ cài đặt cũng như học hỏi, vì vậy, bạn có thể bắt đầu sử dụng trong vòng vài giờ. Những nhà thiết kế Django đã tạo ra khung để nhanh chóng triển khai bất kỳ kiến trúc web nào bằng mã. Nhờ có khung hỗ trợ, quá trình phát triển diễn ra nhanh chóng và thiết kế nhìn gọn ghẽ, thực tiễn. Bạn có thể viết mã chỉ bằng vài dòng vì Django cung cấp cấu trúc sẵn sàng sử dụng cho một số tác vụ phát triển web phổ biến, chẳng hạn như:
- Xác thực người dùng
- Quản trị nội dung
- Sơ đồ trang web
- Nguồn cấp dữ liệu RSS
Tiết kiệm chi phí
Django là một dự án Python miễn phí và nguồn mở với một cộng đồng hoạt động tích cực trong việc đánh giá và bảo trì phần mềm. Django Software Foundation là tổ chức phi lợi nhuận thúc đẩy và hỗ trợ việc sử dụng cũng như duy trì Django. Tổ chức này tổ chức các buổi gặp mặt, hội họp và sự kiện cộng đồng thường xuyên nhằm khuyến khích những nhà phát triển khác đánh giá và đóng góp cho dự án Django. Qua đó, khung web thu được có chất lượng cao với tính năng phong phú, miễn phí.
Phổ biến
Hàng nghìn dự án nguồn mở và trang web tầm cỡ sử dụng Django như:
- Mozilla Firefox
- National Geographic
Vì được sử dụng phổ biến, khung không ngừng phát triển và có cơ sở hạ tầng hỗ trợ vững chắc. Một lượng lớn các cá nhân và công ty cung cấp gói hỗ trợ miễn phí và có trả phí cho bất kỳ thách thức nào trong quá trình phát triển mà bạn có thể đối mặt khi đang sử dụng Django.
Django hoạt động như thế nào?
Bất kỳ ứng dụng web nào cũng đều được cấu tạo từ hai phần: mã máy chủ và mã máy khách. Khách thể hoặc đối tượng truy cập trang web có trình duyệt. Khi nhập URL vào trình duyệt của mình, họ sẽ gửi một yêu cầu tới máy chủ web chứa ứng dụng web đang chạy. Các máy chủ xử lý yêu cầu bằng cách sử dụng cơ sở dữ liệu và gửi thông tin ngược về máy khách dưới dạng phản hồi. Mã máy khách hiển thị thông tin cho đối tượng truy cập dưới dạng trang web.
Django quản lý mã cho hệ thống yêu cầu và phản hồi này bằng cách sử dụng kiến trúc Mô hình-Khung nhìn-Mẫu (MVT).
Model
Các mô hình Django đóng vai trò là giao diện giữa cơ sở dữ liệu và mã máy chủ. Chúng là nguồn thông tin chính xác duy nhất về dữ liệu của bạn. Những mô hình dữ liệu này chứa các trường và thao tác thiết yếu mà bạn cần có để tương tác với cơ sở dữ liệu của mình. Do đó, các mô hình Django chuyển đổi bảng cơ sở dữ liệu của bạn thành lớp hoặc đối tượng trong mã Python. Quá trình này được gọi là ánh xạ quan hệ đối tượng.
Nói chung, mỗi mô hình ánh xạ tới một bảng cơ sở dữ liệu duy nhất và có các thuộc tính đại diện cho các trường cơ sở dữ liệu. Ví dụ: nếu trang web của bạn bao gồm các chi tiết về nhân viên thì có thể được biểu diễn dưới dạng:
- Một bảng nhân viên có tên các nhân viên và trường địa chỉ.
- Một mô hình nhân viên gọi là Class Employee (Lớp nhân viên), trong đó có hai thuộc tính hay trường mô hình gọi là Name (Tên) và Address (Địa chỉ).
Chế độ xem
Khung nhìn của Django sử dụng các mô hình để xử lý yêu cầu. Bạn có thể viết hàm khung nhìn cho từng loại yêu cầu mà đối tượng truy cập trang web có thể thực hiện đối với trang web của bạn. Hàm khung nhìn có thể lấy yêu cầu làm dữ liệu đầu vào và trả về phản hồi. Phản hồi có thể là mã lỗi, hình ảnh, tệp hoặc bất kỳ loại dữ liệu nào.
Django có tính năng trình ánh xạ URL hoặc trình điều phối URL, đóng vai trò ánh xạ hàm khung nhìn với URL của bạn. Bạn phải tạo tệp trình ánh xạ URL để viết các mẫu URL tại đó như nội dung bên dưới.
urlpatterns = [
path('employee/name', views.employee_name),
path('employee/<int:year>/', views.year_archive),
]
Ví dụ: nếu bạn muốn đối tượng truy cập trang web của mình xem danh sách gồm tất cả các nhân viên của bạn trong một năm cụ thể, vậy thì, bạn cần thiết lập đường dẫn URL employee/year number và viết hàm khung nhìn tương ứng của Django year_archive. Khi đối tượng truy cập trang web của bạn nhập “yourwebsitename.com/employee/2020” vào trình duyệt của họ, sau đây là những bước sẽ diễn ra:
- Yêu cầu đến ứng dụng web của bạn.
- Khung web Django lấy số chỉ năm và tên hàm khung nhìn từ trình ánh xạ URL.
- Khung này chạy hàm khung nhìn year_archive cho năm 2020.
- Year_archive sử dụng mô hình nhân viên để lấy tất cả dữ liệu nhân viên từ cơ sở dữ liệu trong năm 2020.
- Khung web Django gửi trả dữ liệu dưới dạng phản hồi.
Mẫu
Các mẫu Django quản lý cách trình bày trang web trong trình duyệt. Vì hầu hết các trang web đều sử dụng Ngôn ngữ đánh dấu siêu văn bản (HTML), bạn có thể viết mã mẫu Django theo cách tương tự như HTML. Tệp mẫu chứa một số thành phần nhất định:
- Các phần tĩnh của đầu ra HTML cuối cùng, chẳng hạn như hình ảnh, nút và tiêu đề.
- Cú pháp đặc biệt mô tả cách chèn nội dung hoặc dữ liệu động, thay đổi theo mọi yêu cầu.
Sau đây là những thành phần cấu tạo nên hệ thống mẫu Django.
Ngôn ngữ mẫu
Ngôn ngữ mẫu là ngôn ngữ lập trình mà bạn sử dụng để viết mã mẫu HTML. Django hỗ trợ Ngôn ngữ mẫu Django của riêng mình và một lựa chọn thay thế phổ biến gọi là Jinja2.
Công cụ mẫu
Công cụ mẫu xử lý các tệp mẫu và tạo đầu ra HTML cuối cùng. Công cụ này bao gồm dữ liệu từ phản hồi nằm trong đầu ra này.
Ví dụ: khi đối tượng truy cập trang web của bạn yêu cầu thông tin nhân viên, mẫu Django của bạn sẽ điền các mục sau vào trang web hiển thị với đối tượng truy cập: tiêu đề trang web của bạn, một bảng chứa tên và địa chỉ của tất cả nhân viên và một nút chọn Next (Tiếp theo).
Bạn có thể sử dụng những mô-đun nào khác trong Django?
Mặc dù kiến trúc Mô hình-Khung nhìn-Mẫu (MVT) xác định cấu trúc cơ bản của bất kỳ ứng dụng nào, Django có một số mô-đun khác để nâng cao trang web của bạn. Sau đây là một vài ví dụ chúng tôi đưa ra.
Biểu mẫu
Hầu hết các trang web cần có biểu mẫu để thực hiện các tác vụ như đăng ký và thanh toán hoặc thu thập thông tin từ đối tượng truy cập trang web. Django cung cấp nhiều công cụ và thư viện mà bạn có thể sử dụng để quản lý biểu mẫu trang web của mình. Django có thể đơn giản hóa và tự động hóa quá trình xử lý biểu mẫu và đảm bảo khả năng bảo mật cao hơn nhiều so với việc tự bạn viết mã.
Django quản lý quá trình xử lý biểu mẫu theo ba cách:
- Tạo biểu mẫu bằng cách chuẩn bị và tái cấu trúc dữ liệu để hiển thị
- Xác thực biểu mẫu bằng cách kiểm tra các biểu mẫu HTML ở phía máy khách
- Xử lý biểu mẫu bằng cách nhận dữ liệu đã gửi
Xác thực người dùng
Các trang web đương thời phải xác thực và cấp quyền cho người dùng. Xác thực tức là xác minh danh tính người dùng và cấp quyền là quá trình quyết định người dùng được xác thực có thể thực hiện hoạt động nào trên trang web. Django có thể quản lý quá trình xác thực, phục vụ nhiều mục đích sử dụng khác nhau.
- Tài khoản người dùng
- Các quyền và cờ có hoặc không cho phép người dùng thực hiện những tác vụ nhất định trên trang web
- Nhóm gồm tài khoản nhiều người dùng có quyền tương tự nhau
- Phiên người dùng dựa trên cookie
Django cũng cung cấp hệ thống băm mật khẩu có thể cấu hình được và các công cụ để hạn chế nội dung trong biểu mẫu và khung nhìn.
Quản trị trang web
Trang quản trị Django giúp bạn dễ dàng cung cấp trang quản trị cho trang web của mình. Quản trị viên trang web có thể sử dụng trang để tạo, chỉnh sửa hoặc xem các mô hình dữ liệu trên trang web của bạn.
Django có cứng nhắc không?
Chúng tôi gọi các khung web một cách không chính thức là “cứng nhắc” khi chúng buộc các nhà phát triển web tuân thủ một quy trình. Các khung web sở hữu một quan điểm hoặc cách hợp lý mà người phát triển phải hoàn thành những nhiệm vụ nhất định. Ví dụ: khung cứng nhắc thường hỗ trợ các ngành cụ thể phát triển hiệu quả bằng cách lưu giữ tài liệu chi tiết cho các tác vụ ứng dụng liên quan đến ngành đó.
Mặt khác, các khung không cứng nhắc ít bị hạn chế hơn về cách bạn có thể tích hợp các thành phần khác nhau của kiến trúc Mô hình-Khung nhìn-Mẫu (MVT) với nhau. Mặc dù linh hoạt hơn, những khung không cứng nhắc khiến tổ chức mã trở nên phức tạp vì các nhà phát triển khác nhau có thể sử dụng nhiều cách tiếp cận đa dạng cho cùng một tác vụ.
Django có phần hơi cứng nhắc. Django cung cấp nhiều thành phần đa dạng và bao gồm tài liệu về cách xử lý nhiều loại tác vụ phát triển web khác nhau. Các nhà phát triển có thể sử dụng kiến trúc tách biệt của Django để chọn trong một loạt các phương án, đồng thời, kiến trúc này thậm chí còn hỗ trợ thêm cho những phương án mới mà họ yêu cầu.
Bảo mật Django là gì?
Tội phạm công nghệ cao thường chọn ứng dụng web làm mục tiêu để truy cập thông tin đăng nhập của người dùng, dữ liệu tài chính và những thông tin nhạy cảm khác. Khung web Django cung cấp một số tính năng bảo vệ các ứng dụng web và người dùng của bạn. Bạn sẽ tránh được nhiều lỗi bảo mật phổ biến bằng cách làm theo những biện pháp thực hành tốt nhất sau đây của Django. Sau đây là một vài ví dụ chúng tôi đưa ra.
Bảo vệ chống chèn tập lệnh liên trang web
Các cuộc tấn công chèn tập lệnh liên trang web (XSS) xảy ra khi tội phạm công nghệ cao chèn mã độc vào trình duyệt của người dùng trang web của bạn. Chúng có thể tấn công người dùng của bạn bằng cách đánh lừa ứng dụng web của bạn theo một số cách như:
- Lưu trữ tập lệnh độc hại trong cơ sở dữ liệu của bạn để máy chủ vô tình gửi đi mã độc trong lần phản hồi tiếp theo.
- Đánh lừa người dùng của bạn nhấp vào liên kết, khiến mã độc của máy khách chạy trong trình duyệt của người dùng thay vì mã của bạn.
Ví dụ: mẫu Django có thể có {{name}}, hiển thị văn bản mà người dùng nhập vào trường tên trong hồ sơ của họ. Tội phạm công nghệ cao chiếm quyền kiểm soát phiên và thay đổi tên thành mã như <script>alert(‘hello’)</script>. Mẫu thay đổi thành {{<script>alert(‘hello’)</script>}}.
Mã này hiện đang chạy trong trình duyệt của người dùng của bạn nên văn bản thông báo “Hello” (Xin chào) bật lên trên màn hình của họ. Mặc dù đây là ví dụ giản lược, bạn có thể thấy cách tội phạm công nghệ cao chèn tập lệnh phức tạp để kiểm soát máy tính của người dùng của bạn.
Django bảo vệ bạn khỏi các cuộc tấn công như vậy bằng cách tự động thoát hoặc bỏ qua các ký tự cụ thể biểu thị mã độc như < và >, loại chúng khỏi đầu vào của người dùng.
Bảo vệ chống truy cập trái phép
Các cuộc tấn công giả mạo yêu cầu liên trang web (CSRF) xảy ra khi tin tặc đánh cắp thông tin chứng thực của người dùng của bạn và gửi yêu cầu trái phép tới ứng dụng web của bạn. Django đã tích hợp biện pháp bảo vệ chống lại hầu hết các loại tấn công CSRF trong mô-đun Django CSRF. Cơ chế hoạt động là gửi một giá trị bí mật cho mọi người dùng trong lần đầu tiên họ đăng nhập.
Các yêu cầu từ máy khách mới bao gồm giá trị bí mật làm bằng chứng rằng máy khách đúng là đối tượng đang khai nhận. Vì chỉ trình duyệt của người dùng được cấp quyền mới nắm được giá trị bí mật, Django có thể tự động từ chối yêu cầu nếu những yêu cầu này đến từ một số máy khác đang giả mạo là người dùng. Bạn phải kích hoạt cài đặt mô-đun Django CSRF để biện pháp bảo vệ hoạt động.
Bảo vệ chống đưa SQL vào
Tội phạm công nghệ cao sử dụng kỹ thuật đưa SQL vào để chèn mã SQL vào cơ sở dữ liệu thông qua các yêu cầu HTTP như POST. Mã độc có thể đánh cắp hoặc xóa dữ liệu chân thực của bạn. Django giải quyết vấn đề này bằng chính thiết kế của nó. Dữ liệu do người dùng gửi, gọi là thông số, được giữ riêng biệt, không chung với truy vấn cơ sở dữ liệu cho đến khi dữ liệu đi tới lớp mô hình. Sau đó, mô hình Django có thể tránh thoát các ký tự nguy hiểm khi đang tạo mã truy vấn.
Bảo vệ nhờ hỗ trợ từ cộng đồng
Biện pháp bảo vệ trong Django vượt xa các tính năng bảo mật tích hợp của nó. Vì Django là khung nguồn mở, nhiều nhà phát triển dày dạn kinh nghiệm sử dụng và đánh giá các mô-đun của Django. Nhờ kiểm thử kỹ lưỡng, độ tin cậy của mã Django tăng lên cũng như phòng ngừa bỏ sót các lỗ hổng bảo mật ngẫu nhiên.
Khả năng điều chỉnh quy mô của Django là gì?
Trong phát triển trang web, khả năng điều chỉnh quy mô đề cập tới khả năng trang web đồng thời xử lý nhiều yêu cầu từ máy khách. Các dự án Django có quy mô rất linh hoạt và có thể xử lý hàng nghìn yêu cầu. Bạn có thể điều chỉnh quy mô ứng dụng Django của mình theo những cách sau.
Phần cứng
Đội ngũ Django đã thiết kế khung web để sử dụng hiệu quả phần cứng trong hệ thống của bạn. Với một kiến trúc không chia sẻ, Django tách biệt các thành phần như lớp cơ sở dữ liệu (các mô hình) và lớp ứng dụng (các khung nhìn). Bạn có thể thêm phần cứng ở bất kỳ cấp độ nào mà không ảnh hưởng tới phần còn lại của hệ thống. Bạn có thể thêm nhiều máy chủ cơ sở dữ liệu hoặc máy chủ ứng dụng vào hệ thống của mình và Django sẽ sử dụng những tài nguyên này một cách hiệu quả để quản lý nhiều đối tượng truy cập.
Lưu bộ nhớ đệm
Lưu bộ nhớ đệm là quá trình lưu một số dữ liệu của trang web trên máy chủ phía khách hoặc trên các máy chủ trung gian để ứng dụng Django của bạn có thể xử lý yêu cầu nhanh hơn, qua đó tăng quy mô. Django cung cấp một hệ thống lưu bộ nhớ đệm mạnh mẽ với các cấp độ lưu bộ nhớ đệm khác nhau:
- Bạn có thể lưu toàn bộ trang web của mình vào bộ nhớ đệm.
- Bạn có thể lưu đầu ra của hàm khung nhìn cụ thể vào bộ nhớ đệm.
- Bạn có thể lưu nội dung cụ thể mà tốn nhiều thời gian tạo vào bộ nhớ đệm.
Các dự án Django cũng kết hợp hài hòa với các bộ nhớ đệm của bên thứ ba. Bạn có thể viết mã đưa ra gợi ý về những bộ nhớ đệm này và cho bộ nhớ đệm biết phần ứng dụng mà bạn muốn lưu vào bộ nhớ đệm.
AWS có thể hỗ trợ các ứng dụng web Django như thế nào?
AWS Elastic Beanstalk là dịch vụ thân thiện với người dùng trong quá trình triển khai và điều chỉnh quy mô các ứng dụng web cũng như dịch vụ đã được phát triển bằng các công nghệ như Django, Python, Java, .NET, PHP, Node.js, Ruby, Go và Docker trên những máy chủ quen thuộc như Apache, Nginx, Passenger và IIS.
Elastic Beanstalk hỗ trợ các nhà phát triển Django theo những cách sau:
- Bạn tải lên mã Django rồi Elastic Beanstalk tự động xử lý việc triển khai.
- Elastic Beanstalk cung cấp và vận hành hạ tầng và quản lý ngăn xếp ứng dụng (nền tảng) cho bạn, do đó bạn không phải mất thời gian hoặc phát triển kiến thức chuyên môn.
- Elastic Beanstalk tự động tăng và giảm quy mô ứng dụng của bạn dựa trên nhu cầu cụ thể của ứng dụng, thông qua các cài đặt có thể điều chỉnh Auto Scaling (Tự động điều chỉnh quy mô).