Djangoの構成についての覚え書き
Djangoを学び始めてはや一週間。テキストが一冊終了しました。
テキストのコードを模写しながら思ったことを記しておきます。
(記述した部分を中心に扱います。)
Djangoの拡張性について
Laravel(PHP)とかFlask(Python)でWEBアプリを作ったことがあるが、最初からこんなに機能がついているとは...
しかも開発用のWEBサーバも用意してくれて用意周到すぎる
アーキテクチャについて
LaravelではMVCモデルが採用されており、それとほぼ同じMTVモデルを採用。
- MVC:Model, View, Controller
- MTV: Model, Template, View
実は、それぞれのViewは同じ働きをしない(紛らわしい)
※MTVモデルのViewは、MVCモデルで言うところのControllerに該当する。
Modelの役割
DBとのやり取りを行う。ModelファイルにDBの定義について記述しておき、マイグレーションでDBの定義を行うこともできる。
マイグレーションって何?
DBにテーブルを作成・削除する際、本来はDBにDB管理システム(PostgreSQLとか)で入って処理を行う必要がある。だが、マイグレーションを使う場合、Modelファイルにオブジェクトとしてテーブルを定義し、マイグレーションコマンドを実行することでDBにModelファイルの内容が反映される。 本来はDBのバージョンアップ&ダウンをすることができる点が良い所らしい。(私はまだしたことない)マイグレーションの流れ
1. Modelファイルにテーブルオブジェクトを記述
python manage.py makemigration [Modelファイルの親ディレクトリ]
これでマイグレーションファイルが作られる。
2. マイグレーションを実行
python manage.py migrate
マイグレーションファイルの内容を確認してから実行するようにしましょう。
これでModelファイルのオブジェクトがテーブルとして作られる。
レコードをオブジェクトとして扱うことができる
レコードってなんや?
レコード:テーブル内の1つのデータ(インスタンスとか言われる)from django.db import models
class [テーブル名(単数形)]
name = models.CharField()
[属性名] = models.[フィールド名]
こうすると、models.pyさえimportすればViewでもDB内のデータを扱える!
Templateの役割
ここはUI(ユーザインタフェース)に関係しています。
Djangoの場合(フロントでフレームワークを使用しない場合)は以下のディレクトリ構成になりそう
templates
- hello
- index.html
- show.html
- ...
index.htmlなどのテンプレートファイルはDjangoのサーバから呼び出されるため、プロジェクト名と同じディレクトリを親ディレクトリとして、その配下にテンプレートファイルを配置する。
フロントエンドをフレームワークで開発する場合
Djangoプロジェクトにはテンプレートファイルを置かず、フロンドエンドのファイルを参照するように設定を変更する。
Viewの役割
簡単に言うと、
なんかリクエスト来る
↓
(リクエスト内容をもとにDB操作)
↓
Templateに返す
例えばこんな感じ
def index(request):
params = {
'title': 'Hello',
'message': '',
}
return render(request, 'hello/index.html', params)
ここまでできたらどうする
テキストを見ながら、簡単なオリジナルアプリを作ってみようかと思います。
あまり作りこまず、CRUD操作ができる程度の簡単なアプリです。
最後に
一週間、テキストを模写してみて、テンプレートファイルを書くのが面倒くさい!ってなりました。
あと、コードを書くだけだとデザインが壊滅的に...。
オリジナルアプリを開発するときは、デザインツールを使ってみようかなと思いました。
初心者の方へ
凄いアプリを作りたい!と思って、いきなり本格的なアプリを作り始めてしまいがちです。(私もそうでした)
ですが、そうも簡単にいかないです。段階を踏んで辛抱強く頑張りましょう。
私もまだ初心者ですので、しっかり段階を踏んで、本格的なアプリの開発に着手したいと思います。