今日はDjangoをインストールしていきます。

その前にpythonのpipのバージョンアップを行います。

先に現在のバージョンを確認しておきましょう。

 

pip -V

 

not found・・・あ~pip3 ですね!

 

pip3 -V

 

pip 21.2.4 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)と帰ってきたので

21.2.4っぽいです。

 

pip3 install --upgrade pip

 

わーっと文字が流れたので確認のため pip3 -V でバージョンが変わったか確認しておいてくださいね。

 

sudo pip3 install django

 

こちらでDjangoをインストールしていきます。

 

django-admin --version

 

でDejangoのバージョンを確認! 4.0.2 でした。

 

cd /var/www/example.com/html/

 

でディレクトリを移動してDjangoのプロジェクトディレクトリをつくりましょう

 

django-admin startproject (プロジェクトディレクトリ名)

 

今回はプロジェクトディレクトリ名をdjangotestにしたので

 

django-admin startproject djangotest


としました。WinSCPで確認するとちゃんとディレクトリが出来てるのが確認でき来ます。
WinSCPをずっと起動してるとディレクトリの変化が反映されないので 右画面 で
右クリックして 更新 をクリックすると最新の表示に変わります。



ディレクトリの中身を見ていくとこんな感じで構成されています。

はい!ここまでで 『Djangoのツボとコツがゼッタイにわかる本』 の2章ま
でが終わりです。
3章から各ファイルの説明など丁寧に技術書が解説していますので読んでみてください。

続いてsettings.pyファイルの記入します。WinSCPでファイルを一度PC側へダウンロードします。右画面のファイルを指定してキーボードの F5 でダウンロードできます。


で実際にこのダウンロードしたファイルを自分のPC側でATOMで開いて編集していきます。

こんな感じで開きますので、28行目を追記します。

 

ALLOWED_HOSTS = ['example.com', 'www.example.com'] #追記分

 

追記したら 上書き保存してください。


WinSCPで更新した左側の『settings.py』ファイルを指定して F5 を押すと次は
アップロードができます。

次は、Djangoがサーバーで動いているか試すのですが、本では

python3 manage.py runserver

となっていますが、外部サーバーで動かす場合は

python3 manage.py runserver ドメイン名またはGIP:8000

と入力しないといけません!私はドメインなので『python3 manage.py runserver example.com:8000』と入力しました。
無事に表示できたかな??これで技術書の3-4まで進めましたね!


3-8までは、問題なくスルスルーとどんどん進んでいきます。

3-9にて関数で処理していたのを同じようにClassで作ってみようとなります。
ここでひっかかる情報がありました。htmlファイルをどこから読み込むか?という設定を
するのですが、p72で下記が説明されてます。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

上記ですが、、、そんなものはありません!!Djangoのバージョンが上がって書き方が変わってます。

BASE_DIR = Path(__file__).resolve().parent.parent

 

こちらで説明されています。

Path(__file__).resolve()でsetting.pyの絶対pathをゲットします。pathとはファイルがどこにあるかの階層の事で絶対パスとは一番上からって感じ。

 

AAA/BBB/CCC/DDD

CCCというフォルダを開くとDDDというファイルが見えます。DDDというファイルの絶対path

はAAA/BBB/CCC/DDDですが、相対pathは./DDD。どこから見た時のpathなのか?で表現がことなります。

 

こちらpathの参考にしてください。

 

.parent.parent は.parent = 上の階層へ という事ですので、2つ上の階層へとなります。
私の場合 setting.pyはPath(__file__).resolve()の絶対パスで

/var/www/example.com/html/djangotest/djangotest/setting.py

です。
templatesのフォルダを

/var/www/example.com/html/djangotest/templates

に作ってあります。
djangotestのフォルダの中にdjangotestとtemplatesのフォルダが入っていますので、

Path(__file__).resolve().parent.parent は
/var/www/example.com/html/djangotest/djangotest/setting.py の2つ上の階層なので
/var/www/example.com/html/djangotest/djangotest/setting.py がきえて
/var/www/example.com/html/djangotest/ ← ここに来るってことで、ちゃんとtemplates
のフォルダの場所を指していることがわかります。

で、classを進めていって runserver で動かすと

    'DIRS': [os.path.join(BASE_DIR , 'templates')],
NameError: name 'os' is not defined

とエラーがでて実行できない場合がありますが、その場合は setting.py のfrom pathlib
 import Path の上にでも import os を加えるとエラーが消えます。
消した覚えはないけど、、、消したのかな・・・・

つづいて出てきたのが、

django.template.exceptions.TemplateDoesNotExist:OOOO.html

う~ん。。。フォルダとファイルは自PC側で作ってWINSCPでサーバーへ送り込みました。
いろいろやった結果、、、どうも自PCで作ったのが良くなかったらしく・・・

mkdir templates
topuch OOOO.html

とサーバー側で作成したものをWinSCPでダウンロードして修正してアップロードする事に
関しては問題なく反映されました。
権限などの問題だと思いますが。。。課題として残しておきます。.....

ここまでで3-9 class関係のこけまくりは解消しました。
次回は3-10 アプリをやっていきます。