Django関連のメモ

Djangoで勉強したことのまとめとして作成。適宜更新予定。

PCはWindows10です。

Djangoとはなんぞや

Webアプリケーションを作るためのPython製のフレームワーク。色々な機能がそろっていてフルスタックと呼ばれている。

Pythonのフレームワークの中で一番人気があるので開発も活発に行われている。また使用人数が多いので資料も結構多い。ただ日本だとRubyが人気なので日本語の資料は少ない。

最近だとAIや機械学習が人気なこともありPythonの需要が高まっている。

認証機能が標準で提供されているため、ユーザー登録型のコンテンツを作る場合はおすすめとのこと。

チュートリアル

フレームワークの勉強をしようと思うと、大体チュートリアルが用意されていることが多い。

Djangoでもいくつかチュートリアルが用意されている。

まずは公式のチュートリアル。

あと、本当の初心者向けのチュートリアルもある。

はじめてWeb開発をやるなら後者をお勧めする。

開発環境

基本はPythonとブラウザがあればそれで開発が可能。ただ非効率なので統合開発環境のPyCharmを入れておくと便利。

年間1万円くらいでつかえるので、後々のことを考えると十分元は取れるかと。

全体像

画像1

ユーザーがURLを要求して、Webサーバー、APサーバーに渡され、そこでDjangoで書くアプリケーションに振り分けされる。(urls.py)

そのあとview(views.py)に渡され、必要なデータ(models.py)とテンプレートを取得して合成して返す。

MTV(Model Template View )モデルといわれている。Ruby on RailsだとMVCモデル。

 Djangoの構成

Djangoではディレクトリ構造やファイル名はきちんと決まっていてそれを元に動いている。なので勝手な名前付けをしたり、階層を変えると動かなくなる。

一見不自由に思えるけど、慣れたら探しやすくて便利。整理されているって大事。

構造としてはこんな感じ。

画像2

一番大きいくくりでプロジェクトというものを作成。これは一つのWebサービスを表していてドメイン単位と考えるといいかも。その中に個々の機能のアプリケーションがある。

全部を一つのアプリケーションで作るということもできるけど、メンテナンスや再利用が面倒なので機能別に分けて作るのが合理的。

Djangoの始め方

作業をしたいディレクトリを作って、venvコマンドを使ってPythonの仮想環境を作成する。

python -m venv myvenv

myvenv\Scripts\activate

 pip install Django #~=でインストール時のバージョンを指定可。

仮想環境を作らなくてもいいけど、いくつもDjangoアプリを作る場合はそれぞれのバージョン管理するのが大変なので、仮想環境ごとにDjangoやライブラリを入れると楽。

これで自分が作ろうとしているアプリのところに仮想環境ができる。

django-admin startproject mysite .

このコマンドでプロジェクトを作成できる。 .は現在のディレクトリにプロジェクトを作成するという意味で、こうしておくとフォルダ管理がしやすい。まぁなくても作れるのでお好みでやればいいかも。

で、プロジェクトを作成すると自動でファイルが作成される。その中でも特に大事なのが、manage.pyとsettings.py。

manage.pyは開発関係のためのコマンドファイル。
settings.pyはプロジェクトを管理するためのファイル。

Djangoを動かしてみたいときは、

python manage.py runserver

のコマンドで動かすことができる。アプリケーションを作りたい場合は

python manage.py startapp blog

startappでアプリを作ることができる。

アプリケーションを作ったら、そのアプリフォルダが作られてそのアプリはそのフォルダで管理することになる。

各アプリが独立に作れるので、そのアプリを切り離しても他に影響しにくい。すごい。

アプリを作ったら、settings.pyのINSTALLED_APPSに追加する。

これでアプリが認識される。

プロジェクトのフォルダ構成は色々と試行錯誤されていて、ひな形も結構存在しているのでそのうちいい感じの構造にできたらいいな。

開発の流れ

基本的な開発の流れとしてまずURL->View->Model, Template, Formを決めること。URLのパターンを決めて、ViewにどのModelとTemplateやFormを使うのか記述する。その流れを作ったらstaticでcssを作る感じ。

以下、それぞれの使い方とか、項目を追加していく。

urls.py

URLの流れを指定する機能。

各アプリごとに作るのが基本。

view.py

必要なデータベースモデルとテンプレート、フォームを呼び出して合成する部分。

ClassViewとFanctionViewがある。再利用や記述が簡単なのでClassViewが推奨されている。

models.py

データベースとの懸け橋。

SQLを知らなくても使うことができて便利。デフォルトはsqlite3が設定されている。小規模なサービスなら十分だが大規模だとMySQLやPostgreSQLがよく使われる。

Templates

HTMLのテンプレート。

forms.py

フォームのテンプレート。

Static

静的ファイルを置く場所。画像やJavascriptのファイルなど。

本番ではよくミスりがちなので注意。

Admin

管理者用のページ。作ったモデルをCURD処理することができる。

Userモデル

カスタムユーザーモデルを作ることが推奨されている。

メッセージフレームワーク

ユーザーアクションの際の通知メッセージ。

開発環境と本番環境の切り替え

個人の開発環境と本番環境を設定をする場合はわざわざsettings.pyを書き換えているのは面倒なので個人開発用の設定を用意しておくといい。

秘密にしたいものは環境変数に入れるといい。

ユーザー登録関係

とても便利なライブラリがあるので利用する。

良ければサポートお願いします。サポート費用はサーバー維持などの開発費に使わせていただきます。