کار کردن با پوسته(shell)

Changelog

جدید در نسخه 0.3.

یکی از دلایلی که همه پایتون را دوست دارند پوسته تعاملی است. اساساً به شما امکان می دهد دستورات پایتون را در آن واحد اجرا کنید و بلافاصله نتایج را دریافت کنید. فلاسک به خودی خود پوسته تعاملی ندارد، زیرا نیازی به تنظیمات خاصی ندارد، فقط برنامه خود را وارد کنید و شروع به بازی کنید.

با این حال، کمک‌های مفیدی وجود دارند که کارکردن در پوسته را به تجربه‌ای دلپذیرتر تبدیل می‌کنند. مشکل اصلی جلسات کنسول تعاملی این است که مانند مرورگر درخواستی را راه‌اندازی نمی‌کنید، به این معنی که g، request و موارد دیگر در دسترس نیستند. اما کدی که می خواهید آزمایش کنید ممکن است به آنها بستگی داشته باشد، پس چه کاری می توانید انجام دهید؟

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

به طور کلی توصیه می شود ابتدا The Request Context را بخوانید.

رابط خط فرمان

با شروع با Flask 0.11، روش توصیه شده برای کار با پوسته دستور flask shell است که بسیاری از این کارها را به صورت خودکار برای شما انجام می دهد. به عنوان مثال، پوسته به طور خودکار با یک زمینه برنامه بارگذاری شده مقداردهی اولیه می شود.

برای اطلاعات بیشتر به Command Line Interface مراجعه کنید.

ایجاد یک زمینه درخواست

ساده ترین راه برای ایجاد یک زمینه درخواست مناسب از پوسته، استفاده از متد test_request_context است که برای ما یک RequestContext ایجاد می کند:

>>> ctx = app.test_request_context()

معمولاً از عبارت with برای فعال کردن این شی درخواست استفاده می‌کنید، اما در پوسته استفاده از push() و pop() آسان‌تر است. روش‌های به صورت دستی:

>>> ctx.push()

از آن جا به بعد می‌توانید با شی درخواست کار کنید تا زمانی که pop را فراخوانی کنید:

>>> ctx.pop()

شلیک قبل و بعد از درخواست

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

با این حال این کار را می توانید به راحتی خودتان انجام دهید. فقط کافی است از preprocess_request() استفاده کنید:

>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()

به خاطر داشته باشید که تابع preprocess_request() ممکن است یک شی پاسخ را برگرداند، در این صورت فقط آن را نادیده بگیرید.

برای خاموش کردن یک درخواست، باید قبل از اینکه توابع پس از درخواست (که توسط process_response() فعال می شوند) روی یک شی پاسخ، کمی فریب دهید:

>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()

توابع ثبت شده به عنوان teardown_request() به طور خودکار هنگامی که متن ظاهر می شود فراخوانی می شود. بنابراین این مکان عالی برای از بین بردن خودکار منابعی است که در زمینه درخواست (مانند اتصالات پایگاه داده) مورد نیاز بودند.

بهبود بیشتر تجربه کار با پوسته

اگر ایده آزمایش کردن در یک پوسته را دوست دارید، برای خود یک ماژول با چیزهایی ایجاد کنید که می‌خواهید به جلسه تعاملی خود وارد کنید. در آنجا می‌توانید روش‌های کمکی بیشتری برای چیزهای رایج مانند تنظیم اولیه پایگاه داده، حذف جداول و غیره تعریف کنید.

فقط آنها را در یک ماژول (مانند 'shelltools') قرار دهید و از آنجا وارد کنید:

>>> from shelltools import *