ちょっと、PythonでWebアプリケーションを書いてみようと思いまして。
Djangoというのが割とメジャーなようなので、少し試してみたいと思います。
Django?
Pythonで書かれた、フルスタックなWebアプリケーションフレームワークだそうです。
The Web framework for perfectionists with deadlines | Django
現在のバージョンは、2.2です。
Djangoとは?ということで、Overview。
- 早く作れる
- 多くの機能がある
- セキュア
- スケーラブル
- 広い用途に使える
というようなことが謳われています。
ドキュメントは、こちら。
Django documentation | Django documentation | Django
日本語訳も行われているようです(一部、英語のままのものもあったりしますが)。
Django ドキュメント | Django ドキュメント | Django
とりあえず、簡単にGetting Started的な感じでやってみましょう。
今回はデータベースも使わず、リクエストを受け付けて、単純なテンプレートから返すだけのアプリケーションを作成してみたいと
思います。
環境
今回の環境は、こちら。
$ python3 -V Python 3.6.7
インストールとプロジェクトの構築
まずは、Djangoをインストールします。
$ pip3 install Django
インストールされたバージョン。
Django==2.2
こちらに沿って、進めていってみましょう。
はじめての Django アプリ作成、その 1 | Django ドキュメント | Django
Djangoのモジュールが認識されていることを、確認してみます。
$ python3 -m django --version 2.2
プロジェクトとアプリケーションを作成します。今回は、それぞれ「mysite」と「myapp」としました。
$ django-admin startproject mysite $ cd mysite $ django-admin startapp myapp
アプリケーションを作成したら、プロジェクトのsettings.pyの「INSTALLED_APPS」に追加します。
mysite/settings.py
INSTALLED_APPS = [ 'myapp.apps.MyappConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
また、プロジェクトのurls.pyに、アプリケーションのurlsをincludeします。ここでincludeしているurls.pyは、後ほど作成します。 mysite/urls.py
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('myapp/', include('myapp.urls')), path('admin/', admin.site.urls), ]
アプリケーションの中身を作る
それでは、アプリケーションの中身を書いていきます。ここでの内容は、チュートリアルの以下の2ページを見て作成しました。
はじめての Django アプリ作成、その 1 | Django ドキュメント | Django
はじめての Django アプリ作成、その 3 | Django ドキュメント | Django
最初に、リクエストを受け取るViewを作成します。
myapp/views.py
from django.shortcuts import render from django.template import loader # Create your views here. def books(request): context = { "books": [ { "isbn": "978-4873117386", "title": "入門 Python 3", "price": 3996, }, { "isbn": "978-4797389463", "title": "みんなのPython 第4版", "price": 2916, }, { "isbn": "978-4800711670", "title": "詳細! Python 3 入門ノート", "price": 2894, } ] } return render(request, "myapp/books.html", context)
書籍のデータをテンプレートに渡すようにしましょう。
テンプレートは、こんな感じで簡単に。
myapp/templates/myapp/books.html
<h1>書籍一覧</h1> <ul> {% for book in books %} <li>{{ book.isbn }}: {{ book.title }} {{ book.price }}</li> {% endfor %} </ul>
テンプレートの書き方は、こちらを。Djangoのテンプレートらしいです。
The Django Template Language | Django ドキュメント | Django
forなどは、タグとして利用しているそうです。
Djangoのテンプレート以外にも、Jinja2を使うこともできるそうな。
テンプレート | Django ドキュメント | Django
あとは、このアプリケーションで使えるURLを定義します。mysite側でincludeしていたのは、この内容になります。
myapp/urls.py
from django.urls import path from . import views urlpatterns = [ path('books', views.books, name = 'books'), ]
確認
開発サーバーを起動して確認してみましょう。
$ python3 manage.py runserver
確認。
$ curl localhost:8000/myapp/books <h1>書籍一覧</h1> <ul> <li>978-4873117386: 入門 Python 3 3996</li> <li>978-4797389463: みんなのPython 第4版 2916</li> <li>978-4800711670: 詳細! Python 3 入門ノート 2894</li> </ul>
動きました!
けっこう手こずったのですが、とりあえず目標到達。
ハマったこと。