仕事でPython使うことになったので、0から勉強してみた(Django 入門編)

はじめに

前回はPythonモジュールを実行して Hello World を表示するところまでやりました。

今回はWebフレームワークの Django について書きたいと思います。ちなみに読み方は「ジャンゴ」です。「ディージャンゴ」ではないので要注意。

Djangoといえば有名な書籍はあのギターを弾いたおじさんの表紙ですが、ちょっと古いし、お値段が高いしということで迷ってたら、チームのメンバーが持っているとのことだったのでお借りしました。
しかし、これまたちょっと求めている内容とは違ったので、今回も 公式チュートリアル に沿って進めていこうと思います。

Djangoを使うにはWindowsの場合インストーラーを使ったり、MacやLinuxの場合”pipコマンド”を使ってインストールするのですが、そういった環境構築作業というのは誰しも好きではないと思いますので、今回は最近発見した超画期的なブラウザエディタ”Cloud9”を使ってチュートリアルを進めていきたいと思います。

※ちなみに”pip”とは、Rubyでいうところの”gem”、Node.jsでいうところの”npm”、PHPでいうところの”composer”にあたるものです。
”Cloud9”については次回少し詳しく書こうと思います。

ではさっそく、Cloud9にログインしましょう。

https://c9.io/

Cloud9ログイン画面

アカウントを持っていなくてもGithubのアカウントさえあれば右上のアイコンをクリックして、すぐに利用することができます。

まずは、Create a new workspaceをクリックします。
下記のような画面が表示されたらワークスペースの名前をつけます。なんでも良いと思いますがわかりやすい方が良いのでdjango-tutorialとします。

Cloud9ワークスペース作成画面

テンプレートの数に驚くと同時に色々と試してみたくなりますが、ここでは”Django”を選択して、”Create workspace”をクリックします。直感で使えるのが良いですね。

そしてアスキーアートで表示される”Cloud9 IDE”と全体的に黒いシックな感じが今風でかっこいいです。

既に左ペインにはワークスペース名に指定した”django-tutorial”というディレクトリが作成されています。この部分がエクスプローラー部分です。

そして中央部分は”Readme.md”となっているので、Githubのようにmd形式のファイルはHTMLで表示してくれるようですね。
左ペインの適当なファイルをクリックすると編集モードになったので、ここがエディタにあたる部分のようです。

最後に下ペイン。ここは”$”マークがついているということは”コンソール”ですね。
試しに”pwd”コマンドを打ってみましょう。

syoppylife:~/workspace (master) $ pwd
/home/ubuntu/workspace

OSはubuntuのようです。

だいたいの雰囲気を掴めたら、中央部分のReadMe.mdを読み進めていきましょう。

Starting from the Terminal

と書いてあります。
migrateコマンドでは、Djangoが使うユーザーやDBの作成など諸々やってくれるみたいです。
そのまま書いてある通りのコマンドを実行します。

続いてサーバー起動。

コンソールに下記のコマンドを打ち込むとこのようなポップアップがコンソール右上に表示されるのでクリックしてみましょう。

$ python manage.py runserver $IP:$PORT

Cloud9サーバー起動ポップアップ

ブラウザ上でアクセスが確認できました。

さらに先を読み進めていくと、

Support & Documentation

と書いてあり、Djangoのチュートリアルへ案内されます。

さて、それではチュートリアルに沿って投票 (poll) アプリケーションの作成を行ってみましょう。
基本的にはチュートリアルに沿って行けば問題ありませんが、1点注意が必要なのはCloud9でDjangoのテンプレートを選択した場合、Creating a projectが不要ということです。

僕は普通に


$ django-admin startproject mysite

を実行してしまい1時間くらいハマってしまいました・・・。
おそらくテンプレートを選択した場合内部ではこのコマンドをワークスペース名をサイト名として実行しているのでしょう。
なので、この”mysite”の部分は”django-tutorial”となります。

構成はこの通り

django_tutorial/
jango_tutorial/
__init__.py
settings.py
urls.py
wsgi.py
ex50
db.sqlite3
manage.py
README.md

自動生成されたファイルについては

These files are:

に書いてあります。
続くサーバーの起動方法については、Cloud9の場合前述の通り既に起動してブラウザ上でアクセス済みなので、さらっと目を通す程度で良いと思います。

