数学やプログラミングや映画など

新米SEがwebと数学と映画についてつらつら書きたいブログです。

【CentOS7】 django で hello world をする話

CentOS7 上の pythonフレームワーク djangohello world をした話です。

環境

django プロジェクトを作成する

django-admin startproject ${プロジェクト名} というコマンドでプロジェクトを作成します。今回は mysite というプロジェクトを作成します。

$ mkdir sample
$ cd sample/
$ django-admin startproject mysite
$ tree mysite
mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

次にホスト名の許可の設定をします。
Django では セキュリティ上の理由で設定したホスト名以外でのアクセスが出来ないようになっています。
そこで mysite/settings.py の ALLOWED_HOSTS を編集します。
今回はテストで作成するものなので '*' を設定し、全てのホスト名でのアクセスが出来るようにします。

$ vim mysite/settings.py
$ grep 'ALLOWED_HOSTS' mysite/settings.py
ALLOWED_HOSTS = ['*']

サーバを起動する

プロジェクトディレクトリの manage.py に runserver ${IPアドレス}:${ポート} という引数を持たせて実行します。
${IPアドレス} は許可するアクセス元IPであり、全てのIPアドレスからのアクセスを許可する場合は 0 か 0.0.0.0 を指定します。

$ python3.6 manage.py runserver 0:8000
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 29, 2018 - 04:56:50
Django version 2.1.dev20180127235140, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Web ブラウザから http://${IPアドレス}:8000 にアクセスしたところ、django が応答することを確認できました。

f:id:nknshmsk:20180202131506p:plain

アプリケーションを作る

アプリケーションを作成するには プロジェクトディレクトリの manage.py に startapp ${アプリ名} という引数を持たせて実行します。

django でアプリケーションは、何らかの処理を行うWebアプリケーションを指します。
プロジェクト一つに対してアプリケーションは複数設置することができ、また一つのアプリケーションは複数のプロジェクトで使用することができます。

今回は hello world の文字列を返すようなアプリケーション hello を作成します。

$ python3.6 manage.py startapp hello
$ tree hello
hello
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

アプリケーションが作成できたので、hello ディレクトリ の view.py を編集してビューを書いていきます。
今回は HTTP によるアクセスが来たら hello, world! という文字列を返すようにします。

$ vim hello/views.py
$ cat hello/views.py
from django.shortcuts import render

from django.http import HttpResponse

def index(request):
  return HttpResponse("Hello, world!")

ビューが出来たので、URL との関連付け(ルーティング)をします。
hello ディレクトリに urls.py というファイルを作り、ルーティングを書いていきます。
今回はドキュメントルートへアクセスが来たら先ほどビューに書いた index を呼び出します。

$ vim hello/urls.py
$ cat hello/urls.py
from django.urls import path

from . import views

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

最後にプロジェクトディレクトリ(mysite)の urls.py にルーティングを書き、hello アプリケーションのルートを決めます。
今回は hello/ をルートとし、そこへアクセスが来た場合は hello アプリケーションのルーティングに従うように書きます。

$ vim mysite/urls.py
$ cat mysite/urls.py
"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/dev/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('hello.urls')),
]

ここまでで準備が整ったので、django を起動します。

$ python3.6 manage.py runserver 0:0
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 31, 2018 - 04:10:15
Django version 2.1.dev20180127235140, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ブラウザから http://${IPアドレス}:8000/hello にアクセスしたところ、hello アプリケーションが正しく応答することが確認できました。

f:id:nknshmsk:20180202131530p:plain

おわりに

djangohello world をしました。

python 学習は以下の書籍がオススメです。
体系的に勉強するならまず買っておいて損は無いでしょう。
私は大分慣れた今でもバイブル代わりに使ってます。

django については英語の書籍ですが以下がオススメです。
内容が充実しているので一冊持っておくと役に立ちます。