まずは、準備。 Powershellを管理者権限で立ち上げて、プロジェクトファイルの
ディレクトリで、以下のコマンドを実行し、PC上の疑似Webサーバー環境にアクセスできるようにしておきます。
>python manage.py runserver
アプリの作成
次に、以下を同じくPowershellで実行。
>python manage.py startapp [任意のアプリの名前]
たとえば、任意のアプリに ”music" と入れて実行してみます。
するとルート・ディレクトリ配下に フォルダ名 "music" が作成され、デフォルトのスクリプトが作成されていることが確認できます。
これらのスクリプトは、Webサイトのデータベース連結に使われているものです。
例えば、
*model.py は、
データベースのリンク構造を表記するためのもの。
Pythonのクラスの定義などに使われます。
*views.py は、
ユーザーからのrequestを受け付けて、結果を返すためのスクリプトです。
以上 (4)の内容
さて、大事なURLの話し。
フォルダを作っただけでは、WebページのURLは認識されません。
例えば、以下のようにディレクトリをURLに直接記述しても、404 エラーが帰ってきます。
http://127.0.0.1:8000/music
一方で、
http://127.0.0.1:8000/admin
は、以下のように表示されます。
これは、ルートディレクトリ直下のプロジェクト・フォルダ内のURLに以下のように、デフォルトでリンクがひも付されているからです。
#djangoweb/urls.pyの初期記述内容
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
admin/’を指定しているpath()では、URLが「admin/」の場合に、管理画面(admin.site.urls)を返す(ブラウザに表示する)という設定になっています。
従って、musicに関しても、同様のひも付してあげる必要があります。
新Application "music" のurlをリンクさせる
1) urls.pyの変更
httpの挙動としては、ドメイン名の下にどのようなフォルダが指定されていても、最初に必ずドメインのフォルダを確認しにいく。
(プロジェクト全体)#djangoweb/urls.pyの修正後記述内容
from django.urls import include, path, include # include,で他のpathも参照
from django.contrib import admin
urlpatterns = [
path(r'admin/', admin.site.urls),
path(r'music/', include('music.urls')), # music内のPathの追加
# includeは、右の()内に指定されたディレクトリのファイルを参照しろ、という記述
]
from django.contrib import admin
urlpatterns = [
path(r'admin/', admin.site.urls),
path(r'music/', include('music.urls')), # music内のPathの追加
# includeは、右の()内に指定されたディレクトリのファイルを参照しろ、という記述
]
(r) は、以降の記述が正規表現であることを表します。
Caret (^)は、「~で始まる」、ドル記号($)は「~で終わる」を意味します。^ や $ を用いない場合は、「~を含む」という意味になります。
*注) ^ を、記述するとエラーになるので、とりあえず書かずにおきます。
(参考)正規表現の解説URL: http://www.tohoho-web.com/perl/regexp.htm
(Tip)
ただし、このurls.pyに直接、URLを記載していくと、非常にボリュームが大きくなることも予想されるので、プロジェクト全体のurls.pyと、各APPのフォルダにurls.pyを作成し、ルートのurlsには、この各APPフォルダ内のurlsのパスを記述するようにする。
2) 個別アプリ内のurls.py
(個別アプリ内のurls.py)#music/urls.pyの新規作成
from django.urls import path #全体のurls.pyよりコピペ
from . import views # viewを参照できるよう記述。 # ドットは同じディレクトリ参照という意味
urlpatterns = [
path(r'^$', views.index, name='index'),
# ^に続く文字で始まり$で終わる。 文字列が入っていない場合ホームの
#indexが参照されるという意味。
# Name以降はオプションview内のFunctionの定義に使われている。
]
from . import views # viewを参照できるよう記述。 # ドットは同じディレクトリ参照という意味
urlpatterns = [
path(r'^$', views.index, name='index'),
# ^に続く文字で始まり$で終わる。 文字列が入っていない場合ホームの
#indexが参照されるという意味。
# Name以降はオプションview内のFunctionの定義に使われている。
]
3) view.py
(個別アプリ内のview.py)#Defaultの記述内容
from django.shortcuts import render
# Create your views here.
# Create your views here.
(個別アプリ内のview.py)#変更後の記述内容
個別アプリ内 urlsで指定された処理(view)は、どういう内容か記述する。
from django.http import HttpResponse
def index(request): #urlsで指定したnameでfunction定義
return HttpResponse("<h1> This is the Music App Homepage!</h1>")
def index(request): #urlsで指定したnameでfunction定義
return HttpResponse("<h1> This is the Music App Homepage!</h1>")
さて、これで実行してみると
これでも、adminは適切に表示できます。
エラー・メッセージを貼っておきます。
*(個別アプリ内のurls.py) (r'^$')と記述するとエラーになるので、とりあえず
path(r'', views.index, name='index'),
と記述しておく。 これなら("<h1> This is the Music App Homepage!</h1>は表示される。
やっぱりCaret (^) のところでしょうか?
上手くリンクが完成しない。
どこの記述が悪かったのか?
とりあえず、先に進みます。
後日、リベンジ。
後日、リベンジ。
参考)
Django Tutorial for Beginners - 3 - Creating Our First App
https://youtu.be/4saN7GZnawU
Django Tutorial for Beginners - 4 - Overview of a Basic App
https://youtu.be/lcD0CDurxas
Django Tutorial for Beginners - 5 - Views
https://youtu.be/nAn1KpPlN2w
尚、urls.py / view.pyについては以下のサイトも詳しい。
https://www.sejuku.net/blog/26584
0 件のコメント:
コメントを投稿