urls.pyファイルの設定
まずはurls.pyファイルの設定からです。
urls.pyファイルを開いてみましょう。コメントをのぞくと、以下のようなコードが確認できます。
[コード]BASE/hello/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
ここでのポイントは、urlpatternsの部分です。
あるurlがリクエストされた時に、次に何を表示するのかをここで制御しています。
ちなみに、path('admin/', admin.site.urls)というのは、127.0.0.1:8000/adminというurlがリクエストされたら、次にadmin.site.urls(管理画面)を表示する、という指示をしています。(これは若干高度な内容なので、まずはざっくりとした理解で大丈夫です。)
このurls.pyに一行追加します。
[コード]
BASE/hello/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.helloworld), ← new!
]
path('hello/', views.helloworld)について、くわしくみていきましょう。
このコードは、127.0.0.1:8000/hello/というurlがブラウザからリクエストされた時に、views.helloworldを表示する、という指示をしています。
ただ、views.helloworldが何を示しているのか分からないですよね。
これは、「view.py」ファイルの中の「helloworld関数を実行しなさい」と指示しています。
ちなみに、今回はviewsがファイルでhelloworldが関数でしたが、これが何を意味するのかは状況によって異なります。
なぜなら、これらは(helloworldは)属性である場合もあれば、メソッドである場合もあるからです。
(これはパイソンの内容ですが、詳しく理解したい場合はクラスという記事を読んでみるとよいかもしれません。)
helloworldの中にviews.pyというファイルはありませんので、views.pyファイルを作っていきましょう。
[コマンドライン]
BASE/helloworld
$ touch views.py
views.pyファイルができました。
作った後に、このファイル(views.py)を開いてみましょう。
開くと、もちろんコードは何も書かれていません。
ただ、さきほどurls.pyファイルの中で、http://127.0.0.1:8000/hello/がリクエストされると、view.pyファイルの中のhelloworld関数を呼び出すとしましたので、実際にhelloworld関数を作っていきましょう。
[コード]
-BASE/hello/views.py
def helloworld(request):
return HttpResponse('<h1>hello world</h1>')
requestはブラウザから送られたHttpRequestにもとづいて作られたオブジェクトです。
Httprequestに関連するたくさんの情報が入っているオブジェクトというイメージを持ちましょう。
ちなみに、djangoでは、viewを適切に表示するためには、関数の第一引数としてrequestを取らなければいけません。
そして、このhelloworldメソッドはHttpResponseオブジェクトを返すよう指示しています。
HttpResponseオブジェクト(クラス)はコンストラクタを持っており、オブジェクトを作成したときに渡した文字列(今回の場合は<h1>hello world</h1>)をブラウザに返します。
このように、無事にhello worldが出力されていることが確認できました。
なお、このようにviews.pyファイルにおいて、関数を使ってブラウザに表示させる内容を管理する方法をfunction based viewといいます。
これに対し、クラスを作ってブラウザに表示させる内容を管理する方法もありますが、これはclass based viewといいます。
また、結局のところ、Djangoがやっていることはリクエストを受け取って、レスポンスを返す。ということをしているだけです。
class based viewは次の記事で詳しく解説しています。
次の記事
function based viewではなく、class based viewで同じくhello worldを表示していきます。