☆☆ 新着記事 ☆☆

2018年5月26日土曜日

Django (3) (4) (5) アプリを書いて、リンクしてみる

Djangoを利用して、新しいWebサイトにアプリを書いてみます。



まずは、準備。 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),
]

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は、右の()内に指定されたディレクトリのファイルを参照しろ、という記述
]


(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の定義に使われている。 




3) view.py

(個別アプリ内のview.py)#Defaultの記述内容
from django.shortcuts import render
# 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>")


さて、これで実行してみると



これでも、adminは適切に表示できます。
 
 
musicが表示できません。
エラー・メッセージを貼っておきます。
 






*(個別アプリ内の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 件のコメント:

コメントを投稿