Cách chuyển tham số truy vấn trong URL Python

❮ Mô-đun Yêu cầu


Thí dụ

Gửi yêu cầu tới một trang web và trả về mã trạng thái

yêu cầu nhập khẩu

x = yêu cầu. nhận ('https. //w3schools. com')
in(x. status_code)

Chạy ví dụ »


Định nghĩa và cách sử dụng

Phương thức get() gửi yêu cầu GET đến url đã chỉ định


cú pháp

yêu cầu. get(url, params={key. giá trị}, đối số)

args có nghĩa là không hoặc nhiều đối số được đặt tên trong bảng tham số bên dưới. Thí dụ

yêu cầu. nhận (url, thời gian chờ = 2. 50)


Giá trị tham số

Tham sốMô tảurlDùng thửBắt buộc. Url của requestparamsDùng thửTùy chọn. Một từ điển, danh sách các bộ dữ liệu hoặc byte để gửi dưới dạng chuỗi truy vấn
Default Noneallow_redirectsTry itOptional. Boolean để bật/tắt chuyển hướng
Mặc định True (cho phép chuyển hướng)authDùng thửTùy chọn. Một bộ để kích hoạt xác thực HTTP nhất định
Mặc định Nonechứng chỉDùng thửTùy chọn. Một Chuỗi hoặc Tuple chỉ định tệp hoặc khóa chứng chỉ
Mặc định NonecookiesDùng thửTùy chọn. Từ điển cookie để gửi đến url đã chỉ định
Tiêu đề None mặc địnhDùng thửTùy chọn. Một từ điển các tiêu đề HTTP để gửi đến url đã chỉ định
Mặc định NoneproxiesDùng thửTùy chọn. Một từ điển của giao thức cho url proxy
Mặc định NonestreamDùng thửTùy chọn. Một dấu hiệu Boolean nếu phản hồi nên được tải xuống ngay lập tức (Sai) hoặc phát trực tuyến (Đúng)
Thời gian chờ mặc định của FalseDùng thửTùy chọn. Một số hoặc một bộ, cho biết cần đợi bao nhiêu giây để máy khách tạo kết nối và/hoặc gửi phản hồi
Mặc định None có nghĩa là yêu cầu sẽ tiếp tục cho đến khi kết nối bị đóngxác minhHãy thử
Dùng thửTùy chọn. Chỉ báo Boolean hoặc Chuỗi để xác minh chứng chỉ TLS của máy chủ hay không
Mặc định True

Giá trị trả về

Phương thức get() trả về một yêu cầu. đối tượng phản hồi


❮ Mô-đun Yêu cầu


Chuỗi truy vấn thường được tạo từ các tham số truy vấn. Flask cung cấp giải pháp vượt trội để truy cập các tham số truy vấn được phân tích cú pháp. Trong hầu hết các trường hợp, truy cập các tham số truy vấn là đủ. Nhưng nếu bạn muốn truy cập chính chuỗi truy vấn, bạn có thể làm như vậy bằng cách truy cập thuộc tính query_string của đối tượng yêu cầu

Sự khác biệt giữa Chuỗi truy vấn và Tham số truy vấn

Thêm chuỗi truy vấn vào URL là cách phổ biến để chuyển dữ liệu đến ứng dụng web. Chuỗi truy vấn được tạo thành từ các khóa và giá trị tùy ý được thêm vào URL sau ký tự dấu chấm hỏi (?)

Ví dụ: trong URL sau

http://example.com?language=python

Chuỗi truy vấn là language=python. Trong ứng dụng của chúng tôi, chúng tôi đề cập đến 'ngôn ngữ' là một tham số truy vấn và 'trăn' là giá trị của nó

Các tham số truy vấn có thể được phân tách bằng ký tự dấu và (&), như vậy

http://127.0.0.1:5000/?language=python&framework=flask
0

đối tượng yêu cầu

Flask cung cấp một đối tượng yêu cầu chứa tất cả các loại thông tin về yêu cầu HTTP hiện tại

Ví dụ: bạn có thể truy cập URL hoàn chỉnh bằng chuỗi truy vấn bằng cách truy cập thuộc tính

http://127.0.0.1:5000/?language=python&framework=flask
1. như vậy

# import main Flask class and request object
from flask import Flask, request

# create the Flask app
app = Flask(__name__)


@app.route('/')
def query_example():
    print(request.url)  # request.url property
    return 'Query String Example'


if __name__ == '__main__':
    app.run(debug=True, port=5000)

Nếu bạn chạy đoạn mã trên và gửi yêu cầu tới

http://127.0.0.1:5000/?language=python&framework=flask
2

Bạn sẽ nhận được đầu ra sau trên thiết bị đầu cuối của mình

http://127.0.0.1:5000/?language=python&framework=flask

Truy cập chuỗi truy vấn

Nếu bạn chỉ muốn chuỗi truy vấn, bạn có thể truy cập nó như vậy

print(request.query_string)

Bạn sẽ nhận được đầu ra sau

b'language=python&framework=flask'

Đây là giá trị thô của chuỗi truy vấn. Cách ưa thích để truy cập các tham số truy vấn là sử dụng thuộc tính

http://127.0.0.1:5000/?language=python&framework=flask
3

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"

________số 8_______

Truy vấn là tập hợp các cặp khóa-giá trị đi sau

http://127.0.0.1:8000/items/
3 trong một URL, được phân tách bằng
http://127.0.0.1:8000/items/
4 ký tự

