Web

Python:Django ~アプリケーションの作成~

スポンサーリンク

Djangoの仕組み ~MTVモデル~

Webサーバーは、「リクエスト情報」を受け取り、適切な「レスポンス情報」を返します。 受け取った「リクエスト情報)から「レスポンス情報」を返すまでの流れを見ておくと、イメージしやすくなります。

これは次のブログがわかりやすいです。
http://farewell-work.hatenablog.com/entry/2017/05/07/160836

リンク先のブログに書いてある図のように、まずはDjangoの中のUrlが、リクエストの「URL」を受け取ります。そのあと、次のように処理が進んでいきます。

  • Url
    Project側で受け取ったUrlがどのApplicationを呼び出しているのかを判断します。そして、Application内でどのViewを呼ぶのかを選択します。なので、リクエストの「URL」をDjango Projectの「Url」が受け取って、まずはどのApplicationが処理するかを判断します。
     そのあと、Applicationの「Url」が受け取り、どの「View」を呼び出すかを判断して渡します。
  • View
    呼び出された「View」は情報を集めます。処理に必要なデータを「Model」とやりとりして、(必要に応じて)「Form」によるチェックをおこない、利用する「Template」を呼び出します。
  • Model
    データを保持・管理するデータベースと考えるとわかりやすいと思います。
  • Form
    リクエスト情報が正しいかチェックしたり、htmlのformタグを作ります。
  • Template
    レスポンス情報のHTMLファイル。Viewで指定されたTemplate名のHTMLファイルを渡します。

つまり、まず「リクエスト情報」がきたらそのURLをみて、どの「Application」に渡すかを判断して、さらにどの「View」を呼び出すかを判断・・・のように処理が進んでいきます。
今回は、まずApplicationを作成して、「リクエスト情報」から「Application」に情報がわたるところを確認していきましょう。

Applicationの作成

では、プロジェクトにApplicatioを作っていきましょう。今回は、「start」というApplicatioを作ることにしましょう。以下のコマンドを入力してください。

python manage.py startapp start

すると、startというフォルダが自動生成されます。

新しく作成されたフォルダの中をみると、必ず存在するファイルが「–init–.py」です。これは、そのフォルダがPython Packageであることを表します。Python Packageで館律することで、import分により、Python Package内のpythonファイルを呼び出すことができます。

  • manage.pyについて

Djnagoフレームワークは、Terminalにコマンドを入力することで、自動で必要なファイルを生成してくれる便利な機能があります。今回、Applicationを作るときも使いましたね。これは次のような書式となっています。

python manage.py XXXX

このmanage.pyを実行することで、xxxxに指示した動作を自動でやってくれます。※今回はstartappでしたね。

ProjectにApplicationを認識させる

さて、Applicationを作成することができました。「Djangoの仕組み」の部分に記載したように、「リクエスト情報」がくると、「Project」の「Url」がまずはどの「Application」に渡すかを判断するのでした。それには「Project」に「Application」を認識させる必要があります。ここでは、最終的に呼び出したApplicationがViewを呼び出して、「レスポンス情報」を返す処理までをおこないます。作業手順は次のようになります。

  • ProjectにApplicaionを認識させる
  • ProjectのurlsでApplicationのurlsを呼び出す
  • Urlsを作成
  • Viewを作成

ProjectにApplicationを認識させる

ProjectにApplicationを認識させるには、configフォルダの中のsetting.pyにApplicationの情報を書き込みます。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'start',
]

今回作成したApplicationはstartなので、setting.pyでINSTALLED_APPSの記述を見つけて、startを加えます。これえProjectに新しいApplicationである「start」を認知させることができました。

ProjectのurlsでApplicationのurlsを呼び出す

次に、Projectが「リクエスト情報」を受け取ったときに、まず最初にする処理である、どのApplicationに渡すか、を判断する部分を設定します。まだ、どのApplicationに渡すかが決まっていないので、configの中のurls.pyに情報を書き込みます。

from django.contrib import admin
from django.urls import include     # 追記
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('start/', include('start.urls')),      # 追記
]

これで、http://xxx.xxx.xxx./startのようなリクエストが呼び出された時には、startというApplicationに渡すことができるようになりました。

Urlsを作成

さて、「リクエスト情報」をProjectが受け取って、どのApplicationに渡すかまでの設定が終わりました。次は、Application内でのUrlの処理になります。新しく作成したstart というApplication内には、urls.pyがないため、まずはこれを作成します。

from django.urls import path
from . import views

app_name = 'start'
urlpatterns = [
    path('', views.index, name='start_django'),
]

最後のpath(”, views.index, name=’start_django’)の部分は、
URLに、何も記載されていない場合は、views.pyのindexを呼ぶ
という意味になります。 これは次のような書式になっています。

path( URLのパターン , 呼び出すView , 名前 )

Viewsを作成

最後にViewsを作ります。 上記のurls.pyで呼び出されているIndexView の部分です。startというフォルダの中のviews.pyを編集していきます。

from django.http import HttpResponse    # 追記
from django.shortcuts import render

def index(request):                         # 追記
    return HttpResponse("Hello, Djnago!!")   # 追記

ここでは、indexというメソッドを定義し、”Hello, Django!!”という文字列をレスポンスデータとして返しています。

from django.http import HttpResponse の部分で、文字列などの情報をResponseデータ形式にしてくれています。

スポンサーリンク

まとめ

さて、これで新規で作成したApplicationに関する設定がひとまず終わりました。最後に、Applicatioの起動を確認して終わりにしましょう。
サーバーを立ち上げて、https://127.0.0.1:8000/start/ にアクセスして、「Hello Django」と表示されたら成功です。

コメント

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