ここまで読んでやっとアプリケーションの作成に入ります。
コマンドは


$ python manage.py startapp polls

です。

ここで少しCloud9の話に戻りますが、チュートリアルの通りに進めると、コンソールでrunserverコマンドを実行しているはずなので、この後のコマンド入力を受け付けない状態になっていると思います。

その場合は、キーボード上で”Alt + T”を押すことで新しいターミナルを起動することができます。(タブの”+”ボタンをクリックして、”New Terminal”を押しても同じことができます。)

先ほどはstartprojectでしたが、次はstartappですね。違いについてもチュートリアルに書いてあります。
実行すると、”polls”というディレクトリが作成され、中にたくさんファイルが生成されていますね。
比較的最近のフレームワークはこういった自動生成の機能が備わってるので利用するだけなら簡単そうですね。

次はViewの中身を書いていきましょう。

自動生成されたpolls/views.pyをダブルクリックすると中央のエディタ部分に表示されるので既にImportされている”render”の次の行で”HttpResponse”をImportします。

更に”# Create your views here.”の下に以下を入力して保存(Ctrl+S)します。

from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

たったこれだけです。

後の方でテンプレートエンジンを使った方法とかが出てくるのでしょうけど、この段階ではとりあえずHttpResponseにメッセージを返すだけのようです。

※ちなみにPythonではjavaのような”{}”やExcelVBAのような”End”は存在しません。

と次の行のインデントでブロックを表しているようです。

次はurls.pyの作成です。(・・・このファイルは自動生成してくれないんですね。)

チュートリアルにある通りに”polls”ディレクトリ直下に”urls.py”を作成します。

from django.conf.urls import url

from . import views

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

このファイルがディスパッチャーのようですね。

”import views”により同じ階層の”vies.py”の情報を読み込み、”urlpatterns”の正規表現にマッチした場合に先程の”index(request)”の処理を行うように指定しているようです。

ただし、この書き方はPolls配下のURLの設計を行うファイルなので、プロジェクト全体のURL設計を行うにはdjango_tutorial/django_tutorial/urls.pyを修正する必要があります。

【自動生成された状態】

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

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

【編集後】

from django.conf.urls import include, url
from django.contrib import admin

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

これは/polls/でアクセスされた場合はpolls/urls.pyの設定を読み込むという意味でしょう。その為に”include”をImportするんですね。

それでは先ほどのURLの末尾に”/polls/”を追加してブラウザからアクセスしてみます。

Djangoチュートリアル1画面

ちゃんと”Hello, world”と表示されました!!

urls.pyの正規表現についてですが、正規表現文字列の前にrと記述しています。これは”raw” 文字列の省略で、文字列をエスケープすべきではないこと(生の文字列)を示すそうです。
オプションなのでなくても問題ないそうですが、推奨されているので付けましょう。

URLディスパッチャーについてはこちらに詳しく書かれていました。

Importの書き方については、前回も触れた”PEP8”によるとパッケージが異なる場合は違う行に記載するのがマナーらしいです。
ただし、同じパッケージ内のImportの場合カンマ区切りで記載しても良いそうです。

ここまでで、チュートリアルの第一回が完了となります。
まだMVCフレームワークのCの部分しかできてませんが、続きは次回以降にしたいと思います。

今回は”Cloud9”を使うことで、Djangoを使ったHello Worldもあっと言う間にできてしまいました。
とはいえフレームワークの機能を全然使えていないので、もう少しチュートリアルを進めたいと思います。

次回は少し話を変えて、継続的に学んでいる”Python”を使って、流行りの”slack”のこれまた流行りの”Bot”を作って動かしてみたいと思います!!

おわりに

さて、今回も最後に読んだ本について紹介しようと思います。

今回は1冊です。冒頭では古いと言いましたが、フレームワークの設計思想は大きく変わっていないので、十分だと思います。
ただし、分厚いので読むのも持ち運ぶのも大変です。。

僕がフレームワークを作れるほどの技術力を手に入れたら大好きな”L’Arc~en~Ciel”にちなんで、”anCiel” しようかな。”Ansible”と読み方似てるなとかどうでも良いことを考えていたら読み切るまでにだいぶ時間がかかってしまいました。

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>