週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

Djangoチュートリアルにおける不明用語解説【Django×anaconda】


下記サイトを進めていく上で、Webアプリ作成をしたことがない人にとって不明な用語が複数出てきたと思います。本日はそれを一つずつ解説していきます。
qiita.com

Djangoって何?

基礎から学ぶ Django

基礎から学ぶ Django

  • 作者: 関根裕紀,新井正貴
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2018/09/19
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
 

まずDは発音しません。
ジャンゴと言います。

DjangoPythonで実装されたWebアプリケーションフレームワーク
ジプシー・スウィングのギタリストであるジャンゴ・ラインハルトにちなんで命名された。
第一の目的は、複雑なデータベース主体のWebサイトの構築を簡単にすることである。
(Django - Wikipediaより引用)

なぜギタリストの名前を使ったのでしょう。謎。

フレームワークとは?

枠組み。構造。
frameだけではダメなのか?と疑問に持つと思います。
となるとframeとframeworkの違いは何か?と言うことになります。
frame と framework はどう違いますか? | HiNative
一部引用すると、

The two can be interchangeable, but traditionally the frame of the building would be the metal structure of the building to keep it sturdy.
The framework could also be that, but most English teachers would agree that it's more of what the the builder or architect had in mind for the building.

・frameは物理的な枠組み
・frameworkは抽象的なイメージとしての枠組み

仮想環境とは?

仮想:仮定としての想像
どのような場合を仮定するのか。
例えばクライアントが古いOSを使用していてそのOSを変更する気はない場合でも、
仮想環境でそのOSをインストールし、その環境で動くアプリケーションを作成すればクライアントPCでも使用可能状態にすることができます。
つまり、自分のPCの中に複数の別の環境を作ることを目的としたものです
そして仮想環境には三種類あり、以下の3つの型に

  • ホスト型
  • ハイパーバイザ型
  • コンテナ型

コンテナ型は仮想環境上でOSをインストールを入れる必要がなく動きます。
venvで作成する仮想環境はこの「コンテナ型」に当たります。

仮想環境作成時のコマンド「python3 -m vent myvenv」とは?

まず「m」について
  • m モジュール名

としてPythonモジュールパスにあるモジュールを指定された場合、そのモジュールをスクリプトとして実行します。
引用元:1. コマンドラインと環境 — Python 3.6.5 ドキュメント

venvとは?

vent = virtual environments:仮想環境
何の略称か気になる場合は英語のサイトが近道です。
29.3. venv — Creation of virtual environments — Python 3.7.0 documentation

このコマンドを実行することにより、
仮想環境(ここでいう「myvenv」(python3 -m vent myvenv)とコマンドを打っているので)が作成されます。
28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント
上記のサイトによると、このコマンドを実行すると、

pyvenv.cfg

というファイルが置かれます。確認してみてください。
cfg = config(設定)
ですので、このファイルの中身を見てみるとこんな感じです。
f:id:ml_begin:20180704210737p:plain

home キーはこのコマンドを呼び出した Python のインストール場所を指します。
引用元:28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント

気になるのは二行目

include-system-site-packages
  --system-site-packages
                        Give the virtual environment access to the system
                        site-packages dir.
