django vs flask vs node
FlaskとDjangoは、PythonベースのWeb開発フレームワークです。このチュートリアルでは、DjangoとFlaskを詳細に比較します。 Flask vsNodeについても簡単に説明します。
次のプロジェクトのフレームワークを選択するという問題に関しては、常にジレンマが蔓延しています。数か月ごとに、以前使用していたものの弱点を克服する新しいテクノロジーとフレームワークが表示されます。
フレームワークは、より静かな文化のようなものであり、この絶え間なく変化するテクノロジーの世界でより適切で生産的になるために従わなければならない一連の規則です。比較すると、Web開発はデスクトップ開発よりもはるかに高速です。
学習内容:
DjangoとFlask
このチュートリアルでは、DjangoとFlaskの比較を詳しく説明します。 FlaskとDjangoは、PythonベースのWeb開発フレームワークです。多くは軽量のマイクロフレームワークに向かっています。これらのフレームワークは、俊敏性、柔軟性、小型性を備えており、マイクロサービスやサーバーレスアプリケーションの開発に役立ちます。
NodeJSの人気を考慮して、FlaskとNodeのセクションでFlaskとNodeの天才的な比較も提供しました。次の機能でDjangoとFlaskを評価すると、どちらかを選択するのに役立ちます。
デフォルトの管理者
どちらのフレームワークも、ブートストラップされた管理アプリケーションを提供します。 Djangoには組み込みで、デフォルトのインストールが付属しています。ただし、Flaskの場合、管理インターフェースを使用するには、Flask-Appbuilderをインストールする必要があります。
一方、Flaskの場合は、Djangoとadminでスーパーユーザーを作成し、ブラウザーを使用して管理バックエンドにログインできるようにすることを忘れないでください。
データベースとORMS
Djangoには、Oracle、MySQL、PostgreSQL、SQLiteなどのRDBMSとの対話を完全にサポートするデフォルトの組み込みORMが付属しています。このORMは、移行の生成と管理もサポートします。検証が組み込まれたデータベースモデルを作成する方が比較的快適です。
また、Flaskは特定の方法を強制するものではなく、Djangoの場合に概説されているのと同様の機能をサポートするさまざまな拡張機能とともに使用できます。シリーズのチュートリアルの1つで、Flask-SQLAlchemy、Flask-Migrate、Flask-MongoEngineの例を示しました。
ビューとルート
どちらのフレームワークにも、メソッドベースのビューとクラスベースのビューを宣言するメカニズムがあります。 Djangoの場合、ルートとビューは別々のファイルに記載されています。また、常にリクエストオブジェクトを明示的に渡す必要があります。
一方、Flaskでは、デコレータを使用して、対応するハンドラのルートを指定できます。 Flaskのリクエストオブジェクトはグローバルであり、明示的に渡すことなく利用できます。チュートリアルの1つで、ビューとルートの使用の概念について詳しく説明しました。
フォームとテンプレート
Django Formsはフレームワークに組み込まれており、インストールする必要はありません。フォームはアプリケーションにとって非常に重要であり、Djangoでは、フォームをテンプレートタグに渡すことができ、テンプレートでレンダリングすることができます。ただし、Flaskの場合は、Flask-WTFを使用する必要があります。
また、Flask-Appbuilderを使用してフォームを作成しました。さらに、WTF-Alembicを使用して、データベースモデルに基づいてHTMLフォームを生成できます。
どちらのフレームワークもJinja2テンプレートをサポートしており、リソースのURLを生成するための組み込み関数を使用した静的ファイルの提供をサポートしており、最近のすべてのフレームワークでかなり一般的なパターンです。
変数を渡し、特定のビューメソッドでテンプレートをレンダリングする方法はいくつかありますが、どちらのフレームワークでも、テンプレート内の変数にアクセスする構文は同じです。
柔軟性
Djangoは、そのサイズと複雑さのために、Flaskよりも柔軟性がありません。 Flaskは、サポートされている膨大な数の拡張機能を使用して簡単に拡張できます。したがって、より多くの拡張機能を評価する必要があるため、Flaskのセットアップにはより多くの時間と労力が必要です。
ある意味で開発者に与えられた自由は、開発と配信を遅くします。一方、Djangoは、すでに確立されている一連の規則に従い、プロジェクトの目標と目的からの逸脱を少なくする必要がある原型に従います。
学習曲線
DjangoとFlaskの両方を学習するには、ほぼ同じ時間が必要です。 FlaskのAPIは小さくなっています。したがって、コアフレームワークに関する限り、人々はそれをより早く完了することができるかもしれません。その拡張機能を使用することになると、同様に困難になります。すぐに面倒になるかもしれません。
ただし、すべてが1つのパッケージにパックされていないという理由だけで、Flaskフレームワークの場合は関心の分離を実践する方が簡単です。
従う構文ではなく、パターンを学ぶことをお勧めします。 DjangoとFlaskの両方に優れたドキュメントがあります。機能の開発中に簡単にフォローできます。
プロジェクトのサイズと期間
大規模なチームで大規模なプロジェクトに取り組む場合は、Djangoの成熟度とDjangoの広範な貢献者サポートを利用することをお勧めします。プロジェクトが小さく、必要な開発者の数が少ない場合は、Flaskを使用することをお勧めします。
さらに、プロジェクトが長続きする場合は、Djangoが正しい選択です。それ以外の場合は、Flaskを選択できます。
アプリケーションタイプ
本格的なエンタープライズ規模のWebアプリケーションが必要な場合、以前のDjangoが正しい選択であると考えられていました。しかし、今日、フラスコは同様に成熟しており、同じ条件でうまく機能することができます。
ただし、開発者は、小規模または静的なWebサイトを開発するため、またはRESTful API Webサービスを迅速に実装するために、Flaskをより多く選択する傾向があります。
開発者募集
使用するフレームワークの慣習に熟練したリソースがあると、効果があります。より迅速な開発、より迅速なテスト、より迅速な配信、およびより迅速な問題修正が期待できます。
Flaskの場合、新しい開発者を見つけるのは非常に簡単です。ただし、Djangoで熟練したリソースを見つけるのは困難です。 Django開発者が採用する準備ができているものは多くありません。さらに、Djangoフレームワークはかなり古いため、Flaskフレームワークに熟練している人と比較すると、ほとんどの新規採用者は採用に費用がかかります。
業界のトレンドは、分離されたマイクロサービスまたはサーバーレス実装の作成をサポートするテクノロジーを使用してアプリケーションを作成する方向に向かっているため、新しい技術卒業生もFlaskなどの軽いフレームワークを採用しています。 Javascriptは、使いやすく人気のあるフレームワークとともに広く使用されています。
オープンソース
FlaskとDjangoはどちらもオープンソースプロジェクトです。 Djangoはhttps://github.com/django/djangoで、Flaskはhttps://github.com/pallets/flaskで見つけることができます。これらのプロジェクトを見ると、Djangoへの貢献者の数はFlaskに貢献しているものよりもかなり広範囲です。
したがって、解決が必要な問題やクエリがある場合は、より多くの迅速なサポートが期待できます。一般的な想定に反して、Flaskプロジェクトのユーザー数はDjangoのユーザー数よりも多くなっています。
Flaskに関する事実の1つは、特定のタスクに対して安定した拡張機能がない可能性があることです。したがって、最適なものを除外する作業は、拡張機能のユーザーに委ねられます。
例えば、 前回のチュートリアルでは、Flask-Twitter-oembedderを使用してTwitterのAPIを操作しましたが、この拡張機能にはいくつかの問題があり、Flask-CacheからFlask-Cachingに切り替える必要がありました。
プロジェクトのrequrements.txtファイルに記載するのではなく、更新されたGithubリポジトリからFlask-twitter-oembedderをインストールするには、カスタムインストールステートメントを含める必要がありました。
頻繁なメンテナンスは、オープンソースプロジェクトで直面する典型的な課題です。オープンソースプロジェクトのサポートと管理は通常、有料サービスに関連付けられています。プロジェクトへの貢献者からいくつかの問題が修正されるまで、長い間待たなければならない場合があります。
パフォーマンス
FlaskフレームワークはDjangoよりも軽量であり、特にI / O操作を考慮している場合は、わずかな違いでパフォーマンスが向上します。
以下の比較をご覧ください。リクエストの増加に伴い、Flaskのパフォーマンスはほぼ同じままです。ただし、Djangoは、ORMを使用してデータをフェッチした後、テンプレートをレンダリングするのに時間がかかります。
Python FlaskとDjango:表形式の比較
# | 特徴 | Django | フラスコ |
---|---|---|---|
7 | テンプレートの変数補間 | templates /demo.html内 {{tempvar}} | templates /demo.html内 {{tempvar}} |
1 | デフォルトの管理者 | ビルトイン管理バックエンド | Flask-Appbuilderをインストールします |
二 | デフォルトの管理者を有効にする | settings.pyで、管理者がインストールしたアプリのコメントを解除してください。 ..。 #アプリケーション定義 INSTALLED_APPS = ( 「ウェブサイト」、 'django.contrib.admin'、 #その他のコード ) ..。 | フラスコ_appbuilderからAppBuilderとSQLAをインポートし、最初にDBを初期化し、次にAppbuilderを初期化します フラスコからのインポートフラスコ フラスコからappbuilderインポートAppBuilder、SQLA app = Flask(__ name__) db = SQLA(app)appbuilder = AppBuilder(app、db.session) |
3 | 管理者ユーザーの作成 | python manage.py createsuperuser | フラスコファブ作成-管理 |
4 | データベースとORMS | RDBMS用の組み込みORM NoSQLバックエンドにDjango-nonrelを使用する | Flaskのインストール-SQLAlchemy Flask-MongoEngineなどのNoSQL固有のFlask-Extension |
5 | ビューとルート | urls.pyのURLConf django.urlsインポートパスから .importビューから urlpatterns = ( path( ’/ path’、views.handler_method)、 #他のURLとハンドラー ) | ビューで@ app.route(“ / path”)デコレータを使用して、関数でルートをマップします。 @ app.route(“ / path”) def handler_method(): #さらにロジックを備えた他のコード |
6 | レンダリングテンプレート | ビューで django.shortcutsからインポートレンダリング def example_view(request): tempvar =” value_for_template” レンダリングを返す( リクエスト、 ‘demo.html’, {'Tempvar':tempvar} ) | ビューで から。アプリをインポートする フラスコのインポートリクエストから フラスコからインポートrender_template @ app.route(“ / path”) def demo(): tempvar =” value_for_template” render_template(を返す “demo.html”, temp_var = temp_var ) |
8 | 柔軟性 | 柔軟性が低い | より柔軟 |
9 | 設計上の決定 | 開発者による設計上の決定が少なくなります。 | 開発者にとってより多くの自由。 |
10 | プロジェクトの逸脱 | プロジェクトの目標からの逸脱が少ない。 | 開発者に与えられた自由によるより多くの逸脱。 |
十一 | コードベースのサイズ | より大きなコードベース | 小さいコードベース |
12 | APIの数 | その他のAPI | より少ないAPI |
13 | アプリケーションタイプ | 本格的なWebアプリケーション | 小規模なアプリケーション/マイクロサービス |
14 | RESTfulアプリケーション | RESTfulアプリケーション用のDjangoRESTフレームワーク。 | RESTfulアプリケーションには、次の拡張機能を使用してください。 フラスコ-RESTful フラスコ-RESTX ログイン |
15 | パフォーマンス | リクエスト数が多いとパフォーマンスが低下します。 | 全体を通して一貫したパフォーマンス。 |
16 | オープンソースの貢献 | より多くのフォーク、ウォッチ、およびコミット。 | フォーク、ウォッチ、およびコミットの数が少なくなります。 |
17 | 開発者 | 経験豊富な開発者が必要であり、簡単に採用することはできません。 | ほとんどの開発者は経験が浅く、十分な数の開発者がいます。 |
フラスコ対ノード
Web開発スタックに関しては、Web向けの開発には、さまざまなテクノロジーの融合が必要であることがわかりました。 Webアプリケーションをフロントエンドとバックエンドに分解する必要があります。アプリケーションのフロントエンド部分は、JavaScript、HTML、CSSなどのブラウザーで実行されるテクノロジーで最もよく開発されています。
通常、バックエンドはサーバー側に適した言語で開発されており、必要に応じて、基盤となるオペレーティングシステム、接続されたデータベース、またはネットワークと対話できます。
ただし、NodeJSと呼ばれるJavaScriptベースのフレームワークは、上記のビューを変更し、開発者がWebアプリケーションのフロントエンドとバックエンドの開発全体で一貫性と統一性を持つことを可能にしました。開発者は、JavaScriptを使用してバックエンド用に開発できます。
このFlaskとNodeのセクションでは、Pythonプログラミング言語ベースのフレームワークであるFlaskと、アーキテクチャ、速度、コミュニティサポートなどのさまざまな基準でChromeのJavaScriptランタイムに基づくNodeを比較します。
# | 基準 | フラスコ | ノード |
---|---|---|---|
7 | デバッグ | 依存関係のないPythonデバッガーを使用するとデバッグが簡単になります。 | より多くの努力が必要です。 Bluebird / PromiseLibraryを備えた開発IDEで簡単に。 |
1 | 言語ランタイム | Python | ChromeのV8JavaScriptエンジン |
二 | 建築 | ノンブロッキングI / Oでは、gunicornなどのノンブロッキングWebサーバーを使用する必要があります。 マイクロフレームワーク(バックエンド)カテゴリ。 | 本質的にノンブロッキングI / Oを提供します。 フルスタックカテゴリ |
3 | パッケージマネージャー | ピップ | 海抜 |
4 | 速度 | 独立したPythonインタープリターのために遅くなります。 | Just-In-Timeコンパイラにより高速化。 |
5 | オープンソース | はい | はい |
6 | コミュニティサポート | Githubで 2.3K時計 51.4Kスター 13.7Kフォーク | Githubで 2.9K時計 71.9Kスター 17.6Kフォーク |
8 | メンテナンス | 低メンテナンス | より高度なメンテナンス |
9 | リアルタイムアプリケーション | 本質的に適切ではありません。ただし、リアルタイムのユースケースでは、socket.ioと連携して機能します。 Flask-socketio拡張機能を使用します。 | イベント駆動型アーキテクチャとストリーミングモジュールのために適しています。本質的に非同期です。 |
10 | ライブラリ | より成熟して安定しています。 | 成熟度が低く安定していませんが、アクティブな開発および修正リリースの範囲内です。 |
十一 | コード品質 | バックエンド専用に作成されています。 | 新しいフロントエンド開発者がバックエンドに切り替えるために、侵害されることがあります。 |
12 | 開発者チームの構成 | チームは通常、バックエンド開発者とフロントエンド開発者で構成されます。懸念は別です。 | 開発者は役割を交換し、フロントエンドとバックエンドの両方で作業できます。 |
13 | 既存のシステムおよびアプリケーションとの統合 | 機械学習とビッグデータアプリケーション用のPythonのエコシステムを使用して、他の既存のレガシーバックエンドアプリケーションとの統合が容易になります。 | かなり新しく、他の既存のアプリケーションと統合するためにカスタムまたは新しいライブラリを作成する必要があります。 |
よくある質問
Q#1)DjangoまたはFlaskの最初に何を学ぶ必要がありますか?
回答: 最初にFlaskを使用することをお勧めします。 Web開発の経験を少し積んだら、Djangoを利用できます。 Djangoは、Webアプリケーションがどのように機能するかを既に知っていることを前提としており、ほとんどの機能をそれ自体で処理します。
Q#2)FlaskとDjangoのどちらが優れていますか?
回答: FlaskとDjangoはどちらも優れており、目的に適しています。 Djangoは、より著名なエンタープライズ規模のアプリケーションを作成するために使用されます。フラスコは、静的で小さなアプリケーションを作成するために使用されます。フラスコはプロトタイピングにも適しています。ただし、Flask拡張機能を使用すると、大規模なアプリケーションを作成することもできます。
Q#3)どの企業がFlaskを使用していますか?
セレンテスターのためのコアJavaインタビューの質問
回答: Flaskを使用している企業には、Reddit、Mailgun、Netflix、Airbnbなどがあります。
Q#4)どのサイトがDjangoを使用していますか?
回答: Djangoを使用しているサイトには、Instagram、Spotify、YouTube、Dropbox、Bitbucket、Eventbriteなどがあります。
結論
長い間、1つのフレームワークに固執するべきではありません。新しいテクノロジーのセットを学び、トレンドのスタックを採用する準備ができている必要があります。私たちの中には、比較的箱から出して、厳密なリリースサイクルを備えたバッテリーを含むアプローチ、より厳密な下位互換性の維持などを望んでいる人もいます。
このグループに所属していると思われる場合は、Djangoを選択する必要があります。ただし、Flaskフレームワークの新機能と柔軟性に合わせて歩むのも素晴らしいことです。フロントエンドとバックエンドの間の一貫性を維持したい場合は、NodeJSなどのフルスタックフレームワークを選択できます。
フレームワークを使用することは、私たちが解決しようとしているコンテキストと問題に依存する選択肢です。フレームワークの選択は常に困難です。このチュートリアルで重要なレビューポイントを提示し、1つのフレームワークを完成させるのに役立つことを願っています。ただし、両方のフレームワークを学習することをお勧めします。
Flaskから始めて、Web開発の経験を積んだ後、Djangoに進む方が簡単です。何らかの理由で開発作業にJavaScriptの使用が必要な場合は、NodeJSを使用できます。
=> ここですべてのFlaskチュートリアルを確認してください
推奨読書
- PythonDjangoチュートリアル-Django入門
- フラスコのデザインパターンとWebアプリケーションのベストプラクティス
- フラスコのテンプレート、フォーム、表示、および例を使用したリダイレクト
- 回答付きの人気のあるPythonフラスコインタビューの質問トップ31
- Node.jsテストフレームワークをセットアップする方法:Node.jsチュートリアル
- TestNGチュートリアル:TestNGフレームワークの概要
- 例を使用したSeleniumのキーワード駆動型フレームワーク
- RobotFrameworkチュートリアル-機能とソフトウェアのインストール