Django 04: View nâng cao

Nguồn: http://cloudera.com/

Như chúng ta đã biết view nhận HttpRequest object làm tham số đầu tiên và trả về HttpResponse objects. Django sử dụng request và response objects để lưu trữ, vận chuyển các trạng thái xuyên suốt ứng dụng. Hôm nay ta sẽ tìm hiểu kĩ về chúng.

HttpRequest object

Khi người dùng yêu cầu một trang web, Django sẽ tạo một HttpRequest object chứa các thông tin về metadata của request. Sau đó object này được truyền tới view thích hợp (như là tham số đầu tiên của view).

Một số thuộc tính và phương thức thường dùng:

Thuộc tính

HttpRequest.method

Một chuổi đại diện cho HTTP method của request (và được viết hoa). Với function base view không có sự liên kết với với HTTP method ta có thể sử dụng thuộc tính này để xác định phần code thực hiện cho mỗi method khác nhau.

HttpRequest.body

Chứa raw HTTP request body như là một chuỗi byte. Nó sẽ giúp chúng ta thuận tiện hơn trong việc xử lí xử lí data với nhiều cách khác nhau hơn là những HTML forms thông thường: binary images, XML payload, … Để xử lí các forms data thông thường sử dụng HttpRequest.POST. Ta cũng có thể đọc data từ HttpRequest sử dụng file-like interface: HttpRequest.read().

HttpRequest.GET

Một đối tượng giống dictionary chứa tất cả các tham số của HTTP GET.
Ví dụ để lấy giá trị của tham số name trên url:

HttpRequest.POST
Tương tự như HttpRequest.GET nhưng nó chứa các tham số của HTTP POST, và chú ý rằng nó không kèm thông tin của file upload (thông tin này nằm ở trong HttpRequest.FILES).

HttpRequest.COOKIES
Là một python dictionary chứa tất cả cookies. keys và value là string.

HttpRequest.FILES
Là một dictionary-like object chứa tất cả file đã được upload. Mỗi key ở FILE là name của input:

Mỗi value của FILES là một đối tượng UploadedFile
Chú ý rằng FILES sẽ chỉ chứa data nếu request method là POST và <form > được post có: enctype=”multipart/form-data”. Ngược lại FILES sẽ là dictionary-like object rỗng.

Phương thức

HttpRequest.get_host()
Trả về originating host của request sử dụng HTTP_X_FORWARDED_HOST (nếu như USE_X_FORWARDED_HOST được kích hoạt) và HTTP_HOST headers. Nếu như chúng không được cung cấp giá trị thì phương thức sẽ kết hợp 2 giá trị SERVER_NAME và SERVER_PORT để trả về.

Ví dụ: “127.0.0.1:8000”

HttpRequest.is_secure()
Trả về True nếu request là an toàn (request được thực hiện với giao thức https)

HttpRequest.is_ajax()
Trả về True nếu request là XMLHttpRequest (bằng cách kiểm tra giá trị HTTP_X_REQUESTED_WITH header cho giá trị string ‘XMLHttpRequest’).

HttpRequest.read(size=None), HttpRequest.readline(), HttpRequest.readlines(), HttpRequest.xreadlines(), HttpRequest.__iter__()
Tập các phương thức implementing file-like interface cho nhiệm vụ đọc từ một HttpRequest instance.

HttpResponse object

Ngược lại với HttpRequest, HttpResponse được tạo ra tự động bởi django và chúng ta chịu trách nhiệm với nó. Mỗi view sẽ trả về một đối tượng HttpResponse object.

Cách sử dụng:

Passing strings

Cách sử dụng thông thường là truyền nội dung của page vào, như một string tới hàm khởi tạo của HttpResponse.

Nếu muốn thêm nội dung theo từng bước ta có thể sử dụng reponse như là file-like object.

Setting header fields

Để tạo và xóa header cho reponse, ta xử lí nó như một dictionary.

Thuộc tính

HttpResponse.content
Một bytestring đại diện cho nội dung, được encode từ một Unicode object nếu cần thiết.

HttpResponse.charset
Một string biểu thị charset cái mà response sẽ được encode.

HttpResponse.status_code
Là HTTP status code cho response.

HttpResponse.closed
Trả về True nếu reponse đã được đóng.

Phương thức

HttpResponse.__init__(content=”, content_type=None, status=200, reason=None, charset=None)
Hàm khởi tạo của HttpResponse.
– content: là một interator hoặc string. Nội dung trả về.
– content_type: là MIME type
– status là the HTTP status code cho response.
– reason là the HTTP response phrase. Nếu không được cung cấp, một giá trị phrase mặc định sẽ được sử dụng.
– charset: charset cái mà response sẽ được encode.

HttpResponse.has_header(name)
Trả về True nếu tồn tại header name (không phân biệt hoa thường)

HttpResponse.setdefault(header, value)
Thiết lập header nếu nó chưa được thiết lập

HttpResponse.set_cookie(key, value=”, max_age=None, expires=None, path=’/’, domain=None, secure=None, httponly=False)
Thiết lập một cookie.

HttpResponse.delete_cookie(key, path=’/’, domain=None)
Xóa một cookie

HttpResponse subclasses

Django hỗ trợ một số HttpResponse subclasses xử lí các loại khác nhau của HTTP responses.

HttpResponseRedirect: Dùng để chuyển hướng url. Tham số khởi tạo đầu tiên là đường dẫn chuyển hướng tới. Nó có thể là một đường dẫ đầy đủ (‘https://www.yahoo.com/search/’) hoặc một được dẫn tuyệt đối không kèm tên miền (ví dụ ‘/search/’), hoặc một đường dẫn tương đối (ví dụ ‘search/’).

HttpResponseNotModified: Hàm khởi tạo không nhận bất kì tham số hay content nào. Sử dụng nó để chỉ ra rằng trang chưa được thay đổi kể từ lần request cuối cùng. (status code là 304)
Tương tự: HttpResponseBadRequest trả về 400, HttpResponseNotFound trả về 404, HttpResponseForbidden trả về 403, HttpResponseNotAllowed trả về 405. HttpResponseGone trả về 410 và HttpResponseServerError trả về 500 status.

JsonResponse: hỗ trợ tạo một JSON-encoded response. Cũng giống như HttpResponse nhưng có một vài sự khác biệt:

– Nó có Content-Type mặc định là application/json.
– Tham số đầu tiên data nên là một python dict. Nếu tham số safe được thiết lập là False, thì data có thể là bất kì JSON-serializable object.

The following two tabs change content below.

Latest posts by Cuong Nguyen (see all)