【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

公開日時:2017年11月03日 / 最終更新日時:2019年02月11日

今回は、「さくらVPS」で Python の仮想環境を作り、その中で Django をインストールし初期設定をする手順について説明します。

 

Webアプリを作る場合はレンタルサーバーより「VPS」の方が自由度が高いのでお勧めです。

ちなみに、「さくらのVPS」は価格が安くてスペックがいいです。

月額:685円~、ディスク:SSD 20GB、CPU:1個、メモリ:512MB

 

 

[test@SAKURA_VPS ~]$ cat /proc/cpuinfo | grep processor
processor       : 0
[test@SAKURA_VPS ~]$ cat /proc/meminfo | grep MemTotal
MemTotal:         500208 kB

 

 

以下、今までの作業です。

 

【さくらVPS】【Python】Django で Web アプリを作る【Part.1】

 

【さくらVPS】【Python】Django で Web アプリを作る(Let's Encrypt SSL証明書設定)【Part.2】

 

【さくらVPS】【Python】Django で Web アプリを作る(Djangoインストール&設定)【Part.3】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.4】

 

 

 

Pythonの仮想環境

Pythonの仮想環境を作成するパッケージですが以下のように多数の環境があり迷います。

 

 

 

 

venvで仮想環境を作る

testアカウントのホームディレクトリで venv で仮想環境を作ります。

python3.6 コマンドで、ホームディレクトリ(/home/test)に「pyenv」ディレクトリ配下に仮想環境を作ります。

[test@SAKURA_VPS ~]$ pwd
/home/test

[test@SAKURA_VPS ~]$ python3.6 -m venv pyenv

 

 

仮想環境に切り替えます。(仮想環境の有効化)

[test@SAKURA_VPS ~]$ cd pyenv/
[test@SAKURA_VPS pyenv]$ ls
bin  include  lib  lib64  pyvenv.cfg
[test@SAKURA_VPS pyenv]$ source ./bin/activate
(pyenv) [test@SAKURA_VPS pyenv]$ ← 仮想環境になりました。

 

 

仮想環境を終了します。

(pyenv) [test@SAKURA_VPS pyenv]$ deactivate
[test@SAKURA_VPS pyenv]$

 

 

仮想環境に「Django」をインストールする

仮想環境に Django をインストールします。

[test@SAKURA_VPS ~]$ source ~/pyenv/bin/activate
(pyenv) [test@SAKURA_VPS ~]$ pip
pip     pip2    pip2.7  pip3    pip3.5  pip3.6
(pyenv) [test@SAKURA_VPS ~]$ python3 -V 
Python 3.6.3 ← デフォルトでは「3.6.3」になっています。
(pyenv) [test@SAKURA_VPS ~]$ pip3.6 freeze ← インストール確認。まだ何もインストールされていません。
(pyenv) [test@SAKURA_VPS ~]$

(pyenv) [test@SAKURA_VPS ~]$ pip3.6 install Django ← Django をインストールします。
Collecting Django
  Downloading Django-1.11.7-py2.py3-none-any.whl (6.9MB)
    100% |????????????????????????????????| 7.0MB 176kB/s
Collecting pytz (from Django)
  Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
    100% |????????????????????????????????| 512kB 2.1MB/s
Installing collected packages: pytz, Django
Successfully installed Django-1.11.7 pytz-2017.3
(pyenv) [test@SAKURA_VPS ~]$ pip freeze ← インストール確認。Djangoとpytzがインストールされています。
Django==1.11.7
pytz==2017.3
(pyenv) [test@SAKURA_VPS ~]$ pip3.6 freeze
Django==1.11.7
pytz==2017.3
(pyenv) [test@SAKURA_VPS ~]$ python -V ← デフォルトは最新の「3.6.3」になっています。
Python 3.6.3
(pyenv) [test@SAKURA_VPS ~]$ python3 -V ← デフォルトは最新の「3.6.3」になっています。
Python 3.6.3
(pyenv) [test@SAKURA_VPS ~]$

 

 

 

仮想環境で Django のプロジェクトを作成する

仮想環境で Django のプロジェクトを作成する場合は、仮想環境用のディレクトリに移動してから作成します。

(pyenv) [test@SAKURA_VPS pyenv]$ django-admin startproject site01 ← 「site01」というプロジェクトを作成します。
(pyenv) [test@SAKURA_VPS pyenv]$ ls
bin  include  lib  lib64  pip-selfcheck.json  pyvenv.cfg  site01 ← site01 というディレクトリが作成されています。
(pyenv) [test@SAKURA_VPS pyenv]$ cd site01/
(pyenv) [test@SAKURA_VPS site01]$ ls
manage.py  site01
(pyenv) [test@SAKURA_VPS site01]$ python manage.py runserver ← Django サーバーを起動します。
Performing system checks...

System check identified no issues (0 silenced).

You have 13 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.

November 03, 2017 - 02:48:49
Django version 1.11.7, using settings 'site01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[03/Nov/2017 02:49:52] "GET / HTTP/1.1" 200 1716

 

動作確認

さくらVPSのコンソールにログインして、「http://127.0.0.1」にアクセスをします。

以下のように「It worked!」が表示されればうまく設定されています。

 

終了する場合

Django サーバーを終了するには、「Cntrol」+「C」を押下して終了させます。

[03/Nov/2017 02:49:52] "GET / HTTP/1.1" 200 1716
^C(pyenv) [test@SAKURA_VPS site01]$ ← 「Cntrol」+「C」を押下します。
(pyenv) [test@SAKURA_VPS site01]$

 

 

ブラウザを更新すると、以下のように表示されなくなります。

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

 

仮想環境で「Hello World!」を表示するWebアプリを作る

続けてブラウザ上に「Hello World!」と表示させる Web アプリを作成します。

 

helloworld アプリの作成

helloworld アプリを作成します。

[test@SAKURA_VPS site01]$ pwd
/home/test/pyenv/site01

(pyenv) [test@SAKURA_VPS site01]$ python manage.py startapp helloworld ← 「helloworld」という名前のアプリケーションを作成します。

 

 

views.py の編集

「/home/test/pyenv/site01/helloworld/views.py」を編集します。

(pyenv) [test@SAKURA_VPS helloworld]$ vi views.py
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World!')

 

 

urls.py の新規作成

「/home/test/pyenv/site01/helloworld/urls.py」を新規作成します。

(pyenv) [test@SAKURA_VPS helloworld]$ vi urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

 

 

urls.pyの編集

「/home/test/pyenv/site01/site01/urls.py」を編集します。

(pyenv) [test@SAKURA_VPS helloworld]$ cd ..
(pyenv) [test@SAKURA_VPS site01]$ ls
db.sqlite3  helloworld  manage.py  site01
(pyenv) [test@SAKURA_VPS site01]$ cd site01/

(pyenv) [test@SAKURA_VPS site01]$ pwd
/home/test/pyenv/site01/site01
(pyenv) [test@SAKURA_VPS site01]$ vi urls.py
"""site01 URL Configuration

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^helloworld/', include('helloworld.urls')),
]

 

 

 

Django 開発サーバーを起動する

Django 開発サーバーを起動します。

(pyenv) [test@SAKURA_VPS site01]$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 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.

November 03, 2017 - 03:21:35
Django version 1.11.7, using settings 'site01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 

 

 

動作確認

コンソールから「http://127.0.0.1:8000/helloworld」にアクセスをします。

以下のように「Hello World!」の文字が表示されれば成功です。

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

 

試しに「http://127.0.0.1:8000」にアクセスをしてみます。

以下のように「Page not found (404)」が表示されます。

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

 

 

 

「Page not found (404)」が表示される理由は、「http://127.0.0.1:8000」にアクセスをした場合の指示がないからです。

再度「/home/test/pyenv/site01/site01/urls.py」を確認します。

(pyenv) [test@SAKURA_VPS site01]$ pwd
/home/test/pyenv/site01/site01
(pyenv) [test@SAKURA_VPS site01]$ cat urls.py
"""site01 URL Configuration

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

urlpatterns = [  ← この「urlpatterns」に「http://127.0.0.1:8000」にアクセスをした場合の処理がありません。
    url(r'^admin/', admin.site.urls),
    url(r'^helloworld/', include('helloworld.urls')),
]
(pyenv) [test@SAKURA_VPS site01]$

 

 

 

以下のように「http://127.0.0.1:8000」にアクセスした場合にも「Hello World!」が表示されるように修正します。

(pyenv) [test@SAKURA_VPS site01]$ vi urls.py
"""site01 URL Configuration

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^helloworld/', include('helloworld.urls')),
    url(r'^', include('helloworld.urls')),
]

 

 

動作確認

再度動作確認をします。

(pyenv) [test@SAKURA_VPS site01]$ cd ..
(pyenv) [test@SAKURA_VPS site01]$ ls
db.sqlite3  helloworld  manage.py  site01
(pyenv) [test@SAKURA_VPS site01]$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 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.

November 03, 2017 - 05:11:47
Django version 1.11.7, using settings 'site01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 

 

今後は「http://127.0.0.1:8000」へのアクセスでも「Hello World!」が表示されました。

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

参考文献

今回構築したDjango環境の参考文献です。

Amazonの「Kindle Unlimited」で購入しました。

1日で理解するDjango超基礎入門

 

 

過去の記事

【さくらVPS】【Python】Django で Web アプリを作る【Part.1】

 

【さくらVPS】【Python】Django で Web アプリを作る(Let's Encrypt SSL証明書設定)【Part.2】

 

【さくらVPS】【Python】Django で Web アプリを作る(Djangoインストール&設定)【Part.3】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.4】

 

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Secured By miniOrange