• ログインログイン
  • 新規登録新規登録

MENU

Google App Engine 上でDjangoを動かしてホームページを作る 第2回

連載Google App Engine 上でDjangoを動かしてホームページを作る

Google App Engine 上でDjangoを動かしてホームページを作る開発レシピです。無料でサーバーを利用できるGoogle App Engineを使い、DjangoというPython言語で書かれた枠組みを用いてホームページを作っていきます。

前回までのプログラミング学習コラムに続き2回目の勉強内容です。

今回は、Djangoについて同じところまでやりたいと思います。前回の最後に今回はGAEの設定をやりたいと書いたのですが、やはり今回はDjangoについての説明をさせていただきます。

まずはDjangoを自分のパソコンにインストールしましょう。方法は二つあります。一つ目はpip install を使う方法、二つ目は、Djangoをダウンロードしてインストールする方法です。

一つめの方法で使うpipはインストールを手軽に行える便利な道具です。デフォルトでは入っていないのでこれからも、新しいものをインストールする際にとても使い勝手がいいので、ぜひ入れておくといいでしょう。

ここのez_setup.pyおよび、get-pip.pyをターミナル上で実行するだけです。pipが入ったら、ターミナル上で

pip install Django==1.5.4

と実行すれば、最新版のDjangoがインストールされます。

二つ目の方がわかりやすいかもしれません。DjangoダウンロードページのDjango-1.5.4.tar.gzをダウンロードして、ダウンロードしたものをクリックして展開します。ダウンロードしたディレクトリでターミナルを開いて

tar xzvf Django-1.5.4.tar.gz
cd Django-1.5.4
sudo python setup.py install

と一行ずつコマンドを実行すればインストール完了です。

では実際にインストールできたのかを確認しましょう。ターミナルでpythonと打つと、インタラクティブシェルが起動されます。(インタラクティブシェルは、コードを書いたファイルを実行するのでなくて、一行ずつコードを書くことができる便利な機能です。)

>>>

と出てくるでしょう。これが、インタラクティブシェルが起動しているよというサインです。次のように二行簡単に打ちましょう

>>> import django
>>> print(django.get_version())

エンターキーを叩いて、

1.5.4

と表示されれば、確かにDjangoの最新版がインストールされたことがわかります(2013/10/13の時点での最新版1.5.4)。

以上で、Django開発環境はできました。次に、あたらしいプロジェクトを立ち上げましょう。適当に作ったディレクトリに移動して、次のコマンドをターミナル上で打ちます。

django-admin.py startproject example

exampleの所は適当に好きな名前を入れれば結構です。さて、そうすると、今いるディレクトリの中にexampleという名前のディレクトリができているはずです。このディレクトリがプロジェクトそのものです。中を見てみると、

図のような構造になっています。先ほどのコマンドで自動的にこれら一つ目のexample以下のファイルが作成されたということです。まだ何も編集はしていませんが、既に、Djangoを動かすことはできます。ローカルサーバーで動かしてみましょう。一つ目のexampleディレクトリの下、つまりmanage.pyと同じディレクトリでターミナルを開いて、

python manage.py runserver

と打ちます。すると次のようにターミナルで、

Validating models...

0 errors found
October 13, 2013 - 04:04:41
Django version 1.5.4, using settings 'example.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

うまくいけば表示されるはずです。ブラウザ(Safariで開きました)を開いて、http://127.0.0.1:8000/ を開くと、

動きました。

しかし、この状態ではまだ何もしていないのと同じですので、前回と同じように、DjangoでもHello world を表示させてみたいと思います。そのためには、このexampleプロジェクトの中にHelloWorldを表示させるアプリケーションを作成させる必要があります。それは以下のコマンドによってできます。

python manage.py startapp hello

startappは文字通りアプリケーションを作成しろという命令です。Helloというアプリケーションを作成しました。ここの名前はなんでも結構です。さて、ちゃんと実行されていれば、manage.pyと同じディレクトリの中に、helloというディレクトリができているのが確認できるでしょう。lsコマンドで中身を確認すると、

__init__.py     models.py     views.py     tests.py

という四つのファイルができていることが確認できるでしょう。Webアプリケーションはブラウザで表示させてなんぼですが、Djangoフレームワークの中でその表示を担当するビューという部分はviews.pyというファイルに記述します。models.pyの部分には、今回は説明を省きますが、データベース関連のコードを書きます。tests.pyは開けばわかると思いますが、実行プログラムには関係ありません。

開発途中でのチェックをする際に自由に使ってくださいよというものです。__init__.pyも開いてみると、なにも書いてありません。ですが、tests.pyと違って、これはこのディレクトリにおいてある必要があります、なぜなら、このファイルは「それがおいてあるディレクトリはpythonパッケージですよ!」と宣言するもので、必要不可欠だからです。

前置きが長くなりましたが、Hello Worldを表示する一番簡単なコードを書きましょう。前述したように、views.pyの中にその処理を書けばいいのでした。ですから、エディタでviews.pyを開いて、以下のようにコードを書きましょう。

#-*- encoding: utf-8 -*-
from django.http import HttpResponse