Ví dụ, trong URL

http://127.0.0.1:8000/items/?skip=0&limit=10

các tham số truy vấn là

  • http://127.0.0.1:8000/items/
    
    5. với giá trị là
    http://127.0.0.1:8000/items/
    
    6
  • http://127.0.0.1:8000/items/
    
    7. với giá trị là
    http://127.0.0.1:8000/items/
    
    8

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 loại Python (trong ví dụ trên, là

http://127.0.0.1:8000/items/
9), chúng sẽ được chuyển đổi thành loại đó và được xác thực theo nó

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ó các giá trị mặc định là

http://127.0.0.1:8000/items/?skip=0&limit=10
0 và
http://127.0.0.1:8000/items/?skip=0&limit=10
1

Vì vậy, đi đến URL

http://127.0.0.1:8000/items/

sẽ giống như đi đến

http://127.0.0.1:8000/items/?skip=0&limit=10

Nhưng nếu bạn đi đến, ví dụ

http://127.0.0.1:8000/items/?skip=20

Các giá trị tham số trong hàm của bạn sẽ là

  • http://127.0.0.1:8000/items/?skip=0&limit=10
    
    2. bởi vì bạn đã đặt nó trong URL
  • http://127.0.0.1:8000/items/?skip=0&limit=10
    
    1. bởi vì đó là giá trị mặc định

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

http://127.0.0.1:8000/items/?skip=0&limit=10
4

Trăn 3. 6 trở lênPython 3. 10 trở lên

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

Trong trường hợp này, tham số chức năng

http://127.0.0.1:8000/items/?skip=0&limit=10
5 sẽ là tùy chọn và sẽ là
http://127.0.0.1:8000/items/?skip=0&limit=10
4 theo mặc định

Kiểm tra

Cũng lưu ý rằng FastAPI đủ thông minh để nhận thấy rằng tham số đường dẫn

http://127.0.0.1:8000/items/?skip=0&limit=10
7 là tham số đường dẫn và
http://127.0.0.1:8000/items/?skip=0&limit=10
5 thì không, vì vậy, đây là tham số truy vấn

Chuyển đổi loại tham số truy vấn

Bạn cũng có thể khai báo

http://127.0.0.1:8000/items/?skip=0&limit=10
9 loại và chúng sẽ được chuyển đổi

Trăn 3. 6 trở lênPython 3. 10 trở lên

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

Trong trường hợp này, nếu bạn đi đến

http://127.0.0.1:8000/items/foo?short=1

hoặc là

http://127.0.0.1:8000/items/?skip=0&limit=10
0

hoặc là

http://127.0.0.1:8000/items/?skip=0&limit=10
1

hoặc là

http://127.0.0.1:8000/items/?skip=0&limit=10
2

hoặc là

http://127.0.0.1:8000/items/?skip=0&limit=10
3

hoặ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ố

http://127.0.0.1:8000/items/?skip=20
0 với giá trị
http://127.0.0.1:8000/items/?skip=0&limit=10
9 là
http://127.0.0.1:8000/items/?skip=20
2. Nếu không thì là
http://127.0.0.1:8000/items/?skip=20
3

Nhiều tham số đường dẫn và 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

http://127.0.0.1:8000/items/?skip=0&limit=10
4

http://127.0.0.1:8000/items/?skip=0&limit=10
5

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ỉ đặt giá trị đó là tùy chọn, hãy đặt giá trị mặc định là

http://127.0.0.1:8000/items/?skip=0&limit=10
4

Như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

http://127.0.0.1:8000/items/?skip=0&limit=10
6

Ở đây tham số truy vấn

http://127.0.0.1:8000/items/?skip=20
5 là tham số truy vấn bắt buộc thuộc loại
http://127.0.0.1:8000/items/?skip=20
6

Nếu bạn mở trong trình duyệt của mình một URL như

http://127.0.0.1:8000/items/?skip=0&limit=10
7

mà không thêm tham số bắt buộc

http://127.0.0.1:8000/items/?skip=20
5, bạn sẽ thấy lỗi như

http://127.0.0.1:8000/items/?skip=0&limit=10
8

http://127.0.0.1:8000/items/?skip=20
5 là tham số bắt buộc nên bạn cần đặt tham số đó trong URL

http://127.0.0.1:8000/items/?skip=0&limit=10
9

cái này sẽ hiệu quả

http://127.0.0.1:8000/items/
0

Và 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.

Làm cách nào để chuyển tham số tới URL API?

Truyền tham số chuỗi truy vấn cho hàm Lambda phụ trợ .
Mở bảng điều khiển Cổng API, sau đó chọn API của bạn
Trong ngăn Tài nguyên, chọn phương thức HTTP được định cấu hình. .
Trong khung Thực thi Phương thức, chọn Yêu cầu Phương thức
Mở rộng danh sách thả xuống Tham số chuỗi truy vấn URL, sau đó chọn Thêm chuỗi truy vấn

URL bài đăng có thể có tham số truy vấn không?

Nếu bạn biết các tham số URL cho bài đăng biểu mẫu của mình khi trang HTML được gửi tới ứng dụng khách, bạn có thể gắn các tham số URL đó vào thuộc tính hành động của biểu mẫu, nếu không thì JavaScript có thể đặt tham số URL khi biểu mẫu được gửi

Làm cách nào để đọc thông số từ URL trong Python?

Phương pháp #1. Sử dụng urllib. phân tích cú pháp. parse_qs() .