Giới thiệu về Django

88 0 0
Tài liệu đã được kiểm tra trùng lặp
Giới thiệu về Django

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

“Khuôn khổ web dành cho những người cầu toàn với thời hạn.” Đó là một khẩu hiệu mô tả chính xác Django, một framework đã tồn tại hơn 10 năm nay. Nó đã được thử nghiệm trong chiến đấu và được sử dụng rộng rãi, với ngày càng nhiều người sử dụng nó mỗi ngày. Tất cả điều này có thể khiến bạn nghĩ rằng Django đã cũ và không còn phù hợp nữa. Ngược lại - tuổi thọ của nó đã chứng minh rằng API của nó đáng tin cậy và nhất quán, và ngay cả những người đã học Django v1.0 năm 2007 cũng có thể viết cùng một mã cho Django 4 ngày nay. Django vẫn đang trong quá trình phát triển tích cực, với các bản sửa lỗi và bản vá bảo mật được phát hành hàng tháng.

Trang 1

1 Giới thiệu về Django

“Khuôn khổ web dành cho những người cầu toàn với thờihạn.” Đó là một khẩu hiệu mô tả chính xác Django, mộtframework đã tồn tại hơn 10 năm nay Nó đã được thử nghiệmtrong chiến đấu và được sử dụng rộng rãi, với ngày càng nhiềungười sử dụng nó mỗi ngày Tất cả điều này có thể khiến bạn nghĩrằng Django đã cũ và không còn phù hợp nữa Ngược lại - tuổi thọcủa nó đã chứng minh rằng API của nó đáng tin cậy và nhất quán,và ngay cả những người đã học Django v1.0 năm 2007 cũng cóthể viết cùng một mã cho Django 4 ngày nay Django vẫn đangtrong quá trình phát triển tích cực, với các bản sửa lỗi và bản vábảo mật được phát hành hàng tháng.

