بررسی ویژگی provide_automatic_options در Flask 3.0

flask 3 0 view provide automatic options
20 آبان 1403

فلسک یکی از محبوب‌ترین فریم‌ورک‌های وب در پایتون است که برای توسعه سریع و کارآمد وب‌اپلیکیشن‌ها استفاده می‌شود. در نسخه 3.0 این فریم‌ورک تغییرات و بهبودهای زیادی اعمال شده است. یکی از این ویژگی‌ها، provide_automatic_options در کلاس View است. این ویژگی به طور خودکار یک روتر OPTIONS برای تمام درخواست‌هایی که تعریف آن‌ها وجود ندارد، فراهم می‌کند.

این به این معنی است که اگر شما به صورت دستی یک روتر OPTIONS برای یک مسیر خاص تعریف نکرده باشید، Flask به طور خودکار یک پاسخ مناسب برای درخواست‌های OPTIONS ارسال خواهد کرد. این رفتار به ویژه در زمانی اهمیت پیدا می‌کند که با API هایی که از Cross-Origin Resource Sharing (CORS) استفاده می‌کنند، کار می‌کنید.

به‌طور معمول، زمانی که مرورگر برای بررسی اجازه‌های CORS یک درخواست پیش‌نمایش (pre-flight) می‌فرستد، از متود OPTIONS استفاده می‌کند. فراهم کردن یک پاسخ خودکار برای این نوع درخواست‌های می‌تواند زمان توسعه را کاهش داده و خطاهای پیش‌نمایش CORS را از بین ببرد.

در اغلب کاربردهای Flask برای RESTful API، این ویژگی نقش کلیدی دارد زیرا نگه‌داری درخواست‌ها و پاسخ‌های OPTIONS به دستیابی ساده‌تری به سرویس‌های چندمنشؤی کمک می‌کند. علاوه بر این، موجب کاهش کدهای اضافی و تکراری در روت‌های برنامه می‌شود.

حال به نمونه کدی می‌پردازیم که نشان می‌دهد چگونه می‌توانید از provide_automatic_options به نفع خود استفاده کنید:


from flask import Flask, request
from flask.views import View

class MyView(View):
    methods = ['GET', 'POST']

    def dispatch_request(self):
        return 'Hello World!'

app = Flask(__name__)
app.add_url_rule('/my-view', view_func=MyView.as_view('my_view'))

if __name__ == '__main__':
    app.run()

توضیح خط به خط کد

from flask import Flask, request
در این خط ما پکیج Flask و کلاس request را فراخوانی می‌کنیم تا بتونیم از امکانات این فریمورک بهره ببریم.

from flask.views import View
در اینجا، کلاس View را از پکیج views در Flask وارد می‌کنیم. این کلاس پایه‌ای برای ایجاد روت‌های مبتنی بر کلاس است.

class MyView(View):
کلاسی به نام MyView ایجاد می‌کنیم که از View ارث‌بری می‌کند. این به ما اجازه می‌دهد تا متودهای HTTP را به دلخواه پیاده‌سازی کنیم.

methods = ['GET', 'POST']
در اینجا، متودهایی که این View پشتیبانی می‌کند مشخص شده است. در این مثال GET و POST انتخاب شده‌اند.

def dispatch_request(self):
این متودی است که زمانی که یک درخواست به این View فرستاده می‌شود، فراخوانی می‌شود.

return 'Hello World!'
پاسخی که به درخواست ارسال می‌شود را برمی‌گرداند. در اینجا 'Hello World!' به عنوان پاسخ تعیین شده است.

app = Flask(__name__)
یک نمونه از کلاس Flask ایجاد می‌کنیم که نشان‌دهنده اپلیکیشن وب ما است.

app.add_url_rule('/my-view', view_func=MyView.as_view('my_view'))
در اینجا یک URL جدید به اپلیکیشن اضافه می‌کنیم که تابع نمایش‌دهنده آن، یک نمونه از کلاس MyView است.

if __name__ == '__main__':
این شرط بررسی می‌کند که آیا این اسکریپت به صورت مستقیم اجرا می‌شود یا نه. اگر بله، اپلیکیشن را اجرا می‌کند.

app.run()
اپلیکیشن را راه‌اندازی می‌کند و شروع به اجرای سرور داخلی Flask می‌کند.

سوالات متداول

؟

چرا از provide_automatic_options استفاده می‌کنیم؟

؟

آیا می‌توان متودهای دیگری به View اضافه کرد؟

؟

چگونه خطاهای CORS را با استفاده از Flask برطرف کنیم؟