#概要
Python"ガチ"初心者がDjangoでWebサーバを構築するまで。
##環境
- Windows10 home
- Anaconda 5.0.1 (Just meでインストール)
- Python 3.6.3 :: Anaconda, Inc.
- Django2.0
##参考
こちらの記事を参考にさせていただきました。
はじめての Django アプリ作成、その 1
#手順
##Djangoのインストール
> pip install Django==2.0
Collecting Django==2.0
Downloading Django-2.0-py3-none-any.whl (7.1MB)
100% |████████████████████████████████| 7.1MB 6.6MB/s
Requirement already satisfied: pytz in c:\users\xxxxx\anaconda3\lib\site-packages (from Django==2.0)
Installing collected packages: Django
Successfully installed Django-2.0
##バージョン確認
Pythonインタプリンタで次のコードを実行します。
>>> import django
>>> print(django.get_version())
2.0
もしくは以下でもOK。
> python -m django --version
2.0
##プロジェクト作成
任意の作業ディレクトリにて以下のコマンドを実行します。
> django-admin startproject mysite
作業ディレクトリ配下にmysiteディレクトリが作成されます。
ディレクトリ構造は以下のようになります。
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
このサーバの設定スクリプトと(まだ作成してませんが)アプリケーション(のスクリプト)をひとまとめにしたものをプロジェクトと呼ぶようです。
こちらから引用するとこのように書いてあります。
プロジェクトとは、あるウェブサイト向けにとアプリケーションを集めたものです。一つのプロジェクトには複数のアプリケーションを入れられ ます。また、一つのアプリケーションは複数のプロジェクトで使えます。
この連載では最上層のmysite(以下、ルートディレクトリ)がc:直下に配置する前提でプロジェクトを作成していきます。
##開発用サーバ起動確認
ルートディレクトリに移動して以下のコマンドを実行します。
> python manage.py runserver
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.
December 29, 2017 - 16:12:09
Django version 2.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[29/Dec/2017 16:12:26] "GET / HTTP/1.1" 200 16559
[29/Dec/2017 16:12:26] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[29/Dec/2017 16:12:26] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 80304
[29/Dec/2017 16:12:26] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 82564
[29/Dec/2017 16:12:26] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 81348
Not Found: /favicon.ico
[29/Dec/2017 16:12:26] "GET /favicon.ico HTTP/1.1" 404 1972
これでサーバが起動されます。起動していれば、http://127.0.0.1:8000/ にブラウザでアクセスすると次のようなページにアクセスできます。なんかかわいい。
サーバのIPアドレスとポートを指定する場合は次のコマンドでサーバを起動します。
> python manage.py runserver IPアドレス:ポート番号
サーバを止めるときはctrl + c
で止めます。
##Hello World!を表示させる
まず、アプリを作成します。ルートディレクトリにて以下のコマンドを実行します。
>python manage.py startapp myapp
するとディレクトリが生成され、下記のような構成になります。
mysite/
manage.py
myapp/
migrations
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
nysite/
__init__.py
settings.py
urls.py
wsgi.py
まずはHello World!を実行するスクリプトを作成します。
myappにあるviews.pyを編集します。
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World!')
index関数はrequestオブジェクトを引数に受け取り、HttpResponseオブジェクトを返す関数です。
次にmysite/setting.pyを編集してmyappアプリケーションを読み込むように設定します。INSTALLED_APPSの中にmyapp
を追加します。
…
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp' #ここを追加
]
…
さらに、mysite/urls.pyを編集して、URLとviewの対応をマッピングします。urlpatternsに(r'^$','myapp.views.index'),
を追加します。
…
from django.contrib import admin
from django.urls import path
from django.conf.urls import url #ここを追加
from .myapp import views #ここを追加
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$',views.index), #ここを追加
]
##HTMLとして表示
テンプレートシステムを介してHTMLの表示を行います。
次のディレクトリとhtmlを作成します。
<html>
<body>
{{message}}
</body>
</html>
Hello Djangoを返すviewを作ります。mysite/myapp/views.pyを次のように編集します。
from django.http import HttpResponse
from django.template import loader, RequestContext
def index(request):
contexts = {
'message':'Hello Django',
}
template = loader.get_template('myapp/index.html')
return HttpResponse(template.render(contexts))
RequestContextオブジェクトを作成し、テンプレートに代入する変数を定義します。そしてloader.get_templateでテンプレートを呼び出し、renderメソッドでテンプレートと変数を結びつけます。
以上で基本的な開発用Webサーバの構築ができました。