Giống như Python, ngôn ngữ viết ra Django, Django rất dễhọc nhưng đủ mạnh mẽ và linh hoạt để phát triển theo nhu cầucủa bạn Đó là một khung “bao gồm pin” - nói cách khác, bạnkhông cần phải tìm và cài đặt nhiều thư viện hoặc thành phầnkhác để thiết lập và chạy ứng dụng của mình Các khung khác,chẳng hạn như Flask hoặc Pylons, yêu cầu cài đặt thủ công cáckhung của bên thứ ba để kết nối cơ sở dữ liệu hoặc hiển thị mẫu.Thay vào đó, Django có hỗ trợ tích hợp cho truy vấn cơ sở dữ liệu,ánh xạ URL và hiển thị mẫu (chúng tôi sẽ sớm đi sâu vào chi tiếtvề ý nghĩa của những điều này) Tuy nhiên, chỉ vì Django dễ sửdụng không có nghĩa là nó bị hạn chế Django được nhiều trangweb lớn sử dụng, bao gồm Disqus (https://disqus.com/), Instagram(https://www.instagram.com/), Mozilla (https://www.mozilla.org/),Pinterest (https://www.pinterest.com/), OpenStack

Trang 2

(https://www.openstack.org/) và National Geographic(http://www.nationalgeographic.com/).

Django phù hợp với web ở đâu? Khi nói về các khung web,bạn có thể nghĩ đến các khung JavaScript giao diện người dùngnhư ReactJS, Angular hoặc Vue Các khung này được sử dụng đểnâng cao hoặc thêm tính tương tác cho các trang web đã đượctạo Django nằm ở lớp bên dưới các công cụ này và thay vào đóchịu trách nhiệm định tuyến URL, tìm nạp dữ liệu từ cơ sở dữ liệu,hiển thị mẫu và xử lý dữ liệu nhập vào biểu mẫu từ người dùng.Tuy nhiên, điều này không có nghĩa là bạn phải chọn cái này haycái kia; Các khung JavaScript có thể được sử dụng để nâng caođầu ra từ Django hoặc tương tác với API.

Trong cuốn sách này, chúng ta sẽ xây dựng một dự ánDjango bằng cách sử dụng các phương pháp tương tự mà các nhàphát triển Django chuyên nghiệp sử dụng hàng ngày Ứng dụngnày có tên là Bookr và cho phép bạn duyệt và thêm sách cũngnhư đánh giá sách Cuốn sách được chia thành bốn phần Trongphần đầu tiên, chúng ta sẽ bắt đầu với những kiến thức cơ bản vềxây dựng ứng dụng Django, nhanh chóng xây dựng một số trangvà phục vụ chúng với máy chủ phát triển Django Bạn sẽ có thểthêm dữ liệu vào cơ sở dữ liệu bằng trang quản trị Django.RESTdo Django tạo.

Chương này giới thiệu với bạn về Django và vai trò của nótrong phát triển web Bạn sẽ bắt đầu bằng cách hiểu cách hoạtđộng của mô hình mô hình-khung nhìn-mẫu cũng như cáchDjango xử lý các yêu cầu và phản hồi HTTP Được trang bị các

Trang 3

khái niệm cơ bản, bạn sẽ tạo dự án Django đầu tiên của mình cótên Bookr, một ứng dụng để thêm, xem và quản lý các bài đánhgiá sách Đó là một ứng dụng mà bạn sẽ tiếp tục nâng cao và bổsung các tính năng xuyên suốt cuốn sách này Sau đó, bạn sẽ tìmhiểu về lệnh quản lý.py (được sử dụng để sắp xếp các hành độngDjango) Bạn sẽ sử dụng lệnh này để khởi động máy chủ pháttriển Django và kiểm tra xem mã bạn đã viết cho đến nay có hoạtđộng như mong đợi hay không Bạn cũng sẽ học cách làm việc vớiPyCharm, một IDE Python phổ biến mà bạn sẽ sử dụng trong suốtcuốn sách này Bạn sẽ sử dụng nó để viết mã trả về phản hồi chotrình duyệt web của bạn Cuối cùng, bạn sẽ tìm hiểu cách sử dụngtrình gỡ lỗi của PyCharm để khắc phục sự cố với mã của mình.Đến cuối chương này, bạn sẽ có những kỹ năng cần thiết để bắtđầu tạo dự án bằng Django Đến cuối cuốn sách, bạn sẽ có đủkinh nghiệm để thiết kế và xây dựng dự án Django của riêng mìnhtừ đầu đến cuối.

Xây dựng khung sườn cho một dự án và ứng dụng Django

Trước khi đi sâu vào lý thuyết đằng sau mô hình Django vàcác yêu cầu HTTP, chúng tôi sẽ cho bạn thấy việc thiết lập vàchạy một dự án Django dễ dàng như thế nào Sau phần đầu tiênvà bài tập này, bạn sẽ tạo được một dự án Django, gửi yêu cầu tớidự án đó bằng trình duyệt của bạn và xem phản hồi.

Dự án Django là một thư mục chứa tất cả dữ liệu cho dự áncủa bạn – mã, cài đặt, mẫu và nội dung Nó được tạo và dàn dựngbằng cách chạy lệnh django-admin trên dòng lệnh với đối số

Trang 4

startproject và cung cấp tên dự án Ví dụ: để tạo một dự ánDjango có tên myproject, lệnh được chạy như sau:

django-admin startproject myproject

Điều này sẽ tạo thư mục myproject, nơi Django chứa các tệpcần thiết để chạy dự án Bên trong thư mục myproject có hai tệp(thể hiện trong Hình 1.1):

manage.py là tập lệnh Python được thực thi tại dòng lệnh đểtương tác với dự án của bạn Chúng tôi sẽ sử dụng nó để khởiđộng máy chủ phát triển Django, một máy chủ web phát triển màbạn sẽ sử dụng để tương tác với dự án Django trên máy tính cụcbộ của mình Giống như django-admin, các lệnh được truyền vàodòng lệnh Không giống như django-admin, tập lệnh này khôngđược ánh xạ trong đường dẫn hệ thống của bạn, vì vậy chúng tôiphải thực thi nó bằng Python Chúng ta sẽ cần sử dụng dòng lệnhđể làm điều đó Ví dụ: trong thư mục dự án, chúng tôi chạy lệnhsau:

python3 manage.py runserver

Thao tác này chuyển lệnh runserver tới tập lệnh quản lý.pyđể khởi động Máy chủ Django Dev Chúng ta sẽ kiểm tra thêm các

Trang 5

lệnh mà manage.py chấp nhận sau Khi tương tác với manager.pytheo cách này, chúng tôi gọi các lệnh quản lý này Ví dụ: chúngtôi có thể nói rằng chúng tôi đang thực thi lệnh quản lý

Lệnh startproject cũng tạo một thư mục có cùng tên với dựán – trong trường hợp này là myproject Đây là gói Python chứacác cài đặt và một số tệp cấu hình khác mà dự án của bạn cầnchạy Chúng ta sẽ xem xét nội dung của nó sau.

Sau khi bắt đầu dự án Django, việc tiếp theo cần làm là khởiđộng ứng dụng Django Chúng ta nên cố gắng tách dự án Djangocủa mình thành các ứng dụng khác nhau, được nhóm theo chứcnăng Ví dụ với Bookr chúng ta sẽ có ứng dụng đánh giá Điều nàysẽ chứa tất cả các mã, HTML, nội dung và các lớp cơ sở dữ liệu cụthể để làm việc với các bài đánh giá sách Nếu chúng tôi quyếtđịnh mở rộng Bookr để bán sách, chúng tôi có thể thêm một ứngdụng cửa hàng chứa các tệp cho hiệu sách Ứng dụng được tạobằng lệnh quản lý ứng dụng khởi động, chuyển tên ứng dụng Đâylà một ví dụ:

python3 manage.py startapp myapp

Điều này tạo ra thư mục ứng dụng (myapp) bên trong thưmục dự án Django tự động điền vào đây các tệp dành cho ứngdụng đã sẵn sàng để điền vào khi bạn bắt đầu phát triển Chúngta sẽ kiểm tra các tệp này và thảo luận về điều gì tạo nên mộtứng dụng tốt trong phần ứng dụng Django.

Bây giờ chúng tôi đã giới thiệu các lệnh cơ bản để xây dựngmột dự án và ứng dụng Django, hãy áp dụng chúng vào thực tế

Trang 6

bằng cách bắt đầu dự án Bookr trong bài tập đầu tiên của cuốnsách này.

Bài tập 1.01 – tạo dự án và ứng dụng cũng như khởi động máy chủ phát triển

Xuyên suốt cuốn sách này, chúng tôi sẽ xây dựng một trangweb đánh giá sách có tên Bookr Nó sẽ cho phép bạn thêm cáctrường cho nhà xuất bản, cộng tác viên, sách và bài đánh giá Nhàxuất bản sẽ xuất bản một hoặc nhiều cuốn sách và mỗi cuốn sáchsẽ có một hoặc nhiều người đóng góp (tác giả, biên tập viên, đồngtác giả, v.v.) Chỉ người dùng quản trị mới được phép sửa đổi cácmô hình này Khi người dùng đã đăng ký tài khoản trên trang web,họ sẽ có thể bắt đầu thêm đánh giá cho một cuốn sách.

Trong bài tập này, bạn sẽ xây dựng dự án bookr Django,kiểm tra xem Django có đang hoạt động hay không bằng cáchchạy máy chủ phát triển, sau đó tạo các bài đánh giá về ứng dụngDjango.

Bạn đã thiết lập sẵn một môi trường ảo với cài đặt Django.Để biết cách thực hiện điều đó, bạn có thể tham khảo Lời nói đầu.Khi bạn đã sẵn sàng, hãy bắt đầu bằng cách tạo dự án Bookr:

1 Mở terminal và chạy lệnh để tạo thư mục dự án bookr và cácthư mục con mặc định:

django-admin startproject bookr

Lệnh này không tạo ra bất kỳ đầu ra nào nhưng sẽ tạo mộtthư mục có tên bookr bên trong thư mục mà bạn đã chạy lệnh.Bạn có thể xem bên trong thư mục này và xem các mục mà

Trang 7

chúng tôi đã mô tả trước đây đối với ví dụ về dự án myproject –thư mục gói bookr và tệp quản lý.py.

Bây giờ chúng ta có thể kiểm tra xem dự án và Django cóđược thiết lập chính xác hay không bằng cách chạy máy chủ pháttriển Django Việc khởi động máy chủ được thực hiện bằng tậplệnh quản lý.py.

2 Trong thiết bị đầu cuối của bạn (hoặc Command Prompt), hãythay đổi sang thư mục dự án bookr (sử dụng lệnh cd), rồi chạylệnh manage.py runserver như sau:

python3 manage.py runserver

GHI CHÚ: Trên Windows, bạn có thể cần chạy và thay thếpython3 chỉ bằng python để lệnh hoạt động mỗi khi bạn chạy nó.

Lệnh này khởi động máy chủ phát triển Django Bạn sẽ nhậnđược kết quả tương tự như sau:

Watching for file changes with StatReloaderPerforming system checks

System check identified no issues (0 silenced).

You have 18 unapplied migration(s) Your project may notwork properly until you apply the migrations for app(s):admin, auth, contenttypes, sessions.

Run 'python manage.py migrate' to apply them.January 01, 2022 - 02:54:03

Django version 4.0, using settings 'bookr.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CONTROL-C.

Trang 8

Bạn có thể sẽ nhận được một số cảnh báo về việc di chuyểnchưa được áp dụng (unapplied migrations), nhưng hiện tại điều đókhông sao cả.

3 Mở trình duyệt web và truy cập http://127.0.0.1:8000/, mànhình này sẽ hiển thị cho bạn màn hình chào mừng Django (Hình1.2) Nếu bạn thấy điều này, bạn sẽ biết rằng dự án Django củabạn đã được tạo thành công và hiện tại tất cả đều hoạt động tốt:

4 Quay trở lại thiết bị đầu cuối của bạn và dừng chạy máy chủphát triển bằng cách gõ Ctrl + C.

5 Bây giờ chúng ta sẽ tạo ứng dụng đánh giá cho dự án Bookr.Trong thiết bị đầu cuối của bạn, hãy đảm bảo bạn đang ở trongthư mục dự án bookr, sau đó thực hiện lệnh sau để tạo ứng dụngđánh giá:

python3 manage.py startapp reviews

Trang 9

GHI CHÚ: Sau khi tạo ứng dụng đánh giá, các tệp trong thưmục dự án Bookr của bạn sẽ trông như thế này:https://github.com/PacktPublishing/Web-Development-with-

Django-Second-Edition/tree/main/Chapter01/Exercise1.01/ bookr.Không có đầu ra nếu lệnh thành công nhưng thư mục

reviews đã được tạo Bạn có thể nhìn vào bên trong thư mục nàyđể xem các tệp đã được tạo – thư mục di chuyển, admin.py,models.py, v.v Chúng tôi sẽ kiểm tra những điều này một cáchchi tiết trong phần ứng dụng Django.

Trong bài tập này, chúng ta đã tạo dự án Bookr, kiểm traxem dự án có đang hoạt động hay không bằng cách khởi độngmáy chủ phát triển Django, sau đó tạo ứng dụng đánh giá cho dựán Bây giờ bạn đã có thời gian thực hành với dự án Django,chúng ta sẽ quay lại một số lý thuyết đằng sau thiết kế củaDjango cũng như các yêu cầu và phản hồi HTTP.

Hiểu mô hình model-view-template

Một mẫu thiết kế phổ biến trong thiết kế ứng dụng là ModelView Controller (MVC), trong đó mô hình của ứng dụng (dữ liệu

của nó) được hiển thị trong một hoặc nhiều chế độ xem và bộđiều khiển sắp xếp sự tương tác giữa mô hình và chế độ xem.Django đi theo một mô hình khác nhưng tương tự được gọi làModel-View-Template (MVT).

Giống như MVC, MVT cũng sử dụng các mô hình để lưu trữ dữliệu Tuy nhiên, với MVT, chế độ xem sẽ truy vấn một mô hình vàsau đó hiển thị mô hình đó bằng một mẫu Thông thường, với cácngôn ngữ MVC, cả ba thành phần này đều cần được phát triển

Trang 10

bằng cùng một ngôn ngữ Với MVT, mẫu có thể ở ngôn ngữ khác.Trong trường hợp của Django, các mô hình và chế độ xem đượcviết bằng Python và mẫu được viết bằng HTML Điều này có nghĩalà nhà phát triển Python có thể làm việc trên các mô hình và chếđộ xem, trong khi nhà phát triển HTML chuyên nghiệp làm việctrên HTML Trước tiên, chúng tôi sẽ giải thích chi tiết hơn về cácmô hình, chế độ xem và mẫu, sau đó xem xét một số tình huốngmẫu nơi chúng được sử dụng.

Mô hình

Các mô hình Django xác định dữ liệu cho ứng dụng của bạnvà cung cấp lớp trừu tượng cho quyền truy cập cơ sở dữ liệu SQLthông qua Object Relational Mapper (Trình ánh xạ quan hệ đốitượng (ORM)) ORM cho phép bạn xác định lược đồ dữ liệu (lớp,trường và mối quan hệ của chúng) bằng mã Python mà không cầnhiểu biết về cơ sở dữ liệu cơ bản Về cơ bản, điều này có nghĩa làbạn có thể xác định lớp cơ sở dữ liệu của mình bằng mã Python vàDjango sẽ đảm nhiệm việc tạo các truy vấn SQL cho bạn ORM sẽđược thảo luận chi tiết trong Chương 2, Mô hình và Di chuyển.

GHI CHÚ: SQL là viết tắt của Structured Query Language(Ngôn ngữ truy vấn có cấu trúc) và là cách mô tả một loại cơ sởdữ liệu lưu trữ dữ liệu trong các bảng, trong đó mỗi bảng có mộtsố hàng Hãy tưởng tượng mỗi bảng giống như một bảng tínhriêng lẻ Tuy nhiên, không giống như bảng tính, mối quan hệ cóthể được xác định giữa dữ liệu trong mỗi bảng Bạn có thể tươngtác với dữ liệu bằng cách thực hiện các truy vấn SQL (thường đượcgọi là truy vấn khi nói về cơ sở dữ liệu) Truy vấn cho phép bạn

Trang 11

truy xuất dữ liệu (SELECT), thêm hoặc thay đổi dữ liệu (INSERT vàUPDATE) và xóa dữ liệu (DELETE) Có nhiều máy chủ cơ sở dữ liệuSQL để lựa chọn, chẳng hạn như SQLite, PostgreSQL, MySQL hoặcMicrosoft SQL Server Phần lớn cú pháp SQL giống nhau giữa mỗicơ sở dữ liệu, nhưng có thể có một số khác biệt về phương ngữ.ORM của Django sẽ giải quyết những khác biệt này cho bạn – khibắt đầu viết mã, chúng ta sẽ sử dụng cơ sở dữ liệu SQLite để lưutrữ dữ liệu trên đĩa, nhưng sau đó, khi chúng ta triển khai lên máychủ, chúng tôi sẽ chuyển sang PostgreSQL nhưng không cần thựchiện bất kỳ thay đổi mã nào.

Thông thường, khi truy vấn cơ sở dữ liệu, kết quả trả về dướidạng đối tượng Python nguyên thủy, (ví dụ: danh sách chuỗi, int,float hoặc byte) Khi sử dụng ORM, kết quả sẽ tự động đượcchuyển đổi thành phiên bản của các lớp mô hình mà bạn đã xácđịnh Sử dụng ORM có nghĩa là bạn được tự động bảo vệ khỏi mộtloại lỗ hổng được gọi là tấn công tiêm nhiễm SQL.

Nếu bạn quen thuộc hơn với cơ sở dữ liệu và SQL, bạn luôncó tùy chọn viết truy vấn của riêng mình.

Chế độ xem

Chế độ xem Django là nơi xác định hầu hết logic cho ứngdụng của bạn Khi người dùng truy cập trang web của bạn, trìnhduyệt web của họ sẽ gửi yêu cầu truy xuất dữ liệu từ trang webcủa bạn (chúng tôi sẽ đi sâu vào chi tiết hơn về yêu cầu HTTP là gìvà yêu cầu đó chứa thông tin gì trong phần tiếp theo) Chế độxem là một hàm mà bạn viết sẽ nhận được yêu cầu này dưới dạngđối tượng Python (cụ thể là đối tượng Django HttpRequest) Tùy

Trang 12

thuộc vào quan điểm của bạn để quyết định cách nó sẽ đáp ứngyêu cầu và những gì nó sẽ gửi lại cho người dùng Chế độ xem củabạn phải trả về một đối tượng HttpResponse đóng gói tất cả thôngtin được cung cấp cho khách hàng – nội dung, trạng thái HTTP vàcác tiêu đề khác.

Chế độ xem cũng có thể tùy chọn nhận thông tin từ URL củayêu cầu - ví dụ: số ID Mẫu thiết kế phổ biến của chế độ xem làtruy vấn cơ sở dữ liệu thông qua Django ORM, sử dụng ID đượcchuyển vào chế độ xem của bạn Sau đó, chế độ xem có thể hiểnthị một mẫu (sẽ sớm có nhiều thông tin hơn về điều này) bằngcách cung cấp cho nó dữ liệu từ mô hình được lấy từ cơ sở dữ liệu.Mẫu được hiển thị sẽ trở thành nội dung của đối tượngHttpResponse và được trả về từ hàm xem Django đảm nhiệmviệc truyền dữ liệu trở lại trình duyệt.

Mẫu là tệp Ngôn ngữ đánh dấu siêu văn bản (HTML) (thôngthường - bất kỳ tệp văn bản nào cũng có thể là mẫu) chứa cácphần giữ chỗ đặc biệt được thay thế bằng các biến mà ứng dụngcủa bạn cung cấp Ví dụ: ứng dụng của bạn có thể hiển thị danhsách các mục theo bố cục thư viện hoặc bố cục bảng Chế độ xemcủa bạn sẽ tìm nạp các mô hình giống nhau cho một trong hainhưng có thể hiển thị một tệp HTML khác có cùng thông tin đểtrình bày dữ liệu theo cách khác nhau Django nhấn mạnh đến sựan toàn, vì vậy nó sẽ đảm nhiệm việc tự động thoát các biến chobạn Ví dụ: các ký hiệu < and > (trong số các ký hiệu khác) là cácký tự đặc biệt trong HTML Nếu bạn cố gắng sử dụng chúng trong

Trang 13

một biến thì Django sẽ tự động mã hóa chúng để chúng hiển thịchính xác trong trình duyệt.

MVT trong thực tế

Bây giờ chúng ta sẽ xem xét một số ví dụ để minh họa cáchMVT hoạt động trong thực tế Trong các ví dụ, chúng ta có môhình Book lưu trữ thông tin về các cuốn sách khác nhau và môhình Review lưu trữ thông tin về các bài đánh giá khác nhau vềsách.

Trong ví dụ đầu tiên, chúng tôi muốn có thể chỉnh sửa thôngtin về Book hoặc Review Lấy trường hợp đầu tiên là chỉnh sửachi tiết của một cuốn sách Chúng ta sẽ có chế độ xem để tìm nạpdữ liệu Book từ cơ sở dữ liệu và cung cấp mô hình Book Sau đó,chúng tôi sẽ chuyển thông tin ngữ cảnh chứa đối tượng Book (vàdữ liệu khác) tới một mẫu hiển thị biểu mẫu để nắm bắt thông tinmới Kịch bản thứ hai (chỉnh sửa Review ) cũng tương tự – tìmnạp mô hình Review từ cơ sở dữ liệu, sau đó chuyển đối tượng

Review và dữ liệu khác vào một mẫu để hiển thị biểu mẫu chỉnhsửa Những kịch bản này có thể giống nhau đến mức chúng ta cóthể sử dụng lại cùng một mẫu cho cả hai, như trong Hình 1.3.

Trang 14

Bạn có thể thấy ở đây chúng ta sử dụng hai mô hình, hai chếđộ xem và một mẫu Mỗi chế độ xem tìm nạp một phiên bản duynhất của mô hình được liên kết nhưng cả hai đều có thể sử dụngcùng một mẫu, đó là một trang HTML chung để hiển thị biểu mẫu.Chế độ xem có thể cung cấp thêm dữ liệu ngữ cảnh để thay đổimột chút cách hiển thị mẫu cho từng loại mô hình Cũng đượcminh họa trong sơ đồ là các phần của mã được viết bằng Pythonvà các phần được viết bằng HTML.

Trong ví dụ thứ hai, chúng tôi muốn có thể hiển thị cho ngườidùng danh sách sách hoặc bài đánh giá được lưu trữ trong ứngdụng Hơn nữa, chúng tôi muốn cho phép người dùng tìm kiếmsách và nhận danh sách tất cả những cuốn sách phù hợp với tiêuchí của họ Chúng ta sẽ sử dụng hai mô hình giống như ví dụ trước(Book and Review) nhưng chúng ta sẽ tạo các chế độ xem và mẫumới Vì có ba kịch bản nên lần này chúng tôi sẽ sử dụng ba chế độxem – chế độ xem đầu tiên tìm nạp tất cả sách, chế độ xem thứhai tìm nạp tất cả các bài đánh giá và chế độ xem cuối cùng tìmnạp sách dựa trên một số tiêu chí tìm kiếm Một lần nữa, nếu

Trang 15

chúng ta viết tốt một mẫu, chúng ta có thể chỉ sử dụng lại mộtmẫu HTML duy nhất, như trong Hình 1.4.

Các mô hình Book và Review vẫn không thay đổi so với ví dụtrước; ba chế độ xem sẽ lấy nhiều (không hoặc nhiều hơn) sáchhoặc bài đánh giá Sau đó, mỗi chế độ xem có thể sử dụng cùngmột mẫu, đó là một tệp HTML chung lặp lại danh sách các đốitượng được cung cấp và hiển thị chúng Một lần nữa, các chế độxem có thể gửi dữ liệu bổ sung trong ngữ cảnh để thay đổi cáchhoạt động của mẫu, nhưng phần lớn mẫu sẽ càng chung chungcàng tốt.

Trong Django, không phải lúc nào cũng cần sử dụng một môhình để hiển thị mẫu HTML Một chế độ xem có thể tự tạo dữ liệungữ cảnh và hiển thị một mẫu với nó mà không yêu cầu bất kỳ dữliệu mô hình nào Hình 1.5 hiển thị chế độ xem gửi dữ liệu thẳngtới mẫu.

Trang 16

Trong ví dụ này, có một chế độ xem chào mừng để chàomừng người dùng đến với trang web Nó không cần bất kỳ thôngtin nào từ cơ sở dữ liệu, vì vậy nó chỉ có thể tự tạo dữ liệu ngữcảnh Dữ liệu ngữ cảnh phụ thuộc vào loại thông tin bạn muốnhiển thị – ví dụ: bạn có thể chuyển thông tin người dùng để chàohọ bằng tên nếu họ đăng nhập.

Chế độ xem cũng có thể hiển thị mẫu mà không cần bất kỳdữ liệu ngữ cảnh nào Điều này có thể hữu ích nếu bạn có thôngtin tĩnh trong tệp HTML mà bạn muốn cung cấp.

Bây giờ bạn đã được giới thiệu về MVT ở Django, chúng ta cóthể xem cách Django xử lý yêu cầu HTTP và tạo phản hồi HTTP.Tuy nhiên, trước tiên chúng ta cần giải thích chi tiết hơn về yêucầu và phản hồi HTTP là gì cũng như chúng chứa thông tin gì.Chúng ta sẽ thấy điều này trong phần tiếp theo.

Giới thiệu về HTTP

Giả sử ai đó muốn truy cập trang web của bạn Họ nhập URLcủa nó hoặc nhấp vào liên kết đến trang web của bạn từ trang họđã truy cập Trình duyệt web của họ tạo một yêu cầu HTTP, yêucầu này được gửi đến máy chủ lưu trữ trang web của bạn Khi máychủ web nhận được yêu cầu HTTP từ trình duyệt của bạn, nó cóthể diễn giải yêu cầu đó và sau đó gửi lại phản hồi Phản hồi màmáy chủ gửi có thể đơn giản, chẳng hạn như chỉ đọc tệp HTML

Trang 17

hoặc hình ảnh từ đĩa và gửi nó Ngoài ra, phản hồi có thể phức tạphơn, có thể sử dụng phần mềm phía máy chủ (chẳng hạn nhưDjango) để tự động tạo nội dung trước khi gửi.

Sơ đồ sau đây hiển thị hướng truyền yêu cầu HTTP và phảnhồi HTTP giữa trình duyệt và máy chủ web.

Yêu cầu được tạo thành từ bốn phần chính – phương thức,đường dẫn, tiêu đề và nội dung (the method, the path, headers,và the body.) Một số loại yêu cầu không có nội dung Nếu bạn chỉtruy cập một trang web, trình duyệt của bạn sẽ không gửi nộidung, trong khi nếu bạn đang gửi biểu mẫu (ví dụ: bằng cáchđăng nhập vào một trang web hoặc thực hiện tìm kiếm), thì yêucầu của bạn sẽ có nội dung chứa dữ liệu bạn gửi đi Bây giờ chúngta sẽ xem xét hai yêu cầu ví dụ để minh họa điều này.

Yêu cầu đầu tiên sẽ đến một trang mẫu có URL sau:https://www.example.com/page Khi trình duyệt của bạn truy cậptrang đó, đây là những gì nó gửi ở hậu trường:

GET /page HTTP/1.1

Host: www.example.com

Trang 18

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Firefox/15.0.1

Cookie: sessid=abc123def456

Dòng đầu tiên chứa phương thức (GET) và đường dẫn(/page) Nó cũng chứa phiên bản HTTP – trong trường hợp này là1.1, mặc dù bạn không phải lo lắng về điều này Có nhiều phươngthức HTTP khác nhau có thể được sử dụng, tùy thuộc vào cáchbạn muốn tương tác với trang từ xa Một số cách phổ biến là GET(để truy xuất trang từ xa), POST (để gửi dữ liệu đến trang từ xa),PUT (để tạo trang từ xa) và DELETE (để xóa trang từ xa) Lưu ýrằng mô tả về các hành động được đơn giản hóa phần nào – máychủ từ xa có thể chọn cách phản hồi với các phương pháp khácnhau và ngay cả các nhà phát triển có kinh nghiệm cũng có thểkhông đồng ý về phương pháp chính xác để triển khai cho mộthành động cụ thể Điều quan trọng cần lưu ý là ngay cả khi máychủ hỗ trợ một phương pháp cụ thể, bạn có thể sẽ cần có quyềnchính xác để thực hiện hành động đó – chẳng hạn, bạn không thểxóa một trang web mà bạn không thích.

Khi viết một ứng dụng web, phần lớn thời gian bạn sẽ chỉ xửlý các yêu cầu GET Khi bạn bắt đầu chấp nhận biểu mẫu, bạncũng sẽ phải sử dụng các yêu cầu POST Chỉ khi bạn đang làmviệc với các tính năng nâng cao, chẳng hạn như tạo API REST, bạnmới phải lo lắng về PUT, DELETE và các phương thức khác.

Quay lại yêu cầu ví dụ, dòng 2 trở đi có tiêu đề của yêu cầu.Các tiêu đề chứa siêu dữ liệu bổ sung về yêu cầu Mỗi tiêu đề nằmtrên một dòng riêng, với tên tiêu đề và giá trị của nó được phân

Trang 19

tách bằng dấu hai chấm Hầu hết đều là tùy chọn (ngoại trừ Máychủ - sẽ sớm có thêm thông tin về điều đó) Tên tiêu đề khôngphân biệt chữ hoa chữ thường Vì ví dụ này, chúng tôi chỉ hiển thịba tiêu đề phổ biến ở đây Hãy xem các tiêu đề ví dụ theo thứ tự- Host: Như đã đề cập, đây là tiêu đề duy nhất được yêu cầu (đốivới HTTP 1.1 trở lên) Máy chủ web cần biết trang web hoặc ứngdụng nào sẽ phản hồi yêu cầu nếu có nhiều trang web được lưutrữ trên một máy chủ.

- User-Agent: Trình duyệt của bạn thường gửi đến máy chủ mộtchuỗi xác định phiên bản và hệ điều hành của nó Ứng dụng máychủ của bạn có thể sử dụng điều này để phân phát các trang khácnhau tới các thiết bị khác nhau (ví dụ: trang dành riêng cho thiếtbị di động dành cho điện thoại thông minh).

- Cookie: Bạn có thể đã thấy một thông báo khi truy cập mộttrang web cho bạn biết rằng trang web đó đang lưu trữ cookietrong trình duyệt Đây là những thông tin nhỏ mà một trang webcó thể lưu trữ trong trình duyệt của bạn và sử dụng để nhận dạngbạn hoặc lưu cài đặt khi bạn quay lại trang web Nếu bạn thắcmắc về cách trình duyệt của bạn gửi những cookie này trở lại máychủ, thì đó là thông qua tiêu đề này.

Có nhiều tiêu đề tiêu chuẩn khác được xác định và sẽ chiếmquá nhiều không gian để liệt kê tất cả Chúng có thể được sử dụngđể xác thực với máy chủ (Authorization), cho máy chủ biết loại dữliệu nào bạn có thể nhận (Accept) hoặc thậm chí ngôn ngữ bạnmuốn cho trang (Accept-Language, mặc dù điều này sẽ chỉ hoạtđộng nếu người tạo trang đã cung cấp nội dung bằng ngôn ngữ cụ

Trang 20

thể mà bạn yêu cầu) Bạn thậm chí có thể xác định các tiêu đềcủa riêng mình mà chỉ ứng dụng của bạn mới biết cách phản hồi.

Bây giờ, hãy xem xét một yêu cầu nâng cao hơn một chút một yêu cầu gửi một số thông tin đến máy chủ và do đó (khônggiống như ví dụ trước) có chứa nội dung Trong ví dụ này, chúngtôi đang đăng nhập vào một trang web bằng cách gửi tên ngườidùng và mật khẩu - ví dụ: bạn truy cập https://www.example.com/login và nó sẽ hiển thị một biểu mẫu để nhập tên người dùng vàmật khẩu Sau khi bạn nhấp vào nút Đăng nhập, đây là yêu cầuđược gửi đến máy chủ:

-POST /login HTTP/1.1Host: www.example.com

Content-Type: application/x-www-form-urlencodedContent-Length: 32

Như bạn có thể thấy, ví dụ này trông giống với ví dụ đầu tiênnhưng có một vài điểm khác biệt Phương thức này bây giờ làPOST và hai tiêu đề mới đã được giới thiệu (bạn có thể giả địnhrằng trình duyệt của bạn vẫn sẽ gửi các tiêu đề khác có trong vídụ trước):

- Content-Type: Điều này cho máy chủ biết loại dữ liệu được baogồm trong nội dung Trong trường hợp ứng dụng/x-www-form-urlencoded, phần thân là một tập hợp các cặp khóa-giá trị Máykhách HTTP có thể đặt tiêu đề này để thông báo cho máy chủ biết

Trang 21

liệu nó có đang gửi các loại dữ liệu khác hay không, chẳng hạnnhư JSON hoặc XML.

- Content-Length: Để máy chủ biết lượng dữ liệu cần đọc, máykhách phải cho máy chủ biết lượng dữ liệu đang được gửi Tiêu đềđộ dài nội dung chứa độ dài của phần thân Nếu bạn đếm chiềudài của phần thân trong ví dụ này, bạn sẽ thấy nó có 32 ký tự.

Các tiêu đề luôn được phân tách khỏi phần nội dung bằngmột dòng trống Bằng cách xem ví dụ, bạn sẽ có thể biết dữ liệubiểu mẫu được mã hóa như thế nào trong phần nội dung -username có giá trị user và password có giá trị pass1.

Những yêu cầu này khá đơn giản nhưng hầu hết các yêu cầuđều không phức tạp hơn nhiều Chúng có thể có các phương thứcvà tiêu đề khác nhau nhưng phải tuân theo cùng một định dạng.Bây giờ chúng ta đã thấy các yêu cầu, chúng ta sẽ xem xét cácphản hồi HTTP gửi lại từ máy chủ.

Phản hồi HTTP trông giống như một yêu cầu và bao gồm baphần chính – trạng thái, tiêu đề và nội dung (status, headers, vàbody) Tuy nhiên, giống như một yêu cầu, tùy thuộc vào loại phảnhồi, nó có thể không có nội dung Ví dụ về phản hồi đầu tiên làmột phản hồi thành công đơn giản:

HTTP/1.1 200 OKServer: nginx

Content-Length: 18132Content-Type: text/html

Set-Cookie: sessid=abc123def46<!DOCTYPE html><html><head>…

Trang 22

Dòng đầu tiên chứa phiên bản HTTP, mã trạng thái dạng số(200) và sau đó là mô tả văn bản về ý nghĩa của mã đó (OK – yêucầu đã thành công) Chúng ta sẽ hiển thị thêm một số tình huốngsau ví dụ tiếp theo Dòng 2–5 chứa tiêu đề, tương tự như một yêucầu Một số cái đầu bạn có thể đã từng thấy trước đây; chúng tôisẽ giải thích tất cả chúng trong bối cảnh này:

- Server: Điều này tương tự nhưng ngược lại với tiêu đề Agent- đây là máy chủ cho khách hàng biết nó đang chạy phầnmềm nào.

User ContentUser Length: Máy khách sử dụng giá trị này để xác địnhlượng dữ liệu cần đọc từ máy chủ để lấy nội dung.

- Content-Type: Máy chủ sử dụng tiêu đề này để cho khách hàngbiết loại dữ liệu nào nó đang gửi Sau đó, khách hàng có thể chọncách hiển thị dữ liệu - ví dụ: một hình ảnh phải được hiển thị khácvới HTML.

- Set-Cookie: Chúng ta đã thấy trong ví dụ yêu cầu đầu tiên cáchkhách hàng gửi cookie đến máy chủ Đây là tiêu đề tương ứng màmáy chủ gửi để đặt cookie đó trong trình duyệt.

Sau tiêu đề là một dòng trống và sau đó là phần nội dungcủa phản hồi Chúng ta chưa hiển thị tất cả ở đây, chỉ một vài kýtự đầu tiên của HTML đang được nhận, trong số 18.132 ký tự màmáy chủ đã gửi.

Tiếp theo, chúng ta sẽ hiển thị ví dụ về phản hồi được trả vềnếu không tìm thấy trang được yêu cầu:

HTTP/1.1 404 Not FoundServer: nginx

Trang 23

- 100–199: Máy chủ gửi mã trong phạm vi này để cho biết cácthay đổi về giao thức hoặc cần thêm dữ liệu Bạn không phải lolắng về những điều này.

- 200–299: Mã trạng thái trong phạm vi này cho biết việc xử lýphản hồi thành công Như chúng ta đã thấy, mã phổ biến nhất màbạn gặp là 200 OK.

- 300–399: Mã trạng thái trong phạm vi này có nghĩa là trang bạnđang yêu cầu đã chuyển sang địa chỉ khác Một ví dụ về điều nàylà dịch vụ rút ngắn URL sẽ chuyển hướng bạn từ URL ngắn sangURL đầy đủ khi bạn truy cập nó Các phản hồi phổ biến là 301Moved Permanently hoặc 302 Found. Khi gửi phản hồi chuyểnhướng, máy chủ cũng sẽ bao gồm tiêu đề Location chứa URL màbạn sẽ được chuyển hướng đến.

- 400–499: Mã trạng thái trong phạm vi này có nghĩa là yêu cầukhông thể được xử lý do đã xảy ra sự cố với nội dung khách hànggửi Điều này trái ngược với yêu cầu không thể được xử lý do sựcố trên máy chủ (chúng ta sẽ sớm thảo luận về những vấn đề đó).

Trang 24

Chúng tôi đã thấy phản hồi 404 Not Found; Điều này là do yêucầu không hợp lệ vì khách hàng đang yêu cầu một tài liệu khôngtồn tại Một số phản hồi phổ biến khác là 401 Unauthorized (kháchhàng nên đăng nhập) hoặc 403 Forbidden (khách hàng khôngđược phép truy cập vào tài nguyên cụ thể) Cả hai vấn đề này đềucó thể tránh được bằng cách yêu cầu khách hàng đăng nhập, dođó chúng được coi là vấn đề (yêu cầu) phía khách hàng.

- 500–599: Mã trạng thái trong phạm vi này cho biết có lỗi ở phíamáy chủ Khách hàng không nên mong đợi có thể điều chỉnh yêucầu để khắc phục sự cố Khi làm việc với Django, trạng thái lỗimáy chủ phổ biến nhất bạn sẽ thấy là 500 Internal Server Error.Điều này sẽ được tạo nếu mã của bạn đưa ra một ngoại lệ Một lỗiphổ biến khác là 504 Gateway Timeout, lỗi này có thể xảy ra nếumã của bạn mất quá nhiều thời gian để chạy Các biến thể khácthường thấy là 502 Bad Gateway và 503 Service Unavailable,thường có nghĩa là có vấn đề với việc lưu trữ ứng dụng của bạntheo một cách nào đó.

Đây chỉ là một số trạng thái HTTP phổ biến nhất Bạn có thểtìm thấy danh sách đầy đủ hơn tạihttps://developer.mozilla.org/en-US/docs/Web/HTTP/Status Tuynhiên, giống như các tiêu đề HTTP, các trạng thái là tùy ý và ứngdụng có thể trả về các trạng thái tùy chỉnh Máy chủ và máykhách có quyền quyết định ý nghĩa của các trạng thái và mã tùychỉnh này.

Nếu đây là lần đầu tiên bạn làm quen với giao thức HTTP thìcó khá nhiều thông tin cần tiếp thu May mắn thay, Django thực

Trang 25

hiện tất cả công việc khó khăn đó và đóng gói dữ liệu đến vàomột đối tượng HttpRequest Trong hầu hết các trường hợp, bạnkhông cần biết về hầu hết thông tin được cung cấp nhưng thôngtin đó luôn sẵn có nếu bạn cần Tương tự, khi gửi phản hồi, Djangosẽ đóng gói dữ liệu của bạn trong đối tượng HttpResponse Thôngthường, bạn chỉ cần đặt nội dung trả về nhưng bạn cũng có quyềntự do đặt mã trạng thái và tiêu đề HTTP Chúng ta sẽ thảo luậncách truy cập và thiết lập thông tin trong HttpRequest vàHttpResponse ở phần sau của chương này Trong phần tiếp theo,Xử lý yêu cầu, chúng ta sẽ xem cách Django nhận, phân tích cúpháp và phản hồi yêu cầu HTTP.

Xử lý một yêu cầu

Đây là dòng thời gian cơ bản của các luồng yêu cầu và phảnhồi để bạn có thể biết được mã bạn viết sẽ làm gì ở mỗi giai đoạn.Về mặt viết code, phần đầu tiên bạn sẽ viết là quan điểm củabạn Chế độ xem bạn tạo sẽ thực hiện một số hành động, chẳnghạn như truy vấn cơ sở dữ liệu để tìm dữ liệu Sau đó, chế độ xemsẽ chuyển dữ liệu này sang một hàm khác để hiển thị mẫu, cuốicùng trả về đối tượng HttpResponse chứa dữ liệu bạn muốn gửi lạicho máy khách.

Tiếp theo, Django cần biết cách ánh xạ một URL cụ thể tớichế độ xem của bạn để nó có thể tải chế độ xem chính xác choURL mà nó nhận được như một phần của yêu cầu Bạn sẽ viết ánhxạ URL này trong tệp Python cấu hình URL.

Khi Django nhận được yêu cầu, nó sẽ phân tích tệp cấu hìnhURL và sau đó tìm chế độ xem tương ứng Nó gọi chế độ xem,

Trang 26

truyền vào đối tượng HttpRequest đại diện cho yêu cầu Chế độxem của bạn sẽ trả về HttpResponse và sau đó Django sẽ tiếp tụcgửi dữ liệu này đến máy chủ web lưu trữ và gửi lại cho khách hàngđã yêu cầu dữ liệu đó

Luồng yêu cầu và phản hồi được minh họa trong Hình 1.7;các phần được chỉ định là Your Code dành cho mã bạn viết và cácbước đầu tiên và cuối cùng do Django đảm nhiệm Django thựchiện khớp URL cho bạn, gọi mã xem của bạn và sau đó xử lý việcchuyển phản hồi trở lại máy khách.

Trong phần này, chúng ta đã tìm hiểu về cấu trúc của yêucầu và phản hồi HTTP, bao gồm các loại yêu cầu khác nhau được

Trang 27

sử dụng cho mục đích gì Chúng ta cũng đã thấy cách sử dụng mãtrạng thái HTTP để biểu thị lỗi trong các yêu cầu hoặc phản hồiHTTP Chúng tôi cũng có cái nhìn tổng quan về cách Django cóthể xử lý yêu cầu HTTP Trong phần tiếp theo, chúng ta sẽ khámphá cấu trúc dự án Django và tìm hiểu xem các tệp và thư mụckhác nhau được sử dụng để làm gì.

Khám phá cấu trúc dự án Django

Chúng ta hãy tự nhắc nhở mình về những gì xảy ra khi chúng tachạy startproject (đối với một dự án có tên myproject) – lệnh tạomột thư mục myproject với một tệp có tên là manager.py và mộtthư mục có tên myproject (cái này khớp với tên dự án; trong Bàitập 1.01 – tạo một dự án và ứng dụng, đồng thời khởi động máychủ phát triển, thư mục này được gọi là bookr, giống như dự án).Bố cục thư mục được hiển thị trong Hình 1.8 Bây giờ chúng ta sẽkiểm tra tệp manage.py và nội dung gói myproject chi tiết hơn.

Đúng như tên gọi, manage.py là tập lệnh được sử dụng đểquản lý dự án Django của bạn Hầu hết các lệnh được sử dụng để

Trang 28

tương tác với dự án của bạn sẽ được cung cấp cho tập lệnh nàytrên dòng lệnh Các lệnh được cung cấp dưới dạng đối số cho tậplệnh này – ví dụ: nếu chúng ta muốn chạy lệnh manage.pyrunserver, điều đó có nghĩa là chạy tập lệnh manage.py như thếnày:

python3 manage.py runserver

Có một số lệnh hữu ích mà manage.py cung cấp Bạn sẽđược giới thiệu chi tiết hơn trong suốt cuốn sách; một số lệnh phổbiến như sau:

- runserver: Thao tác này khởi động máy chủ HTTP phát triểnDjango để phục vụ ứng dụng Django trên máy tính cục bộ củabạn.

- startapp: Lệnh này tạo ra một ứng dụng Django mới trong dự áncủa bạn Chúng ta sẽ sớm nói về ứng dụng chi tiết hơn.

- shell: Thao tác này khởi động trình thông dịch Python có cài đặtsẵn Django Điều này hữu ích khi tương tác với ứng dụng của bạnmà không cần phải tải cài đặt Django theo cách thủ công.

- dbshell: Thao tác này khởi động một shell tương tác được kết nốivới cơ sở dữ liệu của bạn, sử dụng các tham số mặc định từ càiđặt Django của bạn Bạn có thể chạy các truy vấn SQL thủ côngtheo cách này.

- makemigrations: Thao tác này tạo ra hướng dẫn thay đổi cơ sởdữ liệu từ định nghĩa mô hình của bạn Bạn sẽ tìm hiểu ý nghĩacủa lệnh này và cách sử dụng lệnh này trong Chương 2, Mô hìnhvà Di chuyển.

Trang 29

- migrate: Thao tác này áp dụng các di chuyển được tạo bởi lệnhmakemigrations Bạn cũng sẽ sử dụng điều này trong Chương 2,Mô hình và Di chuyển.

- test: Thao tác này chạy các bài kiểm tra tự động mà bạn đã viết.Bạn sẽ sử dụng lệnh này trong Chương 14, Kiểm tra ứng dụngDjango của bạn.

Danh sách đầy đủ các lệnh có sẵn tronghttps://docs.djangoproject.com/en/3.0/ref/django-admin/.

Trong các phần sau, chúng ta sẽ khám phá nội dung của thưmục dự án, tìm hiểu thư mục ứng dụng Django chứa gì và xemcách tải dự án của bạn lên PyCharm.

Thư mục myproject

Cũng như tệp manage.py, mục tệp khác được tạo bởistartproject là thư mục myproject Đây là gói Python thực tế chodự án của bạn Nó chứa các cài đặt cho dự án, một số tệp cấuhình cho máy chủ web của bạn và bản đồ URL chung Bên trongthư mục myproject có năm tệp:

Chúng ta có thể thấy các tệp này trong hình dưới đây:

Trang 30

Giờ tình hiểu các tệp này chứa gì:

init .py: Đây là một tệp trống cho Python biết rằng thư mụcmyproject là một mô-đun Python Bạn sẽ quen với những tệp nàynếu trước đây bạn đã từng làm việc với Python.

- settings.py: tệp này chứa tất cả các cài đặt Django cho ứng dụngcủa bạn Chúng ta sẽ giải thích nội dung sớm.

- urls.py: tệp này có ánh xạ URL chung mà ban đầu Django sẽ sửdụng để định vị các chế độ xem hoặc ánh xạ URL con khác Bạnsẽ sớm thêm ánh xạ URL vào tệp này.

- asgi.py và wsgi.py: Những tệp này là những gì máy chủ webASGI hoặc WSGI sử dụng để liên lạc với ứng dụng Django của bạnkhi bạn triển khai nó lên máy chủ web sản xuất Thông thường,bạn không cần phải chỉnh sửa những thứ này và chúng khôngđược sử dụng trong quá trình phát triển hàng ngày

Máy chủ phát triển Django

Bạn đã khởi động máy chủ phát triển Django trong Bài tập1.01 – tạo một dự án và ứng dụng, đồng thời khởi động máy chủ

Trang 31

phát triển Như chúng ta đã đề cập trước đây, đây là một máy chủweb chỉ được chạy trên máy của nhà phát triển trong quá trìnhphát triển Nó không được thiết kế để sử dụng trong sản xuất.By default, the server listens on port 8000 on localhost(127.0.0.1), but this can be changed by adding a port number, oraddress and port number, after the runserver argument:

Theo mặc định, máy chủ lắng nghe cổng 8000 trên localhost(127.0.0.1), nhưng điều này có thể được thay đổi bằng cách thêmsố cổng hoặc địa chỉ và số cổng vào sau đối số máy chủ:

python3 manage.py runserver 8001

Lệnh trên sẽ khiến máy chủ lắng nghe trên cổng 8001 trênlocalhost (127.0.0.1).

Bạn cũng có thể yêu cầu nó nghe trên một địa chỉ cụ thể nếumáy tính của bạn có nhiều địa chỉ hoặc 0.0.0.0 cho tất cả các địachỉ:

python3 manage.py runserver 0.0.0.0:8000

Lệnh này sẽ yêu cầu máy chủ lắng nghe tất cả các địa chỉmáy tính của bạn trên cổng 8000, điều này có thể hữu ích nếubạn muốn kiểm tra ứng dụng của mình từ một máy tính khác hoặcđiện thoại thông minh của bạn.

Máy chủ phát triển theo dõi thư mục dự án Django của bạnvà sẽ tự động khởi động lại mỗi khi bạn lưu tệp để mọi thay đổimã bạn thực hiện sẽ tự động được tải lại vào máy chủ Tuy nhiên,bạn vẫn phải làm mới trình duyệt của mình theo cách thủ công đểxem những thay đổi ở đó.

Trang 32

Khi bạn muốn dừng lệnh runserver, bạn có thể thực hiệntheo cách thông thường để dừng các tiến trình trong terminal –bằng cách gõ Ctrl + C.

Ứng dụng Django

Bây giờ chúng ta đã đề cập đến hầu hết lý thuyết về ứngdụng, chúng ta có thể cụ thể hơn về mục đích của chúng Thưmục ứng dụng chứa tất cả các mô hình, chế độ xem, mẫu (và hơnthế nữa) mà chúng ta cần để cung cấp chức năng cho ứng dụng.Một dự án Django sẽ chứa ít nhất một ứng dụng (trừ khi nó đượctùy chỉnh nhiều để không phụ thuộc vào chức năng của Django).Nếu được thiết kế tốt, ứng dụng sẽ có thể bị xóa khỏi dự án vàchuyển sang dự án khác mà không cần sửa đổi Thông thường,một ứng dụng sẽ chứa các mô hình cho một miền thiết kế duynhất và đây có thể là cách hữu ích để xác định xem ứng dụng củabạn có nên được chia thành nhiều ứng dụng hay không.

Ứng dụng của bạn có thể có bất kỳ tên nào miễn là tên đun Python hợp lệ (tức là chỉ các chữ cái, số và dấu gạch dưới) vàkhông xung đột với các tệp khác trong thư mục dự án của bạn Vídụ, như chúng ta đã thấy, đã có sẵn một thư mục có tênmyproject trong thư mục dự án (chứa tệp settings.py), vì vậy bạnkhông thể có ứng dụng có tên myproject Như chúng ta đã thấytrong Bài tập 1.01 – tạo một dự án và ứng dụng, đồng thời khởiđộng máy chủ phát triển, việc tạo một ứng dụng sử dụngmanage.py startapp appname, như được hiển thị ở đây:

mô-python3 manage.py startapp myapp

Trang 33

Lệnh startapp tạo một thư mục trong dự án của bạn với tênứng dụng được chỉ định Nó cũng tạo ra các tập tin cho ứng dụng.Bên trong thư mục ứng dụng có một số tệp và một thư mục, nhưtrong Hình 1.10:

Chúng ta hãy xem qua các tập tin và một thư mục này:

- init.py : Một tệp trống, cho biết thư mục này là mô-đunPython.

- admin.py: Django có trang quản trị tích hợp để xem và chỉnh sửadữ liệu bằng GUI Trong tệp này, bạn sẽ xác định cách hiển thị cácmô hình ứng dụng của mình trong trang quản trị Django

- apps.py: Phần này chứa một số cấu hình cho siêu dữ liệu củaứng dụng của bạn Bạn sẽ không cần chỉnh sửa tập tin này.

- models.py: Đây là nơi bạn sẽ xác định các mô hình cho ứng dụngcủa mình.

- migrations: Django sử dụng các tệp di chuyển để tự động ghi lạicác thay đổi đối với cơ sở dữ liệu cơ bản của bạn khi mô hình thay

Trang 34

đổi Chúng được tạo bởi Django khi bạn chạy lệnh manage.pymakemigrations và được lưu trữ trong thư mục này Chúng khôngđược áp dụng vào cơ sở dữ liệu cho đến khi bạn chạy manage.pymigrate.

- test.py: Để kiểm tra xem mã của bạn có hoạt động chính xáchay không, Django hỗ trợ viết các bài kiểm tra (đơn vị, chức nănghoặc tích hợp) và sẽ tìm kiếm chúng trong tệp này Chúng tôi sẽviết một số bài kiểm tra trong suốt cuốn sách này và đề cập chitiết về việc kiểm tra trong Chương 14, Kiểm tra ứng dụng Djangocủa bạn.

- view.py: Chế độ xem Django của bạn (mã đáp ứng yêu cầuHTTP) sẽ xuất hiện ở đây Bạn sẽ sớm tạo chế độ xem cơ bản vàcác chế độ xem sẽ được đề cập chi tiết hơn trong Chương 3, Ánhxạ URL, Chế độ xem và Mẫu.

Chúng ta sẽ kiểm tra nội dung của các tệp này chi tiết hơn ,nhưng hiện tại, chúng tôi sẽ thiết lập và chạy PyCharm.

Thiết lập PyCharm

Chúng tôi đã xác nhận trong Bài tập 1.01 – tạo dự án và ứngdụng, đồng thời khởi động máy chủ phát triển rằng dự án Bookrđã được thiết lập đúng cách (vì máy chủ phát triển chạy thànhcông), vì vậy bây giờ chúng tôi có thể bắt đầu sử dụng PyCharmđể chạy và chỉnh sửa dự án của mình PyCharm là một IDE đểphát triển Python và bao gồm các tính năng như hoàn thành mã,định dạng kiểu tự động và trình gỡ lỗi tích hợp Sau đó, chúng tôisẽ sử dụng PyCharm để bắt đầu viết bản đồ URL, chế độ xem vàmẫu của riêng mình Nó cũng sẽ được sử dụng để khởi động và

Trang 35

dừng máy chủ phát triển, điều này sẽ cho phép gỡ lỗi mã của bạnbằng cách đặt các điểm dừng.

Bài tập 1.02 – thiết lập dự án trong PyCharm

Trong bài tập này, chúng ta sẽ mở dự án Bookr trongPyCharm và thiết lập trình thông dịch dự án để PyCharm có thểchạy và gỡ lỗi dự án Thực hiện theo các bước sau:

1 Mở PyCharm Khi bạn mở PyCharm lần đầu tiên, bạn sẽ thấymàn hình Welcome to PyCharm hỏi bạn muốn làm gì:

2 Bấm vào Open, sau đó duyệt đến dự án bookr bạn vừa tạo, sauđó mở nó Hãy chắc chắn rằng bạn đang mở thư mục dự án bookrchứ không phải thư mục gói bookr bên trong.

Trang 36

3 Bạn sẽ được hỏi liệu bạn có muốn tin tưởng vào dự án bookrhay không Vì mới tạo nên an toàn nên click vào Trust Project:

Nếu trước đây bạn chưa sử dụng PyCharm, nó sẽ hỏi bạn vềcài đặt và chủ đề nào bạn muốn sử dụng và khi bạn đã trả lời tấtcả những câu hỏi đó, bạn sẽ thấy cấu trúc dự án bookr của mìnhmở trong ngăn Project ở bên trái cửa sổ :

Trang 37

Figure 1.13 – The PyCharm project pane

Khung dự án của bạn sẽ trông giống như Hình 1.13 và hiểnthị các thư mục bookr và reviews cũng như tệp manage.py Nếubạn không thấy những thứ này mà thay vào đó là asgi.py,settings.py, urls.py và wsgi.py thì thay vào đó bạn đã mở thư mụcgói bookr Chọn File | Open, sau đó duyệt và mở thư mục dự ánbookr

Trước khi PyCharm biết cách thực thi dự án của bạn để khởiđộng máy chủ phát triển Django, trình thông dịch phải được đặtthành nhị phân Python bên trong môi trường ảo của bạn Việc nàyđược thực hiện trước tiên bằng cách thêm trình thông dịch vào càiđặt trình thông dịch chung.

Trang 38

4 Mở cửa sổ Preferences (macOS) hoặc Settings (Windows/Linux)bên trong PyCharm:

macOS: PyCharm menu | PreferencesWindows và Linux: File | Settings

5 Trong ngăn danh sách tùy chọn ở bên trái, mở mục Project:bookr rồi bấm vào Project Interpreter:

6 Đôi khi, PyCharm có thể tự động xác định môi trường ảo, vì vậytrong trường hợp này, trình thông dịch dự án có thể đã được cungcấp trình thông dịch chính xác Nếu có và bạn thấy Django trongdanh sách các gói, hãy nhấp vào OK để đóng cửa sổ và hoànthành bài tập này.

7 Tuy nhiên, trong hầu hết các trường hợp, trình thông dịchPython phải được đặt thủ công Nhấp vào biểu tượng răng cưa bêncạnh trình đơn thả xuống Python Interpreter, sau đó nhấp vàoAdd…

Trang 39

8 Cửa sổ Add Python Interpreter được hiển thị Chọn nút radioExisting environment, sau đó bấm vào dấu chấm lửng (…) bêncạnh lựa chọn Interpreter Sau đó, bạn nên duyệt và chọn trìnhthông dịch Python cho môi trường ảo của mình.

9 Trên macOS (giả sử bạn gọi là môi trường ảo bookr ), đường

/Users/ben/.virtualenvs/bookr/bin/python3

Trang 40

Trên Windows, nó sẽ ở bất cứ nơi nào bạn tạo môi trường ảo củamình bằng lệnh virtualenv.

Sau khi chọn trình thông dịch, cửa sổ Add Python Interpreter củabạn sẽ giống như Hình 1.15.

11 Bấm OK để đóng cửa sổ Add Python Interpreter.

Bây giờ bạn sẽ thấy cửa sổ tùy chọn chính và Django (và các góikhác trong môi trường ảo của bạn) sẽ được liệt kê (xem Hình1.16).

12 Bấm OK trong cửa sổ Preferences chính để đóng nó PyCharmbây giờ sẽ mất vài giây để lập chỉ mục môi trường của bạn và cácthư viện được cài đặt Bạn có thể xem quá trình này ở thanh trạngthái phía dưới bên phải của nó Đợi quá trình này kết thúc vàthanh tiến trình sẽ biến mất.

Ngày đăng: 10/05/2024, 08:08

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan