Djangoを使ってHello Worldを表示させることを目標にします。
ファイル、フォルダがたくさんでてきます。
参考サイトを大いに参考にしてくださいね。

pythonのフレームワーク、Djangoの構造
フレームワークとは、電子炊飯器のようなもので、便利にご飯が炊ける、便利にプログラミングができるしくみです。効率よくアプリケーションwebサイトをつくるためにつくられました。
Djangoの構造はどうなっているのでしょうか。
調べてみたところ
urls.py : ユーザーの操作(リクエスト)を最初に受け取る(処理する)ファイル
models.py : データベースとやりとりするファイル
templatesフォルダ : ユーザーのリスエクトに対してデーターベースの情報を書き込むhtmlファイルを集めたフォルダ
views.py : urls.pyとmodels.pyとtemplatesをつなぐファイル(urls.pyから受け取ったリクエストに対して適切なデータをmodels.pyからもらい、urls.pyのリクエストに対して適切なtemplatesに入れ込む)
urls.pyはリクエスト窓口の係員。
views.pyは本部(文書に何を書くか決める)。
models.pyはデータ保管室の管理人。
view.pyは、templatesフォルダ内にあるどのhtml文書が適切か選んで使います。
①ユーザーがURLをリクエストする。
②URLで指定されたプロジェクト内のurls.py(1階の総合案内)が起動して、プロジェクト内のアプリケーション内にある各部署の窓口(urls.py)を叩き起こす。
プロジェクト>プロジェクト>urls.py ←この人が各部署の窓口を叩き起こす。
③指定されたURLでview.pyに書かれたどの関数を起動するか決める。
プロジェクト>アプリケーション>urls.py ← この人(各部署の窓口)が関数(文書ではない)を指定する。
この記事ではここまでです。次の記事で
④アプリフォルダ内のviews.pyでtemplatesフォルダの中にある文書(HTML)を指定する。
プロジェクトフォルダ>アプリケーションフォルダ>view.py ←この人がユーザーにリスポンスするHTML文書を指定する。
ところまでやります。
プロジェクトフォルダ>アプリフォルダ内にフォルダとファイルをつくる。
フォルダを2つ。(アプリ名をつけたフォルダの中にtemplatesフォルダをつくり、さらにその中にアプリ名をつけたフォルダを再び作る)
ファイルを1つ。(アプリ名>templates>アプリ名のなかにhtmlファイルをつくる)
手動で作って構いません。
全部で3つです。
プロジェクト>プロジェクト>urls.py(URLconfとも呼ばれる)を書き換える
プロジェクトで使うアプリケーションを全て書き込んで、プロジェクトが立ち上がった時に全てのアプリケーションのurls.pyが実行されるようにします。
tryprojectフォルダ内にあるurls.pyを書き換えるようです。
urls.pyの役割は「リクエスト」に対して適切な「リスポンス」をするファイルに情報を渡すことです。
コピペだけでなく、自分がつけたアプリケーション名を変更するのを忘れずに。(私の場合はtryapp)
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('tryapp.urls')) ]
path(”, include(‘tryapp.urls’))” “の中身がないのは
http://127.0.0.1:8000/にアクセスしたらとにかく全部tryapp/urls.pyを実行させる
ことを表しています。(何が起きたらアプリを実行するかによって’’の中にアプリフォルダを書き入れます)
path(‘tryapp/’, include(‘tryapp.urls’))と書くと
http://127.0.0.1:8000/tryapp/にアクセスしたらtryapp/urls.pyが実行されます。
こちらの記事も参考に。

できましたか?
では
試しにサーバーを動かしてみましょう。
$ python3 manage.py runserver
わくわくエラー!
No module named 'tryApp.urls'
はい、アプリケーションフォルダ内にurls.pyファイルをつくりましょう。
プロジェクト>アプリケーション>urls.py(URLconfとも呼ばれる)を作って書き加える。
とあるURLをリクエストされたら、view.pyに書かれた関数のうちどれを実行するのか指定します。
最初からつくってくれたらいいのに・・と思いながら。
手動で作りました。
アプリケーションフォルダ内にurls.pyファイルを手動で作るようです。
中身はこちら。
from django.urls import path from . import views app_name='tryapp' urlpatterns = [ path('tryapp/', views.firstfunction, name='firstfunction'), ]
path(‘tryapp/’, views.firstfunction)というコマンドで
tryapp/をリクエストされたらviews.pyで定義された関数firstfunction を実行させているそうです。
nameを書かなくても実行できました。なんでしょうこれ?
URL のリバースを処理するためには、上述の例で行ったように 名前をつけられた URL パターン を使う必要があります。URL 名として使う文字列には、どんな文字でも含めることができます。Python の有効な名前に制限を受けません。

使い方がよくわかりません。
プロジェクトフォルダ>アプリケーションフォルダ>view.pyを書き換える。
アプリケーションが読み込まれたら実行する関数をview.pyで定義します。
tryappフォルダの中にあるview.pyを開きます。
ん?ないですか?
手動でつくってもよいし、
コマンドで
touch プロジェクト名前/views.py
と打ち込んで作ってもらってもかまわないそうです。

を参考にして書き換えて見ましょう。
view.pyのコードは以下のよう。
from django.shortcuts import render from django.http import HttpResponse def firstfunction(request): return HttpResponse("Hello World!")
HttpResponseはDjangoのメソッドです。
imprtしなかったらコンソールに
NameError: name 'HttpResponse' is not defined
と表示されます。
まらブラウザで表示させても
とでてきます。
プロジェクト>プロジェクト>setting.pyにコードを加えてアプリフォルダを認識させる
プロジェクトファイルの中にあるプロジェクトファイルの何あるsetting.pyの中身を変えます。
アプリフォルダを紐づける?役割があるそうです。
「このプロジェクトにはこれらアプロケーションをつかいますよ」とコンピューターに教えている模様。
(tryprojectフォルダ内にあるurls.py でアプリとそのurls.pyを指定しただけじゃだめ?)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'アプリ名.apps.アプリ名Config' ]
アプリ名をtryappにしたなら
‘tryapp.apps.TryappConfig’ です。
大文字にする箇所があります。
もう一度実行
では。
改めて。
python3 manage.py runserver
わくわく
No such file or directory
コンピューターは反応返してくれるところがやさしいよね。
$ cd /Users/otonone/Desktop/python_lesson/Django/tryproject
$ python3 manage.py runserver
いけたかな?
ブラウザで
想いは届かない。
あ、tryAppで大文字を使ったのがいけなかったのかとおもって全て書き直す。
そして
python3 manage.py runserver
結果
Django version 3.1.7, using settings 'tryDjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
やったぜ
さっそくhttp://127.0.0.1:8000/にアクセスすると
うーん。
エラーメッセージの意味はわからないのですが、

にある通り、
にアクセスします。
でた!!!
書き換えます。
サーバーにつなぎ直さなくても、view.pyを書き換えてブラウザを再度読み込みさせれば更新されました。
できたーーーーー!!!!!!
で、templates内のhtmlファイルを消しても実行できます。
意味がわかりません。
コメント