引用元:[https://docs.python.jp/3/library/venv.html:title]

和訳すると、
--system-site-packages
システムのPythonライブラリに仮想環境からアクセスできるようにする

これやってしまうと仮想環境の意味あるのか?と疑問に思う方もいると思いますが、
仮想環境に入れる前にシステムに入ってるモジュールを試すことによって
仮想環境にインストール→アンインストール
の手間を省けるというメリットがあります。

pipとは?

pip("Pip Installs Packages" または "Pip Installs Python")はPythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムである。
引用元:pip - Wikipedia

「ピップ」と呼びます。

pipで一番重要な機能は、ファイルに必要なパッケージのリストとそのバージョンを書いておけば簡単にパッケージ管理を行えるという点である。
この機能は他のコンピュータや仮想環境に同じPythonの環境を用意するときに非常に役に立つ。この機能を使うには、適切なフォーマットで必要なパッケージを「requirements.txt」ファイルに書き、次のコマンドを実行すればよい。

pip install -r requirements.txt

引用元:pip - Wikipedia

django-admin startproject myappとは?

【Django入門】adminサイトの作り方からカスタマイズまで! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
ここに全て書いてあります。

django-admin

はadminサイト(admin = administrator 管理者)を作成するときのコマンドです。
知らず知らずのうちに管理者のみしか編集できないサイトを作成していたようです。
ちなみに上記のコマンドを実行すると

myapp

というディレクトリが作成されます。myappの中身はこのようになっています。
f:id:ml_begin:20180705220409p:plain

manage.pyの中身には何が書いてある?

「myapp」ディレクトリの中に、

manage.py

というプログラムがあります。この中身について解説します。
f:id:ml_begin:20180705220731p:plain

os.environ.setdefault(??)とは?
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.setting

こういうコードの場合、

スクリプトDjango の models モジュールを読み込めるようにするため、DJANGO_SETTINGS_MODULE 環境変数がプロジェクトの settings.py を指すようにする。

引用元:PythonスクリプトでDjangoにデータを登録する

manage.pyと同じ階層に「myproj」というディレクトリがあり、
その中にある「setteing」というpythonスクリプトファイルを指定しています。
私の場合は、
f:id:ml_begin:20180707152645p:plain
であるので
f:id:ml_begin:20180707152840p:plain
「myapp.settings」
という形で指定しております。

DJANGO_SETTINGS_MODULE 環境変数
Django を使う場合、どの設定を使っているのかを Django に教えなければなりませ んが、これには環境変数 DJANGO_SETTINGS_MODULE を使います。

引用元:
Django の設定 — Django v1.0 documentation

__init__など「__○○__」の形式はなに?

「__◯__」で定義される関数は外部の参照を受けないもの。
「_◯」で定義される関数は参照はできるが、基本的に外部から参照しない ということを慣習化させたものです。

DBのマイグレーションとは?

マイグレーション:migration(移動)

マイグレーションとは、DBに保存されているデータを保持したまま、 テーブルの作成やカラムの変更などを行うための機能です。
データベースを削除してから作り直すと,DBに保存されている情報が全て削除されてしまいます。こういった事態を回避する方法として、データベースマイグレーションを行う方法があります。 引用元:3. データベースマイグレーション | densan-labs.net 

サーバーとは?

サーバあるいはサーバー(英: server)は、サービスを提供するコンピュータである。コンピュータ分野のクライアントサーバモデルでは、クライアントからの要求に対して情報や処理結果を提供する機能を果たす側のコンピュータやソフトウェアを指す。

引用元:サーバ - Wikipedia

127.0.0.1の意味

ローカル・ループバック・アドレスとは、自分自身を表す特別なIPアドレスの1つであり、TCP/IPが有効なコンピュータでは常に利用可能なIPアドレスである。

引用元:
ローカル・ループバック・アドレス(127.0.0.1)とは?:Tech TIPS - @IT 

models.pyでは何をしている?

Modelとは?

model:模型・雛形
模型:何かを模して、具象化したもの
その意味を踏まえて、Modelの役割を見てみましょう。

modelはデータベースに格納されているデータを扱います。Djangoではデータベースを直接扱わなくても良いように、models.pyに記述されているクラスを操作することで、データベースを操作することが出来ます。

modelを使うと、データベースの管理がとても楽に、コードを最小限にしながらWebアプリケーションを作ることが出来ます。

つまり、

データベースを模したもの = データベースを操作可能なもの

です。

models.py

models.py

from django.db import models
from django.utils import timezone

class Post(models.Model):
        author = models.ForeignKey('auth.User')
        title  = models.CharField(max_length=200)
        text   = models.TextField()
        created_date = models.DateTimeField(default=timezone.now)
        published_date = models.DateTimeField(blank=True, null=True)

        def publish(self):
                self.published_date = timezone.now()
                self.save()

        def __str__(self):
                return self.title

# Create your models here.

ForeignKeyとは何か。

外部キー (FK) は、2 つのテーブルのデータ間にリンクを確立および設定するために使用される単一の列または複数の列の組み合わせです。
引用元:[https://technet.microsoft.com/ja-jp/library/ms175464(v=sql.105).aspx:title]

一般的な用語です。

        title  = models.CharField(max_length=200) # タイトルを表示する
        text   = models.TextField() #ユーザーがテキスト入力する
        created_date = models.DateTimeField(default=timezone.now) #日時を表示する (CharFieldの用途限定版?)
        published_date = models.DateTimeField(blank=True, null=True) #任意入力箇所?
models.DateTimeField(blank=True, null=True) 
blankとnullの違いとは?
"required" is a valid argument for Django forms. For models, you want the keyword args <b>blank=True (for the admin)</b> and <b>null=True (for the database)</b>.
引用元:
[https://stackoverflow.com/questions/11351619/how-to-make-djangos-datetimefield-optional:title]

blank : 管理者に対する

null   :データベースに対する

makemigrations と migrateの違い

makemigration

makemigrationsコマンドでマイグレーションファイルを作成する。

マイグレーションファイル:

model.pyの内容をデータベースに反映させるための中間ファイル。
引用元:
[https://qiita.com/okoppe8/items/c9f8372d5ac9a9679396:title]
中間ファイルとは..?
コンパイラーなどがオブジェクトファイルを生成するために作成するファイルのこと。
通常、コンパイル(変換)が終了すると自動的に削除される。
引用元:
[https://kotobank.jp/word/中間ファイル-5778:title]
migrate

中間ファイル(マイグレーションファイル)の内容をSQLに翻訳し、
データベースに適用する。

中間ファイルを作成する必要がなぜあるのか?
作成される目的なソフトウェアによって様々だが、代表的な用途として、メモリ上に格納しきれない巨大なデータを扱う場合に一部を退避させる場合や、急な電源断やソフトウェアの異常終了などに備え編集中のデータの一定時間ごとに複製する場合などが挙げられる。
引用元:
[http://e-words.jp/w/一時ファイル.html:title]

今回Djangoで行うチュートリアル的なものの場合、
そこまでメモリを消費することはないと思いますが、規模が大きくなってくると膨大になります。そのために、中間ファイルを生成することにより役割を分け、一度に使用するメモリを少なくしています。

 

まとめ

以上、不明用語は解決できましたでしょうか。ある程度不明用語が出てきたとしてもとりあえず作ることが最優先です。疑問に思ってどうしても前に進めなくなったときはこのページをご覧いただき、推進力としてください!