Lựa chọn phát triển web với Python: Django, Flask hay Pyramid

Lựa chọn phát triển web với Python: Django, Flask hay Pyramid

Khi nói tới Python, chắc không phải nghĩ nhiều mọi người sẽ nghĩ tới Machine Learning - một trong nhưng hot trend 2017. Tuy vậy, Python cũng là một ngôn ngữ lập trình đa năng có thể ứng dụng vào rất nhiều lĩnh vực khác nhau.

Trong các hệ thống, python được dùng để viết các script cho mục đích khác nhau liên quan tới file, monitor. Trong phát triển game, Python cũng có những framework dành riêng cho việc này. Hay nói tới các hệ thống cloud, người ta có thể nhắc tới OpenStack, cái tên đình đám có thể sánh ngang với VMWare vCloud.

Còn về phát triên web, Python thực sự không mạnh bằng PHP. PHP sinh ra để phát triển web, số lượng framework, cms PHP để phát triển web có thể khiên người dùng Python thấy thèm thuồng. Tuy vậy, không hẳn là Python quá yếu thế. Một số cái tên có thể tới để xây dựng web bằng Python như Django, Flask, Pyramid, Tornado...

Bài viết giới đây, mình sẽ so sánh ngắn gọn giữa 3 framework: Django, Flask, Pyramid để các bạn có thể tùy lựa chọn cho dự án web Python của bạn

Overview

Django là Free and open-source web framework viết bằng Python, follow theo model-view-template (MVT). Các phiên bản được maintained bới Django Software Foundation. Phiên bản đầu tiên phát hành vào năm 2005, cách đây 12 năm. Phiên bản hiện thời tính tới thời điểm 01/11/2017 là 1.11.7. Trang chủ là https://www.djangoproject.com/

Flask là microframework base từ lib Werkzeug và Jinja2. Werkzeug là một WSGI utility library for Python, được sử dụng rộng rãi với BSD license. Jinja2 là một full template engine. Phiên bản đầu tiên ra mắt vào 01/04/2010 bởi Armin Ronacher dưới BSD license. Phiên bản hiện tại tính tới thời điểm bài viết là 0.12.2. Trang chủ là http://flask.pocoo.org/

Pyramid là một Open source WSGI web application viết bằng Python. Phiên bản đầu tiên được ra mắt sớm hơn cả Django, vào 09/2005. Pyramid được phát triển dưới tên dự án Pylons Project với BSD license.

Introduction

Django được thiết kể để nhà phát triển có thể phát triển ứng dụng web của mình một cách nhanh chóng và sạch sẽ. Django cung cấp đủ features cho phát triển ứng dụng web như template, form, routing, authentication, basic database administration, and more ...Vì vậy, Django là sự lựa chọn tốt cho những ai đã biết Python trước đó và muốn phát triển ứng dụng một cách nhanh chóng nhất.

Flask là microframework nhỏ và nhẹ, phù hợp cho người mới bắt đầu. Nó rất easy to learn. Bạn có thể build một simple web chỉ với 7 lines code.

Pyramid khó tiếp cận hơn Django và Flask. Cũng có lẽ vì lý do đó, Pyramid khá ít người sử dụng. Pyramid hỗ trợ routing và verification, tuy nhiên templating và data source administration require external collections.

Community

Cộng đồng sử dụng và hỗ trợ Django là không lồ, lớn hơn Flask và Pyramid rất nhiều. Tất nhiên, bạn có thể dễ dàng tìm được sự hỗ trợ về kỹ thuật với Flask và Pyramid. Với hơn 20k stars on Github, 130k question trên Stackoverflow, .... thì Django thực sự là cái tên lớn nhất về web framework của Python. Nhỏ hơn với 20k stars on Github và 30k questions on Stackoverflow là của Pyramid. Sinh sau đẻ muộn nhất là Flask, với 2k starts on Github và 7k questions on Stackoverflow.

Bootstrapping Code layout

Django cho phép bạn xây dựng kiến trúc một cách nhanh chóng bởi CLI tools của mình. Django tách project thành các app nhỏ:

$django-admin startproject hello_django # tạo project
$django-admin startapp first_app # tạo app

Django cho phép migrate, makemigrations, dumpdata, loaddata ngay trên console sử dụng CLI tools:

$python manage.py dumpdata > datadump.json 
$python manage.py loaddata  datadump.json 
$python manage.py migrate 
$python manage.py makemigrations

Flask vốn không base trên MVC nên bạn muốn vẽ vời thế nào bạn phải tự code. Đối với những dự án cần tách biệt giữa các thành phần Flask có tính năng blueprints.

Pyramid có hỗ trợ bootstraping. Pyramid's bootstrapping tool được gọi là pcreate:

$pcreate -s starter hello_pyramid

Flexibility

Django based on MVT, nó khá giống với MVC. Sau khi startproject bạn sẽ có một cái khung. Django hỗ trợ ORM, Admin interface, dễ dàng chuyển qua lại giữa các database engine một cách dễ dàng. Django cung cấp gần như đầy đủ hết tất cả các function cho phép bạn xấy dụng ứng dụng web Python bao gồm web interface, database operations, admin functions, ...

Flask không MVC mà nó định hướng cho kiểu ứng dụng out-of-the-box. Bạn có thể xây dụng bất kể khung gì bạn muốn. Tức là bạn sẽ phải code nhiều hơn Django. Để giúp bạn tự mình xây dụng một hệ thống web, Flask cũng có rất nhiều các lib , extension, add-ons hỗ trợ: Flask-Migrate, Flask-SQLAlchemy, Flask-WTF ... và 2 cái tên đình đám là Werkzeug WSGI toolkit and Jinja2 template engine.

Pyramid giống Django là based on MVC. Nó tực sự là tuyệt vời khi xét về tính Flexibility. Nó bao gồm: template rendering system, connecting database, mapping urls to views, authentication system...

Templating

Django mặc định configured sử dụng template engine của Django. Tuy nhiên, bạn có thể thay thế hoặc kết hợp với một engine template khác như Jinj2 một cách rất dễ dàng.

Flask sử dụng Jinja2 là template engine mặc định.

Pyramid sử dụng Chameleon template engine.

Jinja2 và Django Template khá giống nhau ở nhiều điểm, nên người dùng dễ tiếp cận, sử dụng kết hợp chúng trong Django hoặc Flask. Trong khi đó, với Pyramid bạn cần có thời gian làm quen với nó.

Other

Django Flask Pyramid
Admin Interface Yes No No
SQLAlchemy Support Yes. Có thể sử dụng kết hợp SQLAlchemy và Django ORM Yes Yes
Documentation Tài liệu offical rất cơ bản, dễ hiểu. Ngoài ra rất nhiều nguồn tutorial bên ngoài. Tài liệu offical vô cùng dễ hiểu cho người mới bắt đầu. Nó được đánh giá dễ tiếp cận nhất so với Django và Pyramid Tài liệu Pyramid khá là ít tuy nghiên rất dễ đọc
API RESTful Web Service Django đi kèm với nhiều lib hỗ trợ việc phát triển API một cách dễ dàng như Tastypie, Django Rest Framework ... cùng với rất nhiều tài liệu hữu ích và cộng đồng rộng lớn Việc tạo RESTful API với flask very easy với flask-api, flask-restful... Bạn có thể phát triển API, nhưng sẽ vất vả hơn so với Flask và Django
Website used Pinterest, Instagram, Bitbuckit, Disqus, Spotify, Firefox, Zapier, LiveCoding... Reddit, Mailgun,Twilio ... SurveyMonkey, Reddit ...

Conclusion

Với Django bạn sẽ có cái gì cũng nhiều: cộng đồng, tài liệu, hộ trợ ... Django phù hợp với việc phát triển nhanh một ứng dụng web ở mọi cấp độ từ bé cho tới lớn. Tuy vậy, nếu bạn là new dev Python, Django không nên là sự lựa chọn.

Với Flask, bạn sẽ phải code rất nhiều. Nó phù hợp để bạn xây dựng những ứng dụng nhỏ hơn. Hay bạn muốn xây dựng theo hệ thống của riêng mình. Nếu bạn là new dev hãy đến với Flask. Tuy vậy, nên bạn muốn nghĩ là điều gì đó lớn lao bằng Flask, bạn cần thực sự tay to 😄.

Với Pyramid, thanh niên này khá là kén người sử dụng. Nó như thằng nằm giữa Django và Flask. Nếu như Django là sự đầy đủ, Flask là nhanh, gọn nhẹ, thì Pyramid cũng xếp hàng nhanh, gọn, nhiều lib... Nhưng chắc với cách tiếp cận dẫn tới nó không được sử dụng nhiều.

Đây là đánh giá chủ quan của mình dựa một số tài liệu trên Internet và kinh nghiệm làm web bằng Python của mình. Nếu bạn có đóng góp vui lòng comment bên dưới.

Cảm ơn đã đọc tới đây!!