سرور توسعه

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

هشدار

از محیط توسعه در زمان پیاده کردن اپلیکیشن استفاده نکنید. زیرا فقط برای استفاده در حین توسعه محلی در نظر گرفته شده. و همچنین برای کارآمدی, پایداری و امن بودن طراحی نشده.

برای دیدن امکانات پیاده سازی Deploying to Production را ببینید.

کامندلاین

راه پیشنهادی برای راه‌اندازی محیط توسعهٔ سرور دستور flask run می‌باشد. از سوییچ app-- برای اشاره به برنامه خود و همچنین از debug-- برای فعال کردن حالت دیباگر استفاده کنید.

$ flask --app hello run --debug

این دستور حالت خطایاب را فعال می‌کند که شامل خطایاب تعاملی و ریلودر(reloader) است؛ سپس سرور را بر http://localhost:5000 راه اندازی می‌کند. برای دیدن امکانات قابل استفاده از flask run --help و همچنین از Command Line Interface برای جزئیات دستورالعمل‌های مربوط به پیکربندی و استفاده از خط دستور استفاده کنید.

آدرس در حال استفاده

زمانی که سرورد درحال راه‌اندازی باشد و برنامهٔ دیگری در حال استفاده از پورت 5000 باشد، یک OSError را خواهید دید. احتمالا یکی از پیام‌های بعدی باشد:

  • OSError: [Errno 98] Address already in use

  • OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

یا برنامه دیگر را شناسایی و متوقف کنید و یا از flask run --port "5001 برای استفاده از یک پورت دیگر استفاده کنید.

می‌توانید از netstat یا lsof و یا از دیگر ابزارهای سیستم‌عامل برای شناسایی شماره پروسه‌ای که درحال استفاده از یک پورت است استفاده کنید تا آن پروسه را متوقف کنید. مثال زیر شمارهٔ پروسه 6847 را در حال استفاده از پورت 5000 نشان می‌دهد.

$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python

مک اواس مونته‌ری و دیگر نسخه‌های مک، به صورت خودکار سرویسی را راه‌اندازی می‌کنند که از پورت 5000 استفاده می‌کند. می‌توانید به جای استفاده از پورتی دیگر، در System Preferences به دنبال «AirPlay Receiver» باشید و آن را خاموش کنید.

خطاهای به تعویق افتاده در بارگزاری مجدد

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

اگر خطای سینتکس قبل از فراخوانی flask run رخ دهد، برنامه فوراً از کار خواهد افتاد و تا زمانی که سایت قابل دسترسی باشد، علت‌یابی(traceback) را به جای منتظر ماندن نمایش خواهد داد. این در ابتدا جهت بیشتر نمایان کردن خطاهاست و در عین حال به سرور اجازه می‌دهد تا خطاها را هنگام ریلود مدیریت کند.

در کد

همچنین سرور توسعه با متود Flask.run() می‌تواند از پایتون راه اندازی شود. این متود ورودی‌های مشابه امکانات خط دستوری را برای کنترل کردن سرور دریافت می‌کند. تفاوت اصلی آن با دستور خط دستوری این است که درصورت بروز خطا هنگام بارگزاری مجدد، سرور کرش خواهد کرد. debug=True را می‌توان برای فعال سازی حالت خطایابی پاس کرد.

فراخوانی را در یک بلاک اصلی قرار دهید، در غیر این صورت هنگام تلاش برای وارد کردن و اجرای برنامه با سرور تداخل ایجاد خواهد کرد.

if __name__ == "__main__":
    app.run(debug=True)
$ python hello.py