Django 05: URL Dispatcher

Nguồn: Leonardo Giordani

Rõ ràng URL scheme là một phần quan trọng  đối với các ứng dụng web có chất lượng cao. Django cho phép chúng ta thiết kế các URL cho website một cách dễ dàng và linh hoạt.

Trình tự xử lí request của django

Khi người dùng requests một page tới Django website:

  1. Django xác định root URLconf module để sử dụng. Thông thường nó được cấu hình trong file settings.py ROOT_URLCONF , nhưng nếu HttpRequest object có thuộc tính urlconf (thiết lập ở middleware) nó sẽ được sử dụng thay vì giá trị cấu hình của ROOT_URLCONF.
  2. Django load module này và tìm biến có tên urlpatterns (là một list các django.conf.urls.url() do chúng ta định nghĩa)
  3. Django so sánh từng URL pattern với request đến theo thứ tự và dùng lại ở URL pattern đầu tiên phù hợp
  4. Nếu có URL pattern phù hợp Django gọi view tương ứng
  5. Nếu không có URL pattern phù hợp, một Exception sẽ được ném ra.

Ví dụ:

Chú ý:

  • Không cần dấu “/” ở đầu URL ví dụ “^hello/” chứ không phải “^/hello/”
  • ‘r’ ở trước mỗi regular expression là tùy chọn nhưng nên có. Nó sẽ báo cho python rằng đó là một raw string – không có cái gì trong string được escaped.

Tổ chức urls

Để thuận tiện cho việc quản lí url. Ở mỗi app ta sẽ tạo một file urls.py riêng, viết các url của app đấy vào trong file này sau đó include nó vào trong file root urls

Thêm view functions ở file book/views.py

Tạo file book/urls.py với nội dung:

Include book/urls vào file bookshop/urls.py

Khi đó url tương ứng với list_books view là: /book/list

Xác định tham số trên url truyền vào view

Ta có thể truyền tham số từ url vào view sử dụng cặp dấu “()” bằng 2 cách.

Cách 1: Theo vị trí (gọi là non-named arguments)

Nội dung ở trong cặp dấu “()” là biểu thức chính quy

Ví dụ với url :

Ta có thể dùng trong view:

Truy cập url: /book/comic/1 ta sẽ được kết quả

Cách 2: Theo tên biến (gọi là named arguments)

Nội dung trong cặp dấu ngoặc”()” là (?P<ten_bien>regex)

Ví dụ:

Sử dụng trong views:

Chú ý:

– Nếu có bất kì named arguments nào được sử dụng trong url thì django sẽ bỏ qua các non-named arguments.

– Tham số truyền vào view luôn luôn ở dạng string

Naming URL patterns và URL namespaces

Để thuận tiện cho việc lấy url ở view, template và chỉnh sửa đường dẫn url sau này, ta sẽ sử dụng Naming URL patterns và URL namespaces. Cụ thể ta sẽ Naming URL patterns bằng cách truyền tham số name ở hàm url và sử dụng tham số namespace ở hàm include để đặt namespaces cho url.

Ví dụ như url  “book_detail” ở trên ta có thể gọi nó trong view:

The following two tabs change content below.

Latest posts by Cuong Nguyen (see all)