アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

Windows10 + anaconda + python3.6 で djangoをインストールして動かしてみる

pythonで作ったツールを、ちょこっとWEBで動かして動作確認したいな。

そう思うこともあるので、かんたんに環境を作っておこうかと思いつきました。

 

Djangoのインストール

 

自分の環境は、Windows10 + Anaconda + Python3.6です。 

Anacondaはすでにインストールしているものとしてすすめます。 

まず、Condaを使って、新たな仮想環境を作ります。

conda create -n django python=3.6

 

できたら、「activate django」で Django環境をアクティブにして、以下のコマンドでインストールします。

conda install django

 

プロジェクトを作って、サーバーを動かす

 

Djangoは、プロジェクトとして最低限動作確認可能なファイルとフォルダ構造を生成してくれるツールがついてます。 

Windowsの場合は、django-admin.exe がそうです。 

Djangoの記事は、Linuxでされてる場合が多いので、実行例が「django-admin.py」と書かれている場合がありますが、このやり方だとWIndowsでは動かないのでご注意を。 

django-admin.exe で初期プロジェクトを生成すると、フォルダやファイルをいくつか自動生成します。 

それらと他のファイルと混在させると面倒なので、Django専用のworkフォルダを作って、そこをカレントにするのがよさそうです。 

プロジェクトの名前は何でもいいですが、今回は「hello」とでもしときます。 

startprojectオプションのあとに、プロジェクト名をつけて実行します。

django-admin startproject hello

 

実行が終了すると、helloフォルダの下にさらにhelloフォルダとソースが1個できます。 

まず、プロジェクト名「hello」のフォルダができます。 

その下に、hello フォルダと、manage.py の2つがあります。

f:id:arakan_no_boku:20180126202216j:plain

 

さらにその「help/help」の下にファイルがあります。 

f:id:arakan_no_boku:20180126213747j:plain

 

生成されたmanage.pyがWEBサーバーになるみたいです。 

helloの下だから hello/manage.py  ですね。

python hello/manage.py runserver

 

こうすると、サーバーが動きます。

f:id:arakan_no_boku:20180126214148j:plain

 

デフォルトでは 8000ポートで動きます。

http://localhost:8000/

 

アクセスすると、こんな感じの画面・・まあ、インストールはOKですね。

f:id:arakan_no_boku:20180126214457j:plain

 

お決まりのHello worldをHTMLで表示してみる

 

まず、settings.py を開いて、以下の記述の部分を探します。 

一番下の方です。 

言語とタイムゾーンは、とりあえず日本にしときます。

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

 

それで、今度はHTMLファイルの置き場所を定義します。

TEMPLATES = [
{
     'BACKEND': 'django.template.backends.django.DjangoTemplates',
     'DIRS': ,
     'APP_DIRS': True,
     'OPTIONS': {
          'context_processors': [
               'django.template.context_processors.debug',
               'django.template.context_processors.request',
               'django.contrib.auth.context_processors.auth',
               'django.contrib.messages.context_processors.messages',
           ],
       },
    },
]

 

 

 この'DIRS': のところに、HTMLファイルを置くフォルダ名を書きます。

'DIRS': [
      os.path.join(BASE_DIR, 'view'),
],

 

templatesとするのが一般的っぽいですが、今回はSpringBootで慣れてる名前で、Viewにとりあえずしてみます。 

それで、一番上のhelloの直下に上記にあわせて「view」フォルダを作ります。

f:id:arakan_no_boku:20180126220308j:plain

 このhello\view フォルダに、HTMLファイルを作っておきます。

 <html>
<head>
</head>
<body>
       <h1>Hello World!!</h1>
</body>
</html>

 

今度は、hello\hello\views.py を作ります。

from django.http.response import HttpResponse
from django.shortcuts import render

def hello_world(request):
    return render(request, 'hello_world.html')

 

今度は、hello\hello\ urls.py  を開きます。

 

さっき、定義したviews.pyをインストールして、URLパターンにViews.pyで定義したメソッドの名前を渡します。

from django.conf.urls import url
from django.contrib import admin
from . import views

urlpatterns = [ 
    url(r'^admin/', admin.site.urls),
    url(r'^hello/', views.hello_world,name='hello_world'),
]

 

赤色にしている部分が書き足したところです。 

上記で、「 r'^hello/」とすると「http://localhost:8000/hello/」のURLで、viewフォルダの下の「hello_world.html」にアクセスします。 

さて、やってみます。

f:id:arakan_no_boku:20180126224250j:plain

いけました。

 

せっかくなので、Djangoテンプレート言語も使ってみる

 

Djangoのテンプレート言語は、Dict型で定義して、HTML内でkeyの名前を{{}}で囲って呼び出してやればいいらしいです。 

ということでviews.pyを以下のように変更してみます。

from django.http.response import HttpResponse
from django.shortcuts import render
from datetime import datetime as dt


def hello_world(request):
    d = {
         'date':dt.now().strftime('%Y/%m/%d')
    }
    return render(request, 'hello_world.html',d)

 

文字列のキーでDictを定義して、dict型の名前をrenderの引数に追加するわけです。 

そして、定義した'date'をHTML内で{{ と }} に囲って書く。

<html>
<head>
</head>
<body>
     <h1>Hello World!!</h1>
     <p>日付は{{date}}だよ!
</body>
</html>

 

日本語を使う場合に、注意するのはファイルの文字コードですね。 

Windows上だと、デフォルトでSJISになっている場合があります。  

UTF8にしておかないと、SJISからUTF8に変換できない文字があると、処理がおちてしまいます。 

動かすと。

f:id:arakan_no_boku:20180126230603j:plain

 

ああ、いい感じですね。 

とりあえず、開発とローカルで動かす環境はできました。