def greet(request):
return HttpResponse(“Hello World of Django!”)

この内容について解説したいと思います。一行目は文字コードの宣言、二行目は、pythonに限らず、プログラミングをやったことのある方はわかると思いますが、ここでHttpResponseというクラスをdjango.httpというモジュールからimportしています。

Djangoのフォルダを確認すると写真の通りの場所からimportされているというのが確認できます。さて、このHttpResponseですが、何をするのかと言うと、二行目の関数定義の()の中の引数のように、httpリクエストが送られてきたとき(つまり、ページを見ようとしているクライアント側パソコンがブラウザでそのページアドレスを打ち込んで、「ページデータを送ってくれ」と言ってきたとき)、それに対する返事を送る働きをします。この場合、HttpResponseの引数”Hello World of Django!”を返事として返して、これをブラウザで表示しろ!としているわけです。

この図はDjangoフレームワークでのHttpリクエストが、Httpリスポンスとして返ってくるまでの図を示しています。クライアント側の送ったHttpリクエストをurls.pyで参照して、urls.pyでどのHttpリクエストに対してどのビューが呼び出されるのかというパスをもらい、そこからビュー関数が実行されてHttpリクエストが返されるという仕組みです。

あれ?さっきviews.pyは書いたけど、urls.pyは書いてないぞ?

そうです。さきほど、views.pyは記述しましたが、urls.pyにその書いたビューへのパスを書いていないので、このままでは、上手くこのプログラムは走りません。ですからurls.pyを編集しましょう。一番最初の図を振り返っていただければわかりますが、これは二番目のexampleディレクトリの中に入っています。エディタで開いて、冒頭のモジュール導入している一行目の下に

from hello import views

と記述します。これでmanage.pyと同じディレクトリの中にあるhelloディレクトリの中のviews.pyをimportします。そして、urlpatternsのところ

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'example.views.home', name='home'),
# url(r'^example/', include('example.foo.urls')),
url(r'^hello/$',views.greet),

# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)

“url(r’^hello/$’,views.greet),” の部分を追加します。url(r’^hello/$’,views.greet)は、http://127.0.0.1:8000/hello/が呼ばれたら、views.pyのなかの関数greetを実行しなさいということです。r’^hello/$’の部分は正規表現と言います。^や$はそれぞれ文字列の先頭と末尾を示します。このように表記することで、先頭がhで末尾が/のhello/の時のみ作動するように指定できます。 

ではこれをpython manage.py runserverで動かしましょう。urlはもちろんhttp://127.0.0.1:8000/hello/です

以上のように表示されればミッションコンプリートです。ところで、見ての通り、この方法では、HttpResponseを使って文字列を返していますが、実際のwebページ、webアプリケーションを作る際には、htmlを使うのが順等なので、この同じHello world!をhtmlに落とし込んで、表示したいものです。

そのために、Djangoにはテンプレート機能なるものがついています。これは、プロジェクトのどこかに保存しておいたで得たhtmlテンプレートをビューで呼び出して、適切なレンダーなどの処理をしてそれをHttpResponseとして返す機能です(かなり端折った説明ですが)

まず、htmlテンプレートを作成しましょう。manage.pyと同じディレクトリにtemplatesディレクトリを作り、その中に、base.htmlを作りましょう。base.htmlには以下を記述しましょう。

<html>
<body>
<p>Hello World of Django!</p>
</body>
</html>

次にビューも、レンダーしたものをレスポンスとして返せるようにしましょう。Template,Context,Loaderクラスを使う方法等がありますが、一番楽なので、render_to_responseクラスを使う方法でviewを書き直しましょう。

#-*- encoding: utf-8 -*-
from django.shortcuts import render_to_response

def greet(request):
return reder_to_response(‘base.html’,{})[python]

Template,Contextを使いたい場合は以下のようになります。いずれでもやり
やすい方でいいでしょう。
[python] #-*- encoding:utf-8 -*-

from django.http import HttpResponse
from django.template import Template,Context,loader

def greet(request):
context = Context()
template = loader.get_template(‘base.html’)
return HttpResponse(template.render(context))

とここまでで、ビューは完成ですが、あることに気付いたでしょうか?そう。ビューの中で、templatesを読み込んでいるのですが、どこからよみこむかの設定をしなければ、正しくこのプログラムは作動しません。どこを設定するかと言うと、settings.pyの中身です。settings.pyを開いて、TEMPLATE_DIRSの所を変更しましょう。

TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
'/Users/kobayashiyutaka/Documents/python_p1/examples/templates/',
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)

3行目のところが追加したところですが、この部分は人によって違います。とにかく、templatesディレクトリまでのフルパスを書き込めばいいです。あれ?わからないぞという人は、ターミナルで、templatesディレクトリの中にいる時にpwdと打ち込んでみると、templatesディレクトリまでのパスが返されます。

さて、ここまでくれば、完了です。Python manage.py runserverを使ってサーバーを起動させて、ブラウザで開いてみましょう。さきほどと同じように、Hello world of Django!と表示されていれば、成功です。

今回はここまでです。次回もお楽しみに。

 

完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top