Djangoのルーティングを設定する方法【urls.py】

Djangoのルーティングを設定する方法【urls.py】

こんにちは、えびかずきです。

今回はDjangoプロジェクトでルーティングを設定する方法について説明します。

Django開発の初歩の初歩の部分です。

最近Webアプリの制作をするためにDjangoの勉強をしていて、大まかな開発手順が分かりはじめてきたので、自分のためにも備忘録的に記事を残しておこうと思います。

開発環境

OS:MacOS Catalina 10.15
Python:3.7.3
Django:2.2.2

手順の概要

そもそもルーティングとは、リクエスト(URL)に応じて、

Djangoプロジェクト内でどのような処理経路をたどらせるかを指定するものです。


おおまかな流れは下の図のようになります。


WebサイトにアクセスしてきたURLに応じて、順番にDjangoプロジェクト内の処理経路を指定していきます。


1.まず最初はプロジェクトルーティングで、ホスト名の次に記載されたURL文字列(app1)を参照して、どのアプリケーションに処理を受け渡すかを指定します。

この設定は、プロジェクトディレクトリのurl.pyファイルに記載します。


2.続いて、アプリケーションルーティングでは、次に記載されたURL文字列(view2)を参照して、どのビューに処理を受け渡すかを指定します。

この設定は、アプリケーションディレクトリのurl.pyファイルに記載します。


3.最終的な処理を任されたビューコンポーネントは、リクエストに応じてHTML形式でユーザーへレスポンスを返します。

※1と2の処理をひとまとめにして、全てのルーティング設定をプロジェクトディレクトリのurl.pyに記載してしまうことも可能ですが、アプリケーションの数が増えると管理がやっかいになってくるので、一般的には上のようにルーティングを2段階に分けてリクエストを処理します。


プロジェクトルーティング

urls.pyの作成場所

プロジェクトルーティングはDjango開発フォルダ内の、下図に示したディレクトリに保存します。

※このurls.pyは『django-admin startproject …』新規プロジェクトを作成した時にデフォルトで作成されます。

プロジェクト名/urls.pyの編集

urls.pyの目的は、リクエストに応じてプロジェクト内のアプリケーションに処理を割り振ることです。

コードは以下のように記載します。

#管理ページ用のオブジェクトをインポート
from django.contrib import admin
#ルーティング用の関数をインポート
from django.urls import path, include

#ルーティングの内容をリストに記載
urlpatterns = [
    path('admin/', admin.site.urls),
    path('app1/', include('アプリケーション名.urls')),
]

urls.pyのコード構造はシンプルで、『urlpatterns』というリストにルーティング設定を追加していくという形式になっています。

コード例で使っているルーティング用の関数は以下のとおり。


path(’URL文字列’,ルーティング先のコンポーネント):
ルーティング内容を引数として受け渡して、その設定を保存しておく関数

include(ルーティングファイルurls.pyのパス):
ルーティング処理を別のurls.pyへ受け渡すための関数


アプリケーションルーティング

urls.pyの作成場所

アプリケーションルーティングは、下図に示したディレクトリに保存します。

※このurls.pyはデフォルトで作成されないファイルです。自分でファイルを作成してディレクトリへ配置する必要があります。

アプリケーション名/urls.pyの編集

以下のようにコードを記述します。

#path関数をインポート
from django.urls import path

#ビューの設定ファイルをインポート
from . import views

#アプリケーション名の指定(他に同じルーティングある時に識別する用)
app_name = 'アプリケーション名'

#ルーティング
urlpatterns = [
    path('view2/', views.View2.as_view(), name="View2"),
]

ここでは、最終的なビューコンポーネントへルーティングしています。

すでにアプリケーションの分類までは終わっている状態なので、ここでpath関数へ受け渡すURL文字列は、次のビューコンポーネントを指定する文字列にします。


『.as_view()』というメソッドは、

ビューがクラスベースで作成されている場合に関数化するためのものです。


第三引数の『name=”View2″』は、

ルーティングに名前をつけるための記述です。

この記述を入れておくと、後でルーティングからURLを逆引きして活用したい時などに便利です。


補足:URL文字列のキャプチャについて

path関数に受け渡すURLの文字列は、その中の一部をキャプチャしてDjango内の処理に活用することができます。

その用途としては例えばデータ検索キーなどとして使用することができます。

path(‘…/<int:キャプチャ変数>/’,ルーティング先のコンポーネント)

上の赤字のように記述して、文字列をキャプチャします。

ここでの『int』はパスコンバータと呼ばれていて、どのように文字列をキャプチャするかを指定できます。

『int』以外にも下表のようなパスコンバータがあります。

パスコンバータ用途
str文字列をキャプチャ(空欄と「/」は除く)
path文字列をキャプチャ(空欄は除く)
int整数をキャプチャ
slug半角英数,「-」「_」で構成された文字列をキャプチャ
uuidUUIDをキャプチャ

まとめ

今回はDjangoプロジェクトのルーティング設定方法について説明しました。

リクエストURLに応じて、プロジェクト内で順番に処理を受け渡していくという基本的な流れが頭に入っていれば、そんなに難しくない処理ですね。

いよいよWeb開発っぽい内容に入ってきました。
Webアプリ完成を目指して一緒に学習していきましょう!

ひとまずこのブログでは個人で簡単なWebアプリ制作ができるレベルまで、Djangoの基礎的な記事を増やしていこうと思います。(次はviews.pyの記事を書く予定です。)

次回をお楽しみに。

参考書籍

この記事は下の書籍を参考にさせていただきました。

動かして学ぶ!Python Django開発入門(kindle版)

Python Django 超入門(kindle版)

Djangoカテゴリの最新記事