見出し画像

Djangoって何?_2020/10/07

※このNoteでは自分が今学んでいるDjangoと呼ばれているものに
ついて調べた結果を備忘録として書いたものです。
解説用に書かれていないため見づらかったり
分かりづらかったりするかもしれません。
大変申し訳ないです。

・最初に

Djangoとは無料で公開されている、
Pythonを使用したWebアプリケーションフレームワークです。
Web フレームワークは、素早く、簡単にウェブサイトを開発するのに役立つコンポーネントの一式が含まれています。

*コンポーネントとは
特定の機能を持ち単体で完結しているが、
単体では使用せず(できず)他のプログラムから呼び出されたり
連結されたりして使用されるプログラム部品のことを
コンポーネントということが多い。
(つまり
「便利な機能が1つに収まっているけどそれだけでは動かないよ!」
ってことかな?)

*フレームワークとは
例として、
Webサイトを構築する場合様々な認証や管理者用の画面・フォームの作成
などが必要になってきます。
ですがサイトを作る・更新するたびにそのような工程をしていたのでは
時間がかかったり、労力も消費します。
このような問題を解決するために、
当時の開発者たち(プログラマー)は
開発などによく使われる機能がまとまったフレームワーク
というものを開発しました。
このフレームワークというものを導入することで
幅広くWebアプリケーションの開発に対応でき、また
効率よく開発を進めていけます。

Djangoで何ができるの?

Djangoを使うと、
コンテンツ管理システムやWikiから
ソーシャルネットワーク・ニュースサイトなど、
高品質なWebアプリケーションを簡単に、少ないコードで作成できます。
シンプルなWebアプリケーションであれば、
数分間で作れてしまう場合もあります。
もちろん、機能を拡張して複雑なWebアプリケーションを
作成することもできます。
具体的に言えば
・管理画面
・ユーザー認証
・RSSフィード
・テンプレートエンジン
・データベース(O/Rマッパー)
・フォームの作成・検証・処理
・キャッシュ機能
等です。

メリットは?

開発時にDjangoを使用すると、次のようなメリットがあります。

①:高速な動作
②:フルスタック・フレームワーク(多数の便利な機能を装備)
③:セキュリティ的に安全な設計
④:メンテナンスの容易さ
⑤:自由に選べるプラットフォーム
⑥:学習コストの低さ

があります。
ではまず、
①の高速な動作から
Djangoには標準で、分散型のキャッシュシステムであるmemcachedが備えられており、キャッシュ機能が強力です。高速な処理速度が要求される大規模サービスなどでは、Djangoは有力な選択肢になります。

*キャッシュシステム( cache system)とは
オペレーティングシステム(OS)が内部的に使用するデータの保存領域で、システムに必要なプログラムやデータを一時的に保存しておくもの。

*memcached(メムキャッシュド)とは
分散メモリキャッシュシステムを構築することができる
キャッシュサーバの一つ。サーバのメインメモリ上に
ファイルやデータベースの内容を一時保管して
高速に読み出せるようにする。

次に②のフルスタックフレームワークですね。
Djangoはフルスタックのフレームワークです。
フルスタックとは、Webアプリケーションの実装に必要な機能が
一通り揃っていることを指します。
Webアプリでよく使われる「ユーザー認証」「管理画面」「サイト案内」「RSSフィード」などの機能が、あらかじめ含まれています。
つまり、Djangoを使用すれば、テンプレートやDBアクセスに使うソフト
などを自分で探す必要がなくなります。
なお、DjangoだけでもWebアプリケーションを構築するには十分ですが、
拡張するモジュールも用意されています。
そのため、管理システム、ソーシャルネットワーク、科学技術計算など
幅広い用途に対応しているのです。

*RSSフィードとは
RSSフィードとは、Webサイトの更新情報などをRSSや類似するデータ形式で配信すること。また、そのように配信されるサイトの更新データです

*RSS(RDF Site Summary/Rich Site Summary)とは
XMLを応用したデータ形式の一種で、
Webサイト内の新着ページや更新ページのタイトルや
URL、更新日時、要約などを一覧形式で記述することができる。

*XML(Extensible Markup Language)とは
XMLとは、文書やデータの意味や構造を記述するため
のマークアップ言語の一つ。
追記
XMLはユーザが独自のタグを指定できることから、マークアップ言語を作成するためのメタ言語とも言われる。

*メタ言語とは
メタ言語とは、言語を定義したり、
言語についての情報を記述したりするための言語。

※結構長くなって申し訳ないです。
(現時点で約1790字です)

では③のセキュリティ的に安全な設計について書いていきます。
InstagramやPinterest、Mozilla、National Geographicなどの大規模サイトがDjangoを選択する理由の一つは、セキュリティの信頼性でしょう。
Djangoでは、一般的な設計上のセキュリティミスが起こりにくい仕組みを
採用しています。仕組みの内容は、次のようなものです。
セッション情報の配置場所
クッキーにはセッションキーだけを記憶させ、セッションデータ自体はサーバのデータベースに保存する。
パスワードを直接保存しない
パスワードはハッシュ化し、データベースに格納します。
Djangoでは、送信されたパスワードから暗号化ハッシュ関数を介して
生成された固定の値(ハッシュ値)を保存することにより、
パスワードを安全に管理します。入力されたパスワードは、
ハッシュ関数を介した入力値と、保存されたハッシュ値を比較することで
チェックされます。
その他にも
Djangoは、
SQLインジェクション
クロスサイトスクリプティング(XSS)
クロスサイトリクエストフォージェリ(CSRF)
クリックジャッキング
などの多くの脆弱性に対する保護を有効にしています。

*クッキー(Cookie)とは
Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに
一時的にデータを書き込んで保存させる仕組みのこと。
Webサイト(Webサーバ)側が指定したデータを保存しておくことができ、利用者の識別や属性に関する情報や、最後にサイトを訪れた日時などを
記録しておくことが多い。
ネットサービスなどのサイトで利用者のIDなどが保存されると、
次にアクセスしたときに自動的に利用者の識別が行われ、
前回の続きのようにサービスを受けることができる。

*セッション( session)とは
コンピュータシステムやネットワーク通信において、
接続/ログインしてから、切断/ログオフするまでの
一連の操作や通信のことをこのように呼ぶ。
あるコンピュータシステムに利用者や別のシステムがアクセスし、
連続して交わされる一連の通信や操作の連なりをセッションという。
最初のアクセス時に認証やアクセス元情報の取得などによって
相手を識別し、セッションを開始・確立する。

*ハッシュ化とは
ハッシュ化とは、元のデータから一定の計算手順に従ってハッシュ値と
呼ばれる規則性のない固定長の値を求め、
その値によって元のデータを置き換えること。
パスワードの保管などでよく用いられる手法である。
追記
これはパスワード自体を保存するのではなく
パスワードのハッシュ値を保存するため
たとえハッシュ値がわかってもパスワード自体は
不明のままなため安全性が高い

*SQLインジェクションとは
アプリケーションのセキュリティ上の不備を意図的に利用し、
アプリケーションが想定しないSQL文を実行させることにより、
データベースシステムを不正に操作する攻撃方法のこと。
またはその攻撃を可能とする脆弱性のことである。
ここに詳しい説明が載っています

*クロスサイトスクリプティング(XSS)とは
Webサイト閲覧者側がWebページを制作することのできる
動的サイト(例:TwitterなどのSNSや掲示板等)に対して
自身が制作した不正なスクリプトを挿入することにより
起こすサイバー攻撃です。
この攻撃による直接的な被害は標的サイトではなく
サービスを利用しているエンドユーザーに及ぶ攻撃で
標的になったサイトとは別のサイトに情報を送信(クロス)することから
この名前で呼ばれるようになりました。
ここに詳しい説明が載っています

*クロスサイトリクエストフォージェリ(CSRF)とは
オンラインサービスを利用するユーザーがログイン状態を保持したまま
悪意のある第三者の作成したURLなどをクリックした場合などに
本人が意図しない形で
情報・リクエストを送信されてしまうことを意味します。
リクエスト強要とも呼ばれており
ユーザー側は何が起きたのか気が付くことなく
後から被害にあったことに気が付きます。
ここに詳しい説明が載っています

*クリックジャッキングとは
クリックジャッキングとは、ユーザーが利用するWebブラウザを悪用して
ユーザーに不利益をもたらすサイバー攻撃の一種で
具体的な特徴としては、ボタンやリンクなどを透明で見えない状態にして
通常のWebページの上にかぶせてしまうというもの。
ここに詳しい説明が載っています

次は③のメンテナンスの容易さについてです。
Djangoはモジュールの独立性が高く
メンテナンスや拡張が容易になるようにできています。
Djangoのコードは、原則として保守可能で再利用可能。
特に、Do not Repeat Yourself(DRY)則によって
コードの再利用は基本コンセプトになっています。
Djangoは、関連する機能・コードを再利用可能なアプリケーションや
モジュールにグループ化します。

*モジュール( module )とは
機器やシステムの一部を構成するひとまとまりの機能を持った部品で
システム中核部や他の部品への接合部(インターフェース)の仕様が
明確に定義され、容易に追加や交換ができるようなもののことを指す。

*インターフェース(interface)とは
機器と機器との相互の出入り口、コンピューターと周辺機器をつなぐ端子や接続に必要なケーブルのことを指すことが多いようです。
さらに大きく分けて3通りの使われ方があり、それぞれ
ハードウェアインターフェース
複数の装置を接続する際に使われる物
ソフトウェアインターフェース
プログラム間でのテータのやり取りをするときに、必要とされる手順
ユーザーインターフェース
コンピューターとそれを使用する側(主に人間)の間でのやり取りをするための物。キーボードなどもこれにあたります。
があります。

*DRY原則(Don't Repeat Yourself)とは
ソフトウェアの構成や構築手法についての原則の一つで
同じ意味や機能を持つ情報を複数の場所に重複して置くことを
なるべく避けるべきとする考え方。
詳しく言うと
システムやソフトウェアを構成する設定や設計に関する情報について
述べたもので、複数の場所に同じ情報が置かれていると
変更時に整合性が取れなくなる危険性が高まるため
一箇所で管理して必ずそこから参照するようにすべきとする原則である。
また、プログラムコード中で同じ(ような)動作をするコードを
何度も書かずに、関数などにまとめて呼び出して利用すべきとする意味で
用いられることもあるが、こちらは本来は
“Once and Only Once” (OAOO)原則と呼ばれるものである。

※もう少しで終わります!(現時点で約4630字です)

次に④の自由に選べるプラットフォームについてです!
DjangoのコードはPythonで書かれています。
Pythonは非常に多くのプラットフォームで動作する言語です。
そのため、Djangoで作られたアプリケーションは、Linux、Windows
macOS Xなどのメジャーなプラットフォームで実行できます。
さらに、Djangoは多くのホスティングプロバイダによって
サポートされており、Djangoサイトを特定のインフラで
ホスティングするためにドキュメントを提供しているところもあります。

*プラットフォームについて
ある機器やソフトウェアを動作させるのに必要な
基盤となる装置やソフトウェア、サービス、あるいは
それらの組み合わせ(動作環境)のことをプラットフォームという。
相対的な関係性を表す言葉であるため、
具体的に何がプラットフォームとなるかは対象によって異なる。
アプリケーションソフトにとってはOSやミドルウェア、ライブラリ
言語処理系(ランタイム)などがプラットフォームであるし
OSにとってはハードウェア(コンピュータ本体)が
プラットフォームとなる。
スマートフォン向けのアプリストアなど
ネットサービスや通信環境などがプラットフォームの一部を構成する場合
もある。
(つまり
「アプリ依存の動作環境」
ってことかな?)

*プロバイダーとは?
回線をインターネットと繋げる役割を担う接続事業者のことです。

*ホスティングとは
インターネットサービスプロバイダなどが
お客様のメールサービスやウェブサービスをお預かりし
運用するサービスです。

*ホスティングプロバイダとは
企業や個人がワールドワイド ウェブで自分のウェブサイトを
利用できるようにする会社です。
ウェブ ホスティング プロバイダは多様なサービスを提供しますが
通常はウェブサイトのデザイン、ホスト上のストレージ スペース
およびインターネット接続が含まれます。

最後に⑤の学習コストの低さについてです!!
DjangoはメジャーなWebアプリケーションのフレームワークなので
インターネット上に様々なノウハウが溢れています。
さらに、オンラインの学習プラットフォームなどでも
複数の学習プログラムが展開されているため
学習の機会には事欠きません。

ここまで自分の稚拙な文を読んでいただき
ありがとうございました!
(現時点で約5630字です。)

この記事が気に入ったらサポートをしてみませんか?