"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

Windows10 + anaconda + python3.6 で django2.0をインストールして、動作確認をする

Windows10 + anaconda + python3.6 の環境に django2.0をインストールします。

f:id:arakan_no_boku:20190320212948j:plain

 

Djangoのインストール

 

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

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

conda create -n django python=3.6

仮想環境の名前はなんでもいいですし、もし、すでにtensorflow等を使うために仮想環境が作ってあるなら、そこでもいいです。

とりあえず説明の都合上「django」仮想環境ですすめます。 

できたら、「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

 

サーバーの実行

 

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

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

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

f:id:arakan_no_boku:20180126202216j:plain

 

このmanage.pyでサーバーを動かします。 

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

2019/1/12追記

上記画面は変更になってます。

今はロケットの画像とかが表示されてたりします。

まあ・・エラーでなければOKということで。

 

djangoの各ファイルの修正

 

作成したプロジェクトフォルダには、以下のようなファイルも生成されてます。

今回はhelpプロジェクトなので、「help/help」の下にファイルがあります。 

f:id:arakan_no_boku:20180126213747j:plain

settings.py

 

まず、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にとりあえずしてみます。 

 

 

views.py

 

今度は、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')

 

urls.py

 

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

 

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

from django.contrib import admin
from django.urls import path
from . import views

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

 

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

「'hello/',views.hello,name='hello'」

上記の最初の「hello/」はURLです。

上記の場合http://localhost:8000/hello/」のURLで、viewフォルダの下の「hello.html」にアクセスします。

次の「views.hello」は、views.pyの中のメソッド名です。

「name='hello'」の「hello」は、HTML名(hello.html)を指します。

ここの綴りを間違えると、正しく表示できません。 

 

HTMLの作成

 

最後に、hello.htmlを用意します。 

settigs.pyの「os.path.join(BASE_DIR, 'view'),」の記述にあわせて、一番上のhelloの直下に「view」フォルダを作ります。

f:id:arakan_no_boku:20180126220308j:plain

 このhello\view フォルダに、hello.htmlを作るわけですが、今回は、超手抜きHTMLファイルでいいかな。

 <html>
<head>
</head>
<body>
       <h1>Hello World!!</h1>
</body>
</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

ああ、いい感じですね。 

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

---

Django関連記事

arakan-pgm-ai.hatenablog.com