Khi bạn khai báo các tham số chức năng khác không phải là một phần của tham số đường dẫn, chúng sẽ tự động được hiểu là tham số "truy vấn"
from fastapi import FastAPI
app = FastAPI[]
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
@app.get["/items/"]
async def read_item[skip: int = 0, limit: int = 10]:
return fake_items_db[skip : skip + limit]
Truy vấn là tập hợp các cặp khóa-giá trị theo sau
//127.0.0.1:8000/items/
3 trong URL, được phân tách bằng ký tự //127.0.0.1:8000/items/
4Ví dụ, trong URL
//127.0.0.1:8000/items/?skip=0&limit=10
các tham số truy vấn là
5. với giá trị là//127.0.0.1:8000/items/
6//127.0.0.1:8000/items/
7. với giá trị là//127.0.0.1:8000/items/
8//127.0.0.1:8000/items/
Vì chúng là một phần của URL nên chúng là các chuỗi "tự nhiên"
Nhưng khi bạn khai báo chúng với các kiểu Python [trong ví dụ trên, là
//127.0.0.1:8000/items/
9], chúng sẽ được chuyển đổi thành kiểu đó và được xác thực theo kiểu đóTất cả quy trình tương tự áp dụng cho tham số đường dẫn cũng áp dụng cho tham số truy vấn
- Hỗ trợ biên tập viên [rõ ràng]
- Dữ liệu "phân tích cú pháp"
- Xác nhận dữ liệu
- tài liệu tự động
Mặc định¶
Vì tham số truy vấn không phải là phần cố định của đường dẫn nên chúng có thể là tùy chọn và có thể có giá trị mặc định
Trong ví dụ trên, chúng có giá trị mặc định là
//127.0.0.1:8000/items/?skip=0&limit=10
0 và //127.0.0.1:8000/items/?skip=0&limit=10
1Vì vậy, đi đến URL
//127.0.0.1:8000/items/
sẽ giống như đi đến
//127.0.0.1:8000/items/?skip=0&limit=10
Nhưng nếu bạn đi đến, ví dụ
//127.0.0.1:8000/items/
3Các giá trị tham số trong hàm của bạn sẽ là
2. bởi vì bạn đã đặt nó trong URL//127.0.0.1:8000/items/?skip=0&limit=10
1. bởi vì đó là giá trị mặc định//127.0.0.1:8000/items/?skip=0&limit=10
Thông số tùy chọn¶
Theo cách tương tự, bạn có thể khai báo các tham số truy vấn tùy chọn, bằng cách đặt mặc định của chúng thành
//127.0.0.1:8000/items/?skip=0&limit=10
4Trăn 3. 6 trở lênPython 3. 10 trở lên
//127.0.0.1:8000/items/
7//127.0.0.1:8000/items/
8Trong trường hợp này, tham số chức năng
//127.0.0.1:8000/items/?skip=0&limit=10
5 sẽ là tùy chọn và sẽ là //127.0.0.1:8000/items/?skip=0&limit=10
4 theo mặc địnhKiểm tra
Cũng lưu ý rằng FastAPI đủ thông minh để nhận thấy rằng tham số đường dẫn
//127.0.0.1:8000/items/?skip=0&limit=10
7 là tham số đường dẫn và //127.0.0.1:8000/items/?skip=0&limit=10
5 thì không, vì vậy, đây là tham số truy vấnChuyển đổi loại tham số truy vấn¶
Bạn cũng có thể khai báo các loại
//127.0.0.1:8000/items/?skip=0&limit=10
9 và chúng sẽ được chuyển đổiTrăn 3. 6 trở lênPython 3. 10 trở lên
//127.0.0.1:8000/items/
4//127.0.0.1:8000/items/
5Trong trường hợp này, nếu bạn đi đến
//127.0.0.1:8000/items/
6hoặc
//127.0.0.1:8000/items/?skip=0&limit=10
0hoặc
//127.0.0.1:8000/items/?skip=0&limit=10
1hoặc
//127.0.0.1:8000/items/?skip=0&limit=10
2hoặc
//127.0.0.1:8000/items/?skip=0&limit=10
3hoặc bất kỳ biến thể kiểu chữ nào khác [chữ hoa, chữ cái đầu tiên viết hoa, v.v.], hàm của bạn sẽ thấy tham số
//127.0.0.1:8000/items/
30 với giá trị //127.0.0.1:8000/items/?skip=0&limit=10
9 là //127.0.0.1:8000/items/
32. Nếu không thì là //127.0.0.1:8000/items/
33Nhiều đường dẫn và tham số truy vấn¶
Bạn có thể khai báo nhiều tham số đường dẫn và tham số truy vấn cùng lúc, FastAPI biết cái nào là cái nào
Và bạn không cần phải khai báo chúng theo bất kỳ thứ tự cụ thể nào
Họ sẽ được phát hiện theo tên
Trăn 3. 6 trở lênPython 3. 10 trở lên
//127.0.0.1:8000/items/?skip=0&limit=10
4//127.0.0.1:8000/items/?skip=0&limit=10
5Các tham số truy vấn bắt buộc¶
Khi bạn khai báo một giá trị mặc định cho các tham số không phải đường dẫn [hiện tại chúng ta mới chỉ thấy các tham số truy vấn] thì không cần thiết
Nếu bạn không muốn thêm một giá trị cụ thể mà chỉ muốn thêm một giá trị tùy chọn, hãy đặt giá trị mặc định là
//127.0.0.1:8000/items/?skip=0&limit=10
4Nhưng khi bạn muốn thực hiện một tham số truy vấn bắt buộc, bạn có thể không khai báo bất kỳ giá trị mặc định nào
//127.0.0.1:8000/items/?skip=0&limit=10
6Ở đây tham số truy vấn
//127.0.0.1:8000/items/
35 là tham số truy vấn bắt buộc thuộc loại //127.0.0.1:8000/items/
36Nếu bạn mở trong trình duyệt của mình một URL như
//127.0.0.1:8000/items/?skip=0&limit=10
7mà không thêm tham số bắt buộc
//127.0.0.1:8000/items/
35, bạn sẽ thấy lỗi như//127.0.0.1:8000/items/?skip=0&limit=10
8Vì
//127.0.0.1:8000/items/
35 là tham số bắt buộc nên bạn cần đặt tham số này trong URL//127.0.0.1:8000/items/?skip=0&limit=10
9cái này sẽ hiệu quả
//127.0.0.1:8000/items/
0Và tất nhiên, bạn có thể xác định một số tham số theo yêu cầu, một số có giá trị mặc định và một số hoàn toàn tùy chọn.