وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

دریافت درخواست پارامترهای پرس و جو با Flask

0 4
زمان لازم برای مطالعه: 3 دقیقه


پارامترهای پرس و جو بخشی از رشته پرس و جو – بخشی از URL که شامل جفت پارامترهای کلید-مقدار است. به طور معمول، پارامترها در کنار هم ارسال می شوند گرفتن درخواست برای تعیین بیشتر فیلترها روی عملیات:

www.example.com/search؟name=John&location=Miami

پارامترها بعد از ? کاراکتر و هر جفت کلید-مقدار با یک جدا می شود &. فضاها به صورت نمایش داده می شوند %20 و همچنین می تواند به عنوان نشان داده شود +. اینها به مجموعه ای از کلید-مقدار از:

name=John
location=Miami

دستکاری URL با جاوا اسکریپت آسان است – بنابراین اغلب پارامترهای پرس و جو اضافه می شوند فیلترها به جستجوها علاوه بر این، با تنظیم محتوا روی مبتنی بر صفحه نمایش روی پارامترهای قابل تکرار، به جای بدنه یک درخواست، نتایج فقط با ارسال یک لینک با پارامترها بین کاربران قابل اشتراک گذاری است!

برای مثال، روی AirBnB – اگر کاملاً انعطاف پذیر هستید روی مکان، تاریخ ها و آرزوی پیشنهاد خودکار، یک کلیک شما را به موارد زیر هدایت می کند:

https://www.airbnb.com/s/homes؟refinement_paths%5B%5D=%2Fhomes&date_picker_type=flexible_dates&search_mode=flex_destinations_search&search_type=AUTOSUGGEST

در اینجا چند پارامتر وجود دارد، مانند refinement_paths، date_picker_type، search_mode، و search_type، هر کدام یک ارزش دارند.

در این راهنمای کوتاه، نگاهی به آن خواهیم داشت روش دریافت پارامترهای پرس و جو درخواست GET در Flask.

پارامترهای Query را در Flask دریافت کنید

from flask import Flask, request

@app.route('/search', methods=('GET'))
def search():
    args = request.args
    return args

این request.args میدان یک است ImmutableMultiDict:

print(type(args))

به راحتی می توان آن را به یک فرهنگ لغت معمولی از طریق:

print(type(args.to_dict()))

علاوه بر این، شما می توانید برای یک جستجو کنید خاص کلید واژه نامه از طریق get() روش، اگر کلید با لیست آرگومان از پیش تعیین شده مطابقت نداشته باشد، خطا را برمی گرداند:

print(args.get("name"))

شما می توانید به علاوه قالب مقدار به نوع دیگری مانند int یا str در حین گرفتن آن همچنین می توانید a را تنظیم کنید پیش فرض مقدار اگر مقدار قبلاً موجود نباشد. به عنوان مثال، الف name پارامتر احتمالاً یک رشته خواهد بود، اما price پارامتر ممکن است یک عدد صحیح باشد:

args.get("name", default="", type=str)
args.get("price", default=0, type=int)

اگر کلیدی را که وجود ندارد جستجو کنید – a None برگردانده می شود. به این ترتیب، می توانید بررسی کنید که آیا یک پارامتر پرس و جو گم شده است یا خیر، و مطابق با آن عمل کنید – یک مقدار پیش فرض را اختصاص دهید یا فقط از آن استفاده نکنید.

بیایید یک درخواست GET را با a به نقطه پایانی ارسال کنیم name و location:

$ curl "localhost:5000/search؟name=John&location=Miami"

این منجر به:

{"location":"Miami","name":"John"}

بررسی کنید که آیا پارامترهای Query None هستند یا خیر

هنگام بهره برداری روی پارامترها، معمولاً باید بررسی کنید که آیا این پارامترها هستند یا خیر None و بر اساس آن عمل کنید. این را خوشبختانه می توان به راحتی با دریافت یک کلید مورد انتظار و بررسی اینکه آیا در فرهنگ لغت وجود دارد یا خیر، انجام داد!

بیایید یک پایگاه داده ساختگی ایجاد کنیم – فقط یک فرهنگ لغت از کاربران و مکان آنها. سپس، بر اساس روی پارامترهای ارسال شده در URL، ما این فرهنگ لغت را فیلتر می کنیم و کاربران مطابق با معیارهای تعریف شده توسط پارامترها را برمی گردانیم:

from flask import Flask, request

db_users = {
    "John" : "Miami",
    "David" : "Miami",
    "Jane" : "London",
    "Gabriella" : "Paris",
    "Tanaka" : "Tokyo"
}

@app.route('/search', methods=('GET'))
def search():
    args = request.args
    name = args.get('name')
    location = args.get('location')

    
    if None not in (name, location):
        result = {key: value for key, value in db_users.items() if key == name and value == location}
    elif name is not None:
        result = {key: value for key, value in db_users.items() if key == name}
    elif location is not None:
        result = {key: value for key, value in db_users.items() if value == location}

    return result

در اینجا – ما آن را استخراج می کنیم name و location از لیست پارامترها اگر هیچ کدام وجود ندارد – ممکن است بخواهید همه کاربران را برگردانید یا اصلاً هیچ کدام را برگردانید. اگر می خواهید همه آنها را برگردانید – آن را لغو نظر کنید result = db_users خط

اگر هر دو name و location وجود دارد، ما فیلتر می کنیم db_users توسط هر دو پارامتر اگر فقط یکی وجود داشته باشد – آن را فقط با استفاده از پارامتر فعلی فیلتر می کنیم.

حال، اگر یک درخواست GET با هر دو یا یک پارامتر ارسال کنیم، با استقبال مواجه خواهیم شد:

$ curl "localhost:5000/search؟name=John&location=Miami"
{"John":"Miami"}

$ curl "localhost:5000/search؟name=John"
{"John":"Miami"}

$ curl "localhost:5000/search؟location=Miami"
{"David":"Miami","John":"Miami"}

دو نفر در میامی قرار دارند، بنابراین تنها با استفاده از پارامتر جستجوی واحد، ما دو کاربر را شبکه می کنیم. فقط یک John در فرهنگ لغت وجود دارد، بنابراین فقط John برای دو عبارت اول بازگردانده می شود.

نتیجه

در این راهنما، ما نگاهی به روش دریافت پارامترهای پرس و جو یک درخواست HTTP GET در Flask انداخته ایم.

ما همچنین نگاهی به روش بررسی اینکه آیا پارامترها هستند یا خیر، انداخته ایم None و روش رسیدگی به کمبود آن با یک پایگاه داده ساختگی.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-07 16:54:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید