Django とは何ですか?
Django は、ウェブアプリケーションを迅速かつ効率的に開発するために使用できるソフトウェアです。ほとんどのウェブアプリケーションは、認証、データベースからの情報の取得、Cookie の管理など、いくつかの一般的な機能を備えています。デベロッパーは、作成するすべてのウェブアプリケーションに同様の機能をコーディングする必要があります。Django は、ウェブアプリケーションフレームワークと呼ばれる再利用可能なモジュールの大規模なコレクションにさまざまな関数をグループ化することで、作業を容易にします。デベロッパーは Django ウェブフレームワークを使用して、コードをより効率的に整理および記述し、ウェブ開発時間を大幅に短縮します。
ウェブデベロッパーが Django を選ぶのはなぜですか?
市場にはいくつかのウェブフレームワークがあります。Django は Python 言語で書かれており、多くの Python ウェブフレームワークの 1 つです。しかし、次の理由から、デベロッパーは Django ウェブフレームワークを他のフレームワークよりも好むことが多いです。
開発スピード
Django フレームワークは適切に整っており、インストールと学習が簡単なので、数時間で使用を開始できます。Django の設計者は、あらゆるウェブアーキテクチャをコードで迅速に実装するためのフレームワークを作成しました。このフレームワークは、迅速な開発とクリーンで実用的な設計をサポートします。Django は次のようないくつかの一般的なウェブ開発タスクのためにすぐに使用できる構造を提供しているので、コードの記述はわずか数行で済みます。
- ユーザー認証
- コンテンツ管理
- サイトマップ
- RSS フィード
コスト効率性
Django は無料かつオープンソースの Python プロジェクトで、ソフトウェアのレビューとメンテナンスを行う活発なコミュニティがあります。Django Software Foundation という非営利組織が、Django の使用とメンテナンスを促進し、サポートしています。この組織は、定期的に交流会、集会、コミュニティイベントを開催し、他のデベロッパーがレビューして Django プロジェクトに貢献することを奨励しています。その結果、無料で使用できる、質が高く、機能が豊富なウェブフレームワークが生まれました。
人気
何千ものオープンソースプロジェクトや知名度の高いサイトで Django が使用されています。
- Mozilla Firefox
- National Geographic
その人気のために、フレームワークは進化し続けており、強力なサポートインフラストラクチャを備えるようになりました。多くの個人や企業が、Django を使用しているときに直面する可能性のある開発上の課題について、無料のサポートと有料のサポートを提供しています。
Django はどのように動作しますか?
ウェブアプリケーションは、サーバーコードとクライアントコードの 2 つの部分で構成されています。クライアントまたはウェブサイトの訪問者はブラウザを持っています。ブラウザに URL を入力すると、ウェブアプリが実行されているウェブサーバーマシンにリクエストが送信されます。サーバーはデータベースを使用してリクエストを処理し、レスポンスとしてクライアントに情報を返します。クライアントコードは、情報をウェブページとして訪問者に表示します。
Django は、Model-View-Template (MVT) アーキテクチャを使用して、このリクエストとレスポンスシステムのコードを管理します。
モデル
Django のモデルは、データベースとサーバーコードの間のインターフェイスとして機能します。これらは、データに関する唯一の決定的な情報源です。これらのデータモデルには、データベースとインタラクションするために不可欠な必須フィールドとオペレーションが含まれています。そのため、Django のモデルは、データベーステーブルを Python コード内のクラスまたはオブジェクトに変換します。これはオブジェクトリレーショナルマッピングと呼ばれます。
通常、各モデルは単一のデータベーステーブルにマッピングされ、データベースフィールドを表す属性を備えています。例えば、ウェブサイトが従業員の詳細で構成されている場合、次のように表される可能性があります。
- 従業員名と住所フィールドを含む従業員テーブル。
- [名前] と [住所] と呼ばれる 2 つの属性、またはモデルフィールドを持つ [クラス従業員] と呼ばれる従業員モデル。
表示
Django のビューは、モデルを使用してリクエストを処理します。ウェブサイトの訪問者がウェブサイトに対して実行できるリクエストの各タイプについて表示関数を記述できます。表示関数はリクエストを入力として受け取り、レスポンスを返すことができます。レスポンスは、エラーコード、画像、ファイル、または任意のタイプのデータです。
Django は、表示関数を URL にマップする URL マッパー、または URL ディスパッチャーの機能を備えています。以下に示すように、URL パターンを記述する URL マッパーファイルを作成する必要があります。
urlpatterns = [
path('employee/name', views.employee_name),
path('employee/<int:year>/', views.year_archive),
]
例えば、ウェブサイトの訪問者に対して、特定の年の全従業員のリストを表示する場合は、URL パス employee/year number を設定し、対応する Django の表示関数 year_archive を記述します。ウェブサイトの訪問者がブラウザに「yourwebsitename.com/employee/2020」と入力すると、次のステップが実行されます。
- リクエストがウェブアプリに送信されます。
- Django ウェブフレームワークは、URL マッパーから年の数字と表示関数名を取得します。
- 2020 年の表示関数 year_archive を実行します。
- Year_archive は、従業員モデルを使用して、2020 年のデータベースからすべての従業員データを取得します。
- Django ウェブフレームワークは、データをレスポンスとして送り返します。
テンプレート
Django テンプレートは、ブラウザでウェブページの表示を管理します。ほとんどのウェブページは Hypertext Markup Language (HTML) で記述されているため、Django のテンプレートコードは HTML に類似したスタイルで記述できます。テンプレートファイルには、次の特定のコンポーネントが含まれています。
- 画像、ボタン、ヘッダーなど、最終的な HTML 出力の静的部分。
- 動的コンテンツまたはデータを挿入する方法を記述する特別な構文。リクエストごとに変更されます。
次のコンポーネントが Django テンプレートシステムを構成しています。
テンプレート言語
テンプレート言語は、HTML テンプレートコードを記述するために使用するプログラミング言語です。Django は、独自の Django Template Language と Jinja2 と呼ばれる人気のある代替言語をサポートしています。
テンプレートエンジン
テンプレートエンジンはテンプレートファイルを処理し、最終的な HTML 出力を作成します。出力には、応答からのデータが含まれます。
例えば、ウェブサイトの訪問者が従業員に関する情報をリクエストすると、Django テンプレートは、表示されるウェブページに、ウェブサイトのヘッダー、すべての従業員の名前と住所を含むテーブル、および [次へ] というボタンを表示します。
Django では他にどのようなモジュールを使用できますか?
Model-View-Template (MVT) アーキテクチャはあらゆるアプリケーションの基本構造を定義しますが、Django はウェブサイトを強化するためのモジュールを他にもいくつか備えています。いくつかの例を以下に示します。
フォーム
ほとんどのウェブサイトでは、登録や支払いなどのタスクや、ウェブサイト訪問者からの情報収集のためにフォームが必要です。Django は、ウェブサイトのフォームを管理するために使用できる多くのツールやライブラリを提供します。コードを自ら記述する場合よりも安全に、フォーム処理を簡素化および自動化できます。
Django はフォーム処理を次の 3 つの方法で処理します。
- 表示用データの準備と再構築によるフォーム作成
- クライアント側での HTML フォームのチェックによるフォーム検証
- 提出されたデータの受領によるフォーム処理
ユーザ認証
現代のウェブサイトは、ユーザーを認証し、承認する必要があります。認証はユーザーが本人であることを検証し、承認は認証されたユーザーがサイトで実行できる操作を決定します。Django は、さまざまな用途のために認証を管理できます。
- ユーザーアカウント
- ユーザーが特定のウェブサイトタスクを実行できるようにする許可と「はい/いいえ」フラグ
- 類似の許可を持つ複数のユーザーアカウントのグループ
- Cookie ベースのユーザーセッション
また、設定可能なパスワードハッシュシステムと、フォームやビュー内のコンテンツを制限するツールも提供します。
サイト管理
Django 管理サイトでは、サイトの管理ページを簡単に提供できます。サイト管理者はこのページを使用して、サイトのデータモデルを作成、編集、または表示できます。
Django は「opinionated」(こだわりが強い) ですか?
当社では、ウェブデベロッパーにプロセスを強制するウェブフレームワークのことを「opinionated」(こだわりが強い) フレームワークであると非公式に言っています。このようなウェブフレームワークには、デベロッパーが特定のタスクを達成する際に踏まえなければならないこだわりや正しい方法があります。例えば、こだわりが強いフレームワークは、通常、ある特定の業界に関連するアプリケーションタスクの詳細なドキュメントを保持することにより、その業界での効率的な開発をサポートします。
一方、こだわりが弱いフレームワークでは、さまざまな Model-View-Template (MVT) コンポーネントを統合する方法に対する制限が少なくなります。それらはより柔軟ですが、異なるデベロッパーが同じタスクに対してさまざまなアプローチを使用できるため、コード編成が複雑になります。
Django は、ある程度こだわりが強いです。さまざまなコンポーネントが提供され、さまざまなタイプのウェブ開発タスクを処理する方法に関するドキュメントが含まれています。デベロッパーは Django の分離アーキテクチャを使用して幅広いオプションから選択できるほか、必要な新しいオプションのサポートを追加することもできます。
Django のセキュリティはどのようになっていますか?
サイバー犯罪者は、ユーザーのログイン情報、財務データ、および他の機密情報にアクセスするために、ウェブアプリを標的にすることがよくあります。Django ウェブフレームワークは、ウェブアプリとユーザーを保護するいくつかの機能を提供します。Django のベストプラクティスに従うことで、セキュリティに関する多くの一般的な誤りを回避できます。いくつかの例を以下に示します。
クロスサイトスクリプティングに対する保護
クロスサイトスクリプティング (XSS) 攻撃は、サイバー犯罪者がウェブサイトユーザーのブラウザに悪意のあるコードを挿入したときに発生します。次のようないくつかの方法でウェブアプリを欺くことでユーザーを攻撃できます。
- 悪意のあるスクリプトをデータベースに格納し、サーバーが次の応答で誤って悪意のあるコードを送信するようにします。
- お客様のコードではなく、悪意のあるクライアントコードがユーザーのブラウザで実行されるように、ユーザーを欺いてリンクをクリックさせます。
例えば、Django テンプレートには {{name}} が含まれている場合があります。これは、ユーザーがプロフィールの名前フィールドに入力するテキストを表示します。サイバー犯罪者はセッションをハイジャックし、名前を <script>alert('hello')</script> などのコードに変更します。テンプレートは {{<script>alert('hello')</script>}} に変更されます。
このコードはユーザーのブラウザで実行され、「Hello」というテキストメッセージがユーザーの画面でポップアップ表示されます。これは単純な例ですが、サイバー犯罪者がユーザーのコンピュータを制御するために複雑なスクリプトを挿入する方法を示しています。
Django は、悪意のあるコードを示唆する < や > などの特定の文字をユーザー入力から自動的にエスケープまたは無視することによって、このような攻撃からユーザーを保護します。
不正アクセスに対する保護
クロスサイトリクエストフォージェリ (CSRF) 攻撃は、ハッカーがユーザーの認証情報を盗み、不正なリクエストをウェブアプリに送信するときに発生します。Django では、ほとんどの種類の CSRF 攻撃に対する保護機能を Django CSRF モジュールに組み込んでいます。これは、初回ログイン時にすべてのユーザーに秘密の値を送信することで機能します。
新しいクライアントのリクエストには、クライアントが本人であることを証明する秘密の値が含まれます。秘密の値を知っているのは認証されたユーザーのブラウザのみであるため、Django は、ユーザーになりすましている他のマシンからのリクエストを自動的に拒否できます。機能させるには Django CSRF モジュール設定をアクティブ化する必要があります。
SQL インジェクションに対する保護
サイバー犯罪者は、SQL インジェクションで、POST などの HTTP リクエストを使用することによって、SQL コードをデータベースに挿入します。悪意のあるコードは、本物のデータを盗んだり、削除したりできます。Django は、この問題を設計自体で解決します。パラメータと呼ばれるユーザーが送信したデータは、モデルレイヤーに到達するまでデータベースクエリとは別に保持されます。Django のモデルは、クエリコードを作成するときに危険な文字をエスケープできます。
コミュニティサポートによる保護
Django の保護は、組み込みのセキュリティ機能だけにとどまりません。Django はオープンソースであるため、多くの経験豊富なデベロッパーが Django モジュールを使用およびレビューしています。徹底的なテストは Django コードの信頼性を高め、セキュリティの偶発的な脆弱性が残らないようにします。
Django のスケーラビリティはどのようになっていますか?
ウェブサイト開発におけるスケーラビリティとは、複数のクライアントリクエストを同時に処理するウェブサイトの能力をいいます。Django プロジェクトは非常にスケーラブルで、何千ものリクエストを処理できます。Django アプリケーションは次のようにスケールできます。
ハードウェア
Django チームは、システム内のハードウェアを効率的に使用するためのウェブフレームワークを設計しました。シェアードナッシングアーキテクチャでは、Django はデータベースレイヤー (モデル) やアプリケーションレイヤー (ビュー) などのコンポーネントを分離します。システムの他の部分に影響を及ぼすことなく、どのレベルでもハードウェアを追加できます。システムにデータベースサーバーやアプリケーションサーバーを追加すると、Django はこれらのリソースを効率的に使用して複数の訪問者を処理します。
キャッシュ
キャッシュとは、Django アプリがリクエストをより迅速に処理し、規模を拡大できるように、一部のウェブページデータをクライアントのサーバーまたは中間サーバーに保存するプロセスをいいます。Django は、さまざまなレベルのキャッシュ機能を備えた堅牢なキャッシュシステムを提供します。
- ウェブサイト全体をキャッシュできます。
- 特定の表示関数の出力をキャッシュできます。
- 作成に時間がかかる特定のコンテンツをキャッシュできます。
Django のプロジェクトは、サードパーティーのキャッシュでも良好に機能します。これらのキャッシュに関するヒントを提供し、アプリケーションのどの部分をキャッシュするかを伝えるコードを記述できます。
AWS は Django ウェブアプリケーションのサポートにどのように役立ちますか?
AWS Elastic Beanstalk は、Django、Python、Java、.NET、PHP、Node.js、Ruby、Go、Docker などのテクノロジーを使用して開発されたウェブアプリケーションやサービスを、Apache、Nginx、Passenger、IIS などの使い慣れたサーバー上にデプロイおよびスケーリングするためのユーザーフレンドリーなサービスです。
Elastic Beanstalk は、次のように Django デベロッパーをサポートします。
- Django コードをアップロードすると、Elastic Beanstalk は自動的にデプロイを処理します。
- Elastic Beanstalk がインフラストラクチャの準備、運営から、アプリケーションスタック (プラットフォーム) の管理まで担当するため、自分で時間をかけて専門知識を習得する必要はありません。
- Elastic Beanstalk は、調整可能な Auto Scaling の設定を使用することにより、アプリケーション固有のニーズに基づいてアプリケーションを自動的にスケールアップまたはスケールダウンします。
今すぐ無料の AWS アカウントを作成して、Django アプリケーションを Elastic Beanstalk にデプロイし始めましょう。