プログラミング | オジサンテクノロジー

Django入門

掲載日:2019/07/21

概要

Pythonで実現できるWebサーバーの一例として、Djangoの導入方法を紹介します。
詳細は下記の公式サイトにありますが、詳細すぎて「とりあえずやってみたい!」に対するハードルを下げるために、 必要最低限の内容のみをまとめてみました。

公式サイトはこちら(日本語です): https://docs.djangoproject.com/ja/2.2/

1. プロジェクトの作成

初めに、Djangoのプロジェクトを作成します。
任意の作業ディレクトリに移動してから下記のコマンドをコマンドプロンプトで実行してください。
*以下、任意の名称であることを明確にするため、プロジェクト名は日本語で「プロジェクト名」と記載します。
django-admin startproject プロジェクト名
ここで作成したプロジェクト内にアプリケーションを作成していきます。

2. アプリケーションの作成

ここでいうアプリケーションとは、コメント投稿フォームやデータベース参照などの各々のWebアプリケーションを示します。
プロジェクト作成を行ったのと同じ作業ディレクトリに移動してから下記のコマンドをコマンドプロンプトで実行することで同ディレクトリ内にアプリケーションが作成されます。
*以下、任意の名称であることを明確にするため、アプリケーション名は日本語で「アプリケーション名」と記載します。
python manage.py startapp アプリケーション名

2-1. アプリケーションの追加

アプリケーションの作成が終わったら、プロジェクト名のディレクトリ内にあるsettings.pyにアプリケーションを追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
アプリケーション名,
]

2-2. その他準備

また、htmlファイル(テンプレート)やcssなどのファイルを置くためのディレクトリを作成します。
作成したアプリケーション名のディレクトリ内に、"templates"というディレクトリを作成し、その中にアプリケーション名のディレクトリを作成します。
ここにhtmlファイルを置きます。
一方、作成したアプリケーション名のディレクトリ内に、"static"というディレクトリを作成し、その中にアプリケーション名のディレクトリを作成します。
ここにcssファイルや画像ファイルなどを置きます。

2-3. ディレクトリ構成

ちょっと複雑になってきたので、ここまでのディレクトリ構造を下記に示します。
作業ディレクトリ/
プロジェクト名/
settings.py
urls.py 等
アプリケーション名/
templates/
  アプリケーション名/
    #htmlファイルはここに置く
static/
  アプリケーション名/
    #cssファイルや画像ファイルはここに置く
views.py 等
manage.py 等

3. 内容の表記

各アプリケーションで表示する内容はviews.pyに記載します。
views.pyは作成したアプリケーション名のディレクトリ内にあります。
開くと、すでに下記が記入された状態になっています。
from django.shortcuts import render
# Create your views here.
ここに表示する内容を書いていきます。

3-1. import文のソースコード

まずはimport文の一例です。
from django.shortcuts import render
from django.http import HttpResponse
from .forms import HomeAppForm
from django.http import HttpResponse
はWebブラウザなどにデータを送り返すための処理を行う
django.httpモジュールからHttpResponseクラスを読み込みます。

from .forms import HomeAppForm
はフォームを使用する場合に必要となります。

3-2. import文以外のソースコード

次にimport文以外のソースコードの一例です。
様々な方法で、クライアントの要求(request)に対してsTextを送り返して、 クライアントのWebブラウザにsText表示させる方法を紹介します。

初めに、直接Pythonコード内に記載した内容(sText)を表示する例です。
HttpResponseを使うことで実現できます。
引数はstr型で渡します。
def index(request):
return HttpResponse(sText)

render関数を使うことで、所望のテンプレートへのアクセスが可能です。
引数は辞書型で渡します。渡した引数はテンプレート内で{{ 引数 }}と記載します。
#テンプレートを使用して表示
def index(request):
return render(request, "アプリケーション名/page1.html",{'sText': sText})

#クエリで指定したページを表示
#アドレスの後ろに?を付けた後、=でつなげたkeyとvalueで記載します。(例 ?sPage=page1)
def query_index(request):
if 'sPage' in request.GET: #記載したクエリはGETで取り出し
    sPage = request.GET['sPage']
    return render(request, "アプリケーション名/" + sPage + ".html", {'sText': sText})
else: #指定のクエリがない場合の処理
    return render(request, "アプリケーション名/Error.html")

#urlで指定したページを表示
#通常のアドレスと同様に、homeのアドレスの後ろに/を付けた後にkeyを記載します。(例 /page1)
#記載したクエリはGETで取り出して使用します。
def url_index(request,sPage):
return render(request, "アプリケーション名/" + sPage + ".html", {'sText': sText})

4. urlの管理

render関数を使う場合、URLをurls.pyに記載する必要があります。
urls.pyは作成したプロジェクト名のディレクトリ内にあります。
開くと、下記が記入された状態になっています。
(コメント文は除いています。)
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
path('admin/', admin.site.urls),
]
この中のurlpatternsにアクセスするアドレスと呼び出す処理をpathで追加します。
pathの内容は下記の通りです。
path(アクセスするアドレス,呼び出す処理,name)
突然出てきたnameですが、ここで指定した変数は{% url '変数' %}でアクセス可能となるので便利です。

また、pathを追加するurls.pyは、プロジェクト名のディレクトリ内のurls.pyに記載しても良いですが、 各アプリケーション名のディレクトリ内にurls.pyを作成し、そこに記載する方法もあります。
アプリケーションの数が多くなる場合を考慮すると、後者の方法をおすすめします。

プロジェクト名のディレクトリ内のurls.pyに記載する場合は、import文として下記を追加します。
import プロジェクト名.views as projv #projvは任意名です。
また、urlpatterns内に下記を追加します。
path('任意アドレス',アプリケーション名.index)


アプリケーション名のディレクトリ内にurls.pyを作成する場合は、import文として下記を追加します。
from . import views

また、この場合、プロジェクト名のディレクトリ内にurls.pyのurlpatternsに下記を記載します。
path('任意アドレス', include("アプリケーション名.urls"))
pathの具体例については、以下にrenderを使って記載した3パターンについて、それぞれ記載例を示します。

4-1. 普通にreaderを使用

def index(request):
return render(request, "アプリケーション名/page1.html",{'sText': sText})
追加するpath
path('', views.index, name="index1")

4-2. クエリを使う場合

def query_index(request):
if 'sPage' in request.GET: #記載したクエリはGETで取り出し
  sPage = request.GET['sPage']
  return render(request, "アプリケーション名/" + sPage + ".html", {'sText': sText})
else: #指定のクエリがない場合の処理
  return render(request, "アプリケーション名/Error.html")
追加するpath
path('', views.query_index, name="index2")

4-3. urlで指定する場合

def url_index(request,sPage):
return render(request, "アプリケーション名/" + sPage + ".html", {'sText': sText})
追加するpath
#<>で囲むとrequestで値の取得が可能です。
path('<sWord>/', views.url_index, name="index3")

5. サーバーの起動

ここまで入力することで、簡単な表示ができるようになるはずです。
作業ディレクトリに移動してから下記のコマンドをコマンドプロンプトで実行してください。
python manage.py runserver
これで、サーバーが起動できました。
localhostの8000にアクセスすると作成したWebサイトを確認できるはずです。
http://localhost:8000/