Djangoに挑戦してみたー理解編

こんにちは、TaKaです。
今回は、今までpythonのウェブフレームワークであるFlaskを使ってウェブアプリを開発していましたが、今回は、もう一つのフレームワークであるDjangoを使ってウェブアプリを開発してみようと思い、投稿します。
まず、DjangoとFlaskについて違いをさらっと書いてみます。
Flaskは必要最小限の材料で構成され、外部のプラグインから機能を付け足すフレームワークに対して、Djangoは最初から機能が充実しているフレームワークです。
実は、私、最初はDjangoを使って開発しようと思い、勉強してみましたが、当時の私では理解できず挫折してしまいました。そして、必要最小限の機能でリリースできるFlaskで始めていました。
しかし、ちょっと時間に余裕ができてきたので、後学のためにDjangoを使って開発しようと思い、頑張ってみました。

まず、Djangoを理解するのに使った文献を示します。
The web framework for perfectionists with deadlines | Django (djangoproject.com)
Djangoについてですが、かなり機能が充実しているそうで、そのとき作ってみたいアプリに応じて習得する予定です。そのため、今回は、網羅的でなく全体像を理解しつつ、一部の機能を適用してちゃんとリリースすることを目的にしています。

Djangoでの開発ですが、人気のフレームワークともあり、多くの記事で詳説されているので、手順については省き、自分が以前理解できなかったものについて、今回「こういうことかな?」と理解したことをお話しします。

プロジェクトの中にアプリを作る。

まず、アプリを作るにあたってプロジェクトを作るのですが、この中に直接処理を書くわけではありません。これはあくまで実行ファイルとウェブサーバーをつなぐ設定だけが用意された箱です。そのために、実際に実行する処理を書くには、プロジェクトの中にアプリを作り、(startappというコマンド)そこに書いていくことになります。つまり、アプリとウェブサーバーをつなぐ役割がプロジェクトのようです。

サイトの見た目を作る。

次に、実際にサイト上で動く見た目を作ります。
これは、「アプリ」のフォルダに用意されている「views.py」を使って、以下のようにHttpResponseで文字(”Hello index")を返す関数を書きます。

from django.http import HttpResnpose
def index(request):
    return HttpResponse("Hello index")

サイトをウェブサーバー(ローカル)につなげる。

次に、このサイトを見えるようにするには、URLと紐づけなければなりません。ここで、私が苦戦していたのは、この処理を担うファイルがアプリの中と、それをウェブとつなげるプロジェクトの中にあるurls.pyを2つ書き換える必要があることを理解できていなかったことです。
アプリとプロジェクトの役割の違いを理解できていなかったので当然と言えばそうです。

では、アプリ内のurls.pyを以下のように書き換えます。

from django.cotrib import admin
from django.urls import path
urlpatterns = [
    path(’’,view.index,name='index'),
]

このように、アプリ内のviews.pyに書いた関数indexを「views.index」(nameも同じ関数名)としてパスを通し、urlpattenとして見た目を伝える関数を指定します。

次に、このアプリのviews.pyをウェブサーバーにつなげる処理をプロジェクト内のurls.pyで以下のように書き換えます。

from django.contrib import admin
from django.urls import include,path
urlpatterns = [
    path('start/',include('start.urls')),
    path('admin/',admin.site.urls),
]

このように、プロジェクト内のurlpatternでは最初に出るトップページのパスに加えてadminのパスも加えます。これは、まだ理解の途中なので、こういうものだと解釈しています。(すみません)
ここで、私が気づいたのは、一行目のパスに、「start/」と私が作ったアプリの名前である「start」、次のパラメータで「start.urls」とアプリ内のurls.pyを指定していることでした。

これでローカルで実行しよう・・・でもなぜかエラーが??

これで、ローカルで実行しようと思い、意気揚々と実行しました。しかし、「ページが見つかりません」のエラーが出てしまいました。なぜ?
そう思った私が調べたりして気づいたことが…
プロジェクト内のurls.pyのpathの一個目に書いた「start/」です。つまり、ローカルでのurlにさらに「start」というアプリの名前を入れないとstartのviews.pyまでたどり着かないということでした。これでやっと簡単な文字をサイトにつなぐことができました。

ローカルで実行できました。次回に続きます。


やはり、自分で試行錯誤しながらやるのは大変ですね。
でも、できた自分をほめたいです。
これで最低限の実行は終えたところで、いったん終わりとして、次回に続きます。
ご一読ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?