request.POST.get ('sth') so với request.POST ['sth'] - sự khác biệt?


82

Sự khác biệt giữa

request.POST.get('sth')

request.POST['sth']

Không tìm thấy câu hỏi tương tự, cả hai đều hoạt động giống nhau đối với tôi, giả sử tôi có thể sử dụng chúng một cách riêng biệt nhưng có lẽ tôi đã sai, đó là lý do tại sao tôi hỏi. Có ý kiến ​​gì không?

Câu trả lời:


192

request.POST['sth']sẽ nêu ra một KeyErrorngoại lệ nếu 'sth'không có trong request.POST.

request.POST.get('sth')sẽ trở lại Nonenếu 'sth'không có trong request.POST.

Ngoài ra, .getcho phép bạn cung cấp một tham số bổ sung của giá trị mặc định được trả về nếu khóa không có trong từ điển. Ví dụ,request.POST.get('sth', 'mydefaultvalue')

Đây là hành vi của bất kỳ từ điển python nào và không dành riêng cho request.POST.



Hai đoạn mã này giống hệt nhau về chức năng:

Đoạn mã đầu tiên:

try:
    x = request.POST['sth']
except KeyError:
    x = None


Đoạn mã thứ hai:

x = request.POST.get('sth')



Hai đoạn mã này giống hệt nhau về chức năng:

Đoạn mã đầu tiên:

try:
    x = request.POST['sth']
except KeyError:
    x = -1


Đoạn mã thứ hai:

x = request.POST.get('sth', -1)



Hai đoạn mã này giống hệt nhau về chức năng:

Đoạn mã đầu tiên:

if 'sth' in request.POST:
    x = request.POST['sth']
else:
    x = -1


Đoạn mã thứ hai:

x = request.POST.get('sth', -1)

12
+1. Vì đã đề cập rằng .get là hành vi mặc định cho từ điển python.
Tommy Strand

1
"Đây là hành vi của bất kỳ từ điển python nào và không dành riêng cho yêu cầu.POST" Tôi ước tôi đã đọc câu trả lời này vào ngày đầu tiên của tôi với python ... +1!
kikusin

0

Sự khác biệt chính giữa việc truy cập từ điển thông thường và truy cập nó bằng .get () là

Với việc sử dụng một cái gì đó giống như request.POST['sth']sẽ phát sinh một lỗi chính là nếu ket 'sth' không tồn tại. Nhưng sử dụng từ điển phương thức get () cũng sẽ cung cấp cho bạn khả năng xử lý lỗi tốt hơn

request.POST.get('sth')

sẽ trả về không là khóa 'sth không tồn tại' và cũng bằng cách đưa tham số thứ hai cho get () sẽ trả về với nó như một giá trị mặc định.

data = request.POST.get('sth','my_default_value')

nếu khóa 'sth' không tồn tại, giá trị trong dữ liệu sẽ là my_default_value. Đó là lợi thế của việc sử dụng phương thức get () so với việc truy cập từ điển thông thường.


2
Điều gì được trình bày trong câu trả lời này mà chưa có trong câu trả lời được tán thành cao và được chấp nhận?
Stephen Rauch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.