فلسک در مقابل جانگو

گردآوری و تالیف : ارسطو عباسی
تاریخ انتشار : 21 مرداد 1397
دسته بندی ها : پایتون

فلسک و جانگو دو مورد از محبوب‌ترین فریمورک‌های وب برای پایتون هستند. در این مطلب می‌خواهیم به نکاتی اشاره کنیم که وقت انتخاب یکی از این دو مورد باید در نظر داشته باشید. همچنین برای اینکه یک مرحله آشنایی بیشتری از هر کدام داشته باشیم، قصد داریم که یک اپلیکیشن ساده 'Hello World’ را با آن‌ها بسازیم. 

چرا من به یک فریمورک وب نیاز دارم و در کل به چه چیزی فریمورک وب می‌گویند؟

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

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

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

بزرگ‌ترین تفاوت‌های میان فلسک و جانگو عبارت است از:

  • فلسک تقریبا به شما امکانات محدودی را می‌دهد و بخشی از فرایند توسعه را به دوش توسعه‌دهنده می‌گذارد. 
  • جانگو از فلسفه «batteries included» پیروی می‌کند و تقریبا امکانات بسیاری را به صورت پیشفرض در اختیار کاربران قرار می‌دهند.

حال بیایید کمی با جزئیات بیشتر تفاوت‌ها را بررسی کنیم.

مقایسه سریع

اگر به دنبال جواب‌های سریعی هستید، پس بدانید که این بخش برای شماست!

تضاد‌های اصلی

  • فلسک سادگی، انعطاف‌پذیری و کنترل کامل را به شما ارائه می‌دهد. (تقریبا می‌توانید روی هر جنبه از آن کنترل داشته باشید).
  • جانگو تجربه کاملی را به شما ارائه می‌دهد: شما  پنل ادمین، رابط‌های بانک اطلاعاتی، ORM و ساختار درست دایرکتوری برای اپلیکیشن‌ها و پروژه‌ها را به صورت پیشفرض دریافت می‌کنید.

من باید … را انتخاب کنم اگر:

  • فلسک. اگر تصمیم دارید روی تجربه و یادگیری تمرکز داشته باشید. یا اینکه بخواهید کنترل کاملی روی کامپوننت‌هایی که استفاده می‌کنید داشته باشید. 
  • جانگو. اگر تصمیم دارید روی محصول نهایی تمرکز کنید. مخصوصا اگر روی یک اپلیکیشن با موضوعی مشخص تمرکز دارید جانگو بهترین مورد خواهد بود. اپلیکیشن‌هایی مانند وبسایت خبری، فروشگاه آنلاین، بلاگ و… .

اطلاعات بیشتر

  • جانگو برای مدت بیشتری در دسترس بوده است – اولین عرضه جانگو در سال ۲۰۰۵ اتفاق افتاد این در حالی‌ست که فلسک از سال ۲۰۱۰ به بعد عرضه شد. طبیعتا میزان محبوبیت جانگو نسبت به فلسک بیشتر است. در ژانویه سال ۲۰۱۷ در StackOverflow تعداد ۲۶۳۱ سوال برای جانگو و ۵۷۵ مورد برای فلسک ثبت شده است. باید بگویم که هر دو فریمورک به سرعت در حال رشد و بهبود هستند.
  • فلسک از نظر آموزش‌ها و حمایت‌هایی که در انجمن‌ها شکل می‌گیرد نسبت به جانگو از میزان کمتری برخوردار است. 

Hello, World!

یکی از کارهایی که معمولا مردم بعد از یادگیری یک تکنولوژی جدید انجام می‌دهند این است که با استفاده از آن پروژه‌های بسیار ساده‌ای می‌نویسند. برای مثال نوشتن یک برنامه که در خروجی به ما رشته Hello, World! را برمی‌گرداند. ما در ادامه این مقاله قصد داریم با فلسک و جانگو اپلیکیشن ساده Hello, World را بنویسیم.

نکته‌ای که همراه با فلسک وجود دارد این است که فلسک ساده است و از سبکی مینیمال بهره می‌برد، بنابراین نوشتن برنامه‌ای مانند Hello World با آن سریع‌تر انجام می‌شود، اما این بدان معنا نیست که فلسک فریمورک بهتری است. زمانی که بخواهید اپلیکیشن پیچیده‌تری را بنویسید، این بار جانگو در سریع بودن فرایند توسعه، فلسک را شکست می‌دهد. در هر حال نوشتن اپلیکیشن ساده Hello, World! به ما دید بهتری از هر فریمورک را می‌دهد.

فلسک

اولین چیزی که برای کار با فلسک نیاز داریم این است که آن را نصب کنیم. این کار را به سادگی با استفاده از pip می‌توانیم انجام دهیم. بسته به اینکه pip چگونه پیاده‌سازی شده باشد و یا اینکه از چه نسخه پایتونی استفاده کنید، به عدد ۳ و پرچم –-user نیاز خواهید داشت:

pip3 install flask --user

بعد از اینکه چنین کاری را انجام دادید، یک فایل پایتونی با نام flaskhello.py را ایجاد کرده و کدهای زیر را در آن قرار دهید. 

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
  return "Hello, World!"
  
if __name__ == "__main__":
  app.run()

بیایید ببینیم این کد چکاری را انجام می‌دهد:

  • خط اول: فلسک را import کرده ایم.
  • خط سوم: متغیر app را با استفاده از خاصیت __name__ مقداردهی کرده‌ایم.
  • خط پنجم: مهمترین قسمت اپلیکیشن در این قسمت اتفاق می‌افتد. @app.route یک python decorator است. این قسمت یک تابع را درست از خط زیرین دریافت کرده و در خود قرار می‌دهد. در این حالت ما از این مورد برای مسیردهی از یک URL خاص به سمت یک تابع استفاده کرده‌ایم. با استفاده‌های متفاوت از @app.route  می‌توانیم توابع مختلفی را به قسمت‌های متفاوت اپلیکیشن اضافه کنیم. در این حالت ما تنها یک route به تنهایی «/» را در اختیار داریم که به مسیر روت اپلیکیشن اشاره دارد.
  • خط ششم: تابعی با نام hello ایجاد شده است. حال این تابع به صورت خودکار با اجرای اپلیکیشن فراخوانی می‌شود. 
  • خط هفتم: رشته‌ای را به کاربرمان برمی‌گرداند. به صورت کلی ما باید یک قالب از HTML را همراه با داده به کاربران تحویل دهیم، اما در این قسمت تنها برگشت یک رشته کارمان را انجام می‌دهد. 
  • خط نهم: مطمئن می‌شود که برنامه به صورت خودکار از طریق یک اسکریپت دیگر اجرا نخواهد شد.
  • خط دهم: متد run() مربوط به app که در خط سوم تعریف شده را فراخوانی می‌کنیم. این کار سرور توسعه مربوط به فلسک را اجرا کرده و اجازه می‌دهد که وب اپلیکیشن را از طریق لوکال‌هاست اجرا کنیم.

حال می‌توانید با اجرای دستور python3 flaskhello.py برنامه را اجرا کنید. خروجی به صورت زیر خواهد بود:

>>> Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

در پیغام بالا می‌توانیم پورت ۵۰۰۰ را مشاهده کنیم که اپلیکیشن ما براساس آن اجرا می‌شود. همچنین 127.0.0.1 به این معناست که اپلیکیشن در فضای لوکال‌هاست اجرا می‌شود. حال اگر مرورگر را باز کنید و آدرس 127.0.0.1:5000 را وارد نمایید با رشته Hello, World! مواجه می‌شوید.

جانگو

جانگو هم از طریق pip نصب می‌شود. برای اینکار دستور زیر را وارد کنید:

pip3 install django --user

بعد از نصب جانگو، نیاز است که چند اسکریپت جانگو را برای آماده‌سازی پروژه اجرا کنیم. وقتی که جانگو را نصب کردید، دستور django-admin نیز برای‌تان آماده‌سازی می‌شود.

django-admin startproject hellodjango

این دستور یک پروژه جدید جانگو را ایجاد کرده و دایرکتوری hellodjango را در جایی که دستور نوشته می‌شود ایجاد می‌کند. همچنین در داخل آن  یک فایل manage.py و یک زیر پوشه hellodjango  نیز ایجاد می‌شود. در داخل این زیرپوشه سه اسکریپت پایتونی وجود دارد. کار ما مربوط به فایل urls.py می‌شود.

قدم بعدی استفاده از جانگو برای ساخت اپلیکیشن است. برای ایجاد اپلیکیشن از فایل manage.py که در مرحله قبلی ایجاد کردیم استفاده می‌کنیم. از طریق دایرکتوری اولیه hellodjango دستور زیر را اجرا کنید:

python3 manage.py startapp helloworld

این مورد اپلیکیشن helloworld را ایجاد کرده و آن را به قسمتی از پروژه hellodjango تبدیل می‌کند. حال ما نیاز داریم که مسئله URL routing را درست مانند قسمت فلسک پیکربندی کنیم. دستور قبلی یک دایرکتوری با نامhelloworld را ایجاد کرده، در داخل آن نیز فایلی با نام views.py ساخته شده است. آن را باز کرده و کدهای زیر را در آن قرار دهید:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, World!")
  • خط یک: تابع HttpRespones را import کرده‌ایم. می‌توانیم از آن برای ارسال یک رشته از طریق http استفاده کنیم. در فلسک ما چنین کاری را به صورت پیشفرض انجام نمی‌دهیم. اما زمانی که بخواهیم قالب پیچیده‌تری داشته باشیم آن را نیز بکار می‌بریم. 
  • خط سوم: ما یک تابع index را تعریف کرده‌ایم. در فلسک این مرحله از طریق تابع دکوراتور انجام می‌شد اما اینجا به چنین چیزی نیازی نداریم، بجای آن از طریق urls.py کارهای‌مان را انجام می‌دهیم. 
  • خط چهارم: رشته Hello, World! را که یک HttpResponse است برگشت می‌دهیم.

حال نیاز داریم که یک فایل urls.py را برای اپلیکیشن‌مان ایجاد کنیم. فایل helloworld/urls.py را ایجاد کرده و کدهای زیر را به آن اضافه کنید:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]
  • خط یک: تابع url را import می‌کنیم. حال می‌توانیم URL منحصر به فردی را به یک تابع در فایل views.py لینک کنیم.
  • خط سوم: فایل views.py که Hello, World را در index() آن قرار دادیم import می‌کنیم.
  • خط پنج تا هفت: یک لیست از urlpatterns را ایجاد می‌کنیم – این مورد معادل است با دکوراتور @app.route که در فلسک از آن استفاده کردیم. در این قسمت برای اینکه بتوانیم توابع مختلفی از views.py را لینک کنیم از عبارات با قاعده استفاده می‌کنیم. 

این کارها برای فایل urls.py در اپلیکیشن helloworld صورت گرفت، اما ما به پیکربندی url در پروژه hellodjango نیز نیاز داریم. باری اینکار فایل urls.py را در hellodjango باز کرده و کدهای زیر را در آن قرار دهید:

from django.conf.urls import include, url 
 
urlpatterns = [ 
    url(r'^hello/', include('helloworld.urls')), 
]

این مورد نیز تقریبا مشابه مورد قبلی‌ست با این تفاوت که قسمت routing را به یک اپلیکیشن سوق داده‌ایم. 

حال به دایرکتوری /hellodjango برگشته و دستور زیر را اجرا کنید:

python3 manage.py runserver

این قسمت سرور جانگو را اجرا می‌کند. در ترمینال با این نوشته‌ها باید مواجه شوید:

Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

February 03, 2017 - 16:14:20
Django version 1.10.5, using settings 'hellodjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

اگر هشداری در رابطه با migration در خروجی نشان داد می‌توانیم از آن بگذریم. بعدا می‌توانیم آن را نیز با بکارگیری بانک اطلاعاتی درست کنیم. در خط دهم به شما آدرس لوکال‌هاست و پورت مورد استفاده را می‌دهد. حال اگر آدرس http://127.0.0.1:8000/hello را وارد کنید با رشته Hello, World! مواجه خواهید شد.

در پایان

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

جانگو نسبت به فلسک بسیار سنگین‌تر است – اگر در حال یادگیری توسعه وب هستید کمی سخت است که جانگو را به صورت کامل درک کنید. با این حال اگر یک بار سعی کنید که پروژه‌ای با جانگو بنویسید خیلی از مفاهیم را درک می‌کنید. 

انتخاب کردن بین این دو مورد کار دشواری است. با این حال هر دوی آن‌ها دارای قسمت‌های مشابه تقریبا بسیاری هستند. بنابراین ممکن است سوئیچ کردن بین هر کدام از این موارد برای‌تان کار آسانی باشد.

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

منبع

مقالات پیشنهادی

جانگو در مقابل لاراول

پایتون و پی‌اچ‌پی دو مورد از محبوب‌ترین زبان‌های برنامه‌نویسی در دنیا به حساب می‌آیند. هر کدام از این موارد را می‌توانید برای توسعه دنیای وب استفاده ن...

آموزش جانگو - قسمت چهارم: ایجاد فرانت-اند

حال که قسمت بک‌-اند ما به صورتی درست کار می‌کند، می‌توانیم به فرانت-اند وبسایت بپردازیم. در حال حاضر آدرس Localhost:8000/todos به ما چیزی جز یک متن سا...

آموزش جانگو - قسمت سوم: ایجاد بانک‌ اطلاعاتی

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

آموزش جانگو - قسمت دوم: پیاده‌سازی سرور

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