#Djangoとは
##PythonのWebフレームワーク
pythonにおける代表的なフレームワークは、6つあるそう。
※WSGIは、サーバとWebアプリケーションをつなぐ共通のインターフェースをPythonで定義したもの。これを利用することで、WebサーバとWebアプリケーションの実装を切り離すことができ,WebサーバとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができるようになる。
※CMS(Contents Management System:コンテンツ・マネジメント・システム)で、Webサイトのコンテンツを構成するテキストや画像、デザイン・レイアウト情報(テンプレート)などを一元的に保存・管理するシステムのこと。
基本的には、Djangoを勉強すれば良さそう。実際に、pythonを使ってWeb開発となると、基本的には、Djangoができれば、事足りる。有名なサイトでDjangoが使われている事は結構ある。まぁー、普段python使っているならこのフレームワークで間違いないでしょ!
##Djangoの基本的な考え
Djnagoでは、Urls、View、Model、Templateの概念が重要である。
- ・URL
- HTTP RequestをView関数に渡す。具体的には、URLとHTTP RequestがどのView関数または、Viewオブジェクトと紐付けるかを記載する。urlpatternsがルートと対応するView関数をマッピングのリストを定義する。
urls.py
urlpatterns = [ path('admin/', admin.site.urls), path('', include('api.urls'), ]
以上のようにurlpatternsのリスト内で、path('***/', <参照するViewオブジェクトまたは、関数>)を定義することでViewに結びつけることができる。ユーザーが指定したURL(http://localhost:8000/admin/)と、urlpatternsに格納したすべてのpath()の初めの引数('admin/'や'index/')を順番に比較する。この場合、adminと一致するため、admin.site.urlsを参照することになる。
- ・View
- ビューは、HTTPリクエストを受け取り、HTTPレスポンスを返すリクエストハンドラ関数。
views.py
from django.http import HttpResponse def index(request): return HttpResponse('Hello from Django')
この関数は、ブラウザに返信されるHttpResponseを生成するために render() 関数を使う。
- ・モデル
- モデルは、アプリケーションのデータ構造を定義し、データベース内のレコードを管理(追加、変更、削除)および照会するための機能を提供するPythonオブジェクト。フィールドのタイプや、最大サイズ、デフォルト値、選択リストのオプション、ドキュメントのヘルプテキスト、フォームのラベルテキストなど、格納されるデータの構造を定義するのが一般。
- ・テンプレート
- テンプレートは、ファイルの構造やレイアウト(HTMLページなど)を定義するテキストファイルで、プレースホルダを使用して実際のコンテンツを表す。
index.html
from django.shortcuts import render from .models import Team <!DOCTYPE html> <html lang="en"> <body> {% if youngest_teams %} <ul> {% for team in youngest_teams %} <li>{{ team.team_name }}</li> {% endfor %} </ul> {% else %} <p>No teams are available.</p> {% endif %} </body> </html>
レンダリング時にyoungest_teams というリスト変数(上記のrender()関数によってコンテキスト変数に含まれます)にアクセスできる前提で作成される。HTMLスケルトンでは、youngest_teams変数が存在するかどうかを最初にチェックし、それを forループで繰り返す式がある。各繰り返しにおいて、テンプレートは各チームのteam_name値を<li>要素に表示している。
from django.db import models
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U09', 'Under 10s'),
('U09', 'Under 11s'),
)
team_level = models.CharField(max_length=3,
choices=TEAM_LEVELS,default='U11')
#まとめ
Djangoでは、HttpRequestが飛んできたら、urls.pyファイルで、どのViewを参照すればいいのかを明記して、Viewの中で、データベースにどのように反映させるか、また、どんなHttpResponseを返すかを処理している。この流れが分かっていればとりあえずは良さそう。
#参考
https://web-camp.io/magazine/archives/20695
https://proengineer.internous.co.jp/content/columnfeature/15156
https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Introduction