Djangoのビューの扱い方とパスの通し方(views.pyとurls.py)
Djangoのアプリケーションを作成すると views.py というファイルができます。
見た目を調整するためのファイルですね。まずこれをいじります。それからurls.pyでブラウザからアクセスできるようにルーティングします。
アプリケーションの生成方法についてはこちら↓
https://hodalog.com/how-to-start-python-django/
ちなみに次のようなディレクトリ構成のプロジェクトで進めます。
hello
├── hello # <- プロジェクト
│ ├── __init__.py
│ ├── __pycache__
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── hello_app # <- アプリケーション
│ ├── __init__.py
│ ├── __pycache__
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── manage.py
views.pyにページを書く
views.pyの初期状態は次のようになっています。
from django.shortcuts import render
# Create your views here.
ご丁寧にviewはここに作れ、って書いてありますね。1行目はrender関数を使えるようにする記述です。
適当にいじってみます。
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hi Django~!!")
2行目にHttpResponseクラスを追加するためのimport文。Webアプリケーションにアクセスしたユーザー(クライアント)にレスポンスを返すためのクラスですね。次に定義しているindex関数でレスポンスの内容を指定しています。
プロジェクト側のurls.pyでルーティングする
urls.pyというファイルがアプリケーション側ではなくプロジェクト側のディレクトリにありますが、このファイルでURLを設定します。
次のコードはデフォルトのファイルにhello_app/へのpathを追記したものです。
from django.contrib import admin
from django.urls import path
import hello_app.views as hello
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello.index),
]
1行目と2行目にあるimport文はpathを通したり管理画面(admin画面)を使えるようにするためのものですね。
3行目でhello_appディレクトリのviewファイルをhelloという名前でインポートしています。
ここで urlpatterns という配列にpathを追記するとurlが叩けるようになるみたいです。
path('hello_app/', hello_app.index)
↑これでhello_app/にアクセスした時、hello_appのviews.pyに記述したindex関数を呼び出します。
ちなみに↓これは管理画面へのpathを通してます。
path('admin/', admin.site.urls)
アプリケーションへのアクセス
Webサーバーを起動します。
python manage.py runserver 0:8000
#Port番号を指定しているが、これは環境による。
ブラウザからアクセスしてみると「Hi Django~!!」と出力されます。
ちなみにadmin/へアクセスすると、管理画面のログインページが表示されます。
アプリケーションディレクトリの中にurls.pyを用意する
プロジェクトディレクトリに置かれているurls.pyを使ってルーティングしましたが、この方法はとても大変です。アプリケーションを追加するたびにpathを追記する必要があるため、いろんなアプリケーションのpathがごちゃ混ぜになってしまいます。
そこで、アプリケーションごとにurls.pyを用意する手法を採用します。
アプリケーションディレクトリにurls.pyを作成し、次のコードを入れてみます。
from django.urls import path
from . import views # <- urls.pyが置かれているディレクトリからviews.pyをインポート
urlpatterns = [
path('', views.index, name='index'),
]
from . import views
でurls.pyが置かれているディレクトリからviews.pyをインポート、 path('', views.index, name='index'),
で
hello/indexまたはhello/と叩いた時にviewsのindex関数が呼ばれるようにパスを通しています。
次にプロジェクト側のurls.pyのコードを下記のようにします。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('hello_app.urls')),
]
2行目のimport文でincludeを使えるようにし、 include('hello_app.urls')
でhello_appディレクトリにあるurls.pyを読んでいます。
この方法でも同じようにブラウザからアクセスできるはずです。
まとめ
ビューの扱い方とパスの通し方についてまとめました。やったね!urls.pyには2通りの書き方がありますが、大きなプロジェクトになるほど、アプリケーションごとにurls.pyを用意するやり方が、使いやすいでしょうね。