Django でルーティングを介してビューを表示する

Python

前回の続きです。

Django でマイグレートする
前回の続きです。ほぼ udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。言語とタイムゾーンの設定マイグレートと関係ないですが、言語とタイムゾーンの設定をします。myfirstapp\myfirs...

半分は udemy 「【3日でできる】はじめての Django 入門」の内容の備忘録になります。

デフォルトプロジェクトにアプリケーションを追加する

以下のように「posts」というアプリケーションを追加します。
(posts: 投稿ページ的な感じ)

(env1) C:¥Users¥hoge¥myfirstapp> python manage.py startapp posts

これで、postsフォルダが以下のように自動生成されます。

└─posts
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  urls.py
    │  views.py
    │  __init__.py
    │
    └─migrations
       └─ __init__.py
ファイル名 役割
admin.py
apps.py アプリの Config (postsConfig というクラスが入っている)
models.py DB と Web ページを連携するための設定
tests.py
urls.py URL とアプリの紐付け(ルーティング)を担うっぽい
views.py ページ整形情報
__init__.py

親プロジェクトと posts の連携

親プロジェクト(myfirstapp)から posts アプリを呼び出せるようにするために、myfirstapp\settings.pypostsConfig クラスを記述します。

# myfirstapp\setting.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'posts.apps.PostsConfig', # これ追加
]

これにより、myfirstapp 側(プロジェクト側)から、posts(アプリ側)を import で参照ができるようになります。

ルーティングとビューの処理フロー

Django では、以下の図のようにブラウザから受けたリクエストを処理(ルーティング)して結果(ビュー)を返しているらしいです。

Webブラウザルーティング(プロジェクト内)myfirstapp.urlsビュー(index)views.indexアクセス(ページリクエスト)リクエスト先のページを取得該当するページを返すルーティング(postsアプリ内)posts.urls

これを受けて、以下のように myfirstapp\url.pyposts\rul.pyposts\views.py を書いていきます。

ビューの作成

posts\viwes.py を以下のようにします。
この場合、具体的には「index」という名前のビューを作っていることになります。

from django.shortcuts import render
from django.http import HttpResponse

# index というページを意味する関数
def index(request):
    # 文字列を返す
    return HttpResponse("Hello World! this is index.")

# Create your views here.

ルーティングの作成

上の絵にも書いていますが、Web ブラウザから URL にアクセスした際の処理(ルーティング)としては、
ブラウザ → プロジェクト → postsアプリ
という順場になります。
つまり、今回の場合だとルーティングは2つ存在します。

アプリ内

posts\urls.py を作成し、以下のように記述します。

from django.urls import path

from . import views

# この配列にビューとURLのマッピングを追加していくことで、URLアクセスでページの表示ができるようになる
urlpatterns = [
    path('', views.index, name='index') # 「index」という URL にアクセスすると、「views.index」を返す
]

プロジェクト内

myfirstapp\urls.py を以下のように記述します。

from django.urls import path, include   # include を追加すると、他のファイルが参照できるようになる
from django.contrib import admin

urlpatterns = [
    path('posts/', include('posts.urls')),  # 「posts/」で始まる場合、postsアプリを参照する。具体的に「posts.urls」ファイルを参照し、URLにアクセスできるようにする
    path('admin/', admin.site.urls),
]

プロジェクトを起動してみる

以下を実行し、Django 内臓のサーバーを起動し、myfirstapp プロジェクトを起動します。

(env1) C:¥Users¥hoge¥myfirstapp> python manage.py runserver

ブラウザにて http://127.0.0.1:8000/posts/ にアクセスし、posts アプリケーションの index ビューを表示します。
(http では、html ファイルを指定しなかったら、デフォルトで index のページが呼び出せれる)

posts\viwes.py に記述した index 内の文字列が表示されていることがわかります。

コメント

タイトルとURLをコピーしました