2009-09-23 52 views
6

thứ đơn giản ở đây ...kiểm tra cho sự tồn tại cookie trong Django

nếu tôi cố gắng tham khảo một cookie trong Django qua

request.COOKIE["key"] 

nếu cookie không tồn tại mà sẽ ném một lỗi quan trọng.

Đối với Django GETPOST, vì chúng là QueryDict đối tượng, tôi chỉ có thể làm

if "foo" in request.GET 

đó là tuyệt vời tinh vi ...

gì là điều gần gũi nhất với này cho cookie đó không phải là một khối Thử/Bắt, nếu có ...

Trả lời

20

request.COOKIES là từ điển Python chuẩn, do đó cú pháp giống nhau hoạt động.

Một cách khác để làm việc đó là:

request.COOKIES.get('key', 'default') 

mà trả về giá trị nếu phím tồn tại, nếu không 'mặc định' - bạn có thể đặt bất cứ điều gì bạn thích ở vị trí của 'mặc định'.

5

Đầu tiên, nó là

request.COOKIES 

không request.COOKIE. Người khác sẽ ném cho bạn một lỗi.

Thứ hai, đó là một cuốn từ điển (hoặc, từ điển giống như) đối tượng, vì vậy:

if "foo" in request.COOKIES.keys() 

sẽ cung cấp cho bạn những gì bạn cần. Nếu bạn muốn nhận được giá trị của cookie, bạn có thể sử dụng:

request.COOKIES.get("key", None) 

sau đó, nếu không có chìa khóa "key", bạn sẽ nhận được một None thay vì một ngoại lệ.

+2

Vì python 2.2, bạn có thể sử dụng 'if' foo 'trong request.COOKIES' - không cần phải thêm '.keys()' –

+1

ngay. Có lẽ nó chỉ là tôi, nhưng tôi thích phiên bản dài hơn (có thể là một vấn đề làm việc với pre-2.2 trong một thời gian dài). Đó là đối xứng hơn và nhiều hơn nữa tiềm ẩn những gì tôi kiểm tra nếu tôi sử dụng: trong "foo" trong dict.keys() và nếu "bar" trong dict.values ​​() ... – kender

+0

@kender, chỉ có một nhược điểm của ' "foo" trong dict.keys() '-' dict.keys() 'tạo ra một danh sách mà sau đó rác được thu thập - phí bổ sung. – warvariuc

Các vấn đề liên quan