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

MENU

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

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

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

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

前回までで、Pythonについて、そして、Django、GAEについてそれぞれ説明をしてきました。今回はDjangoとGAEを同時に動かすための環境を作りたいと思います。Djangoと、GAEはもともとは互換性がないので、その仲介をするファイルを入れなければなりません。ネット上にいくつかその用途で公開されているものはありますが、今回使うのはDjango-nonrelです。

まずは、Django-nornrelから六つのファイルをダウンロードします。

  • django-nonrel
  • djangoappengine
  • djangotoolbox
  • django-autoload
  • django-dbindexer
  • django-testapp

それぞれクリックすると、GitHubもしくはGitBucketのリンクに飛びます。(django-autoloadはBitbucketに飛ばされます)面倒ですが、それぞれからクリックしてください。GitHubの場合、git cloneでもいいですし、

画像のようにdownload zipからダウンロードしてもいいです。

Bitbucketだとどのようにダウンロードすればいいのかちょっとわかりづらいですが、心配ないです。

ダウンロードタブのページのタグをクリックすると、zip形式でダウンロードできるでしょう。落としたzipフォルダは全部解凍しておきましょう。うまくいけば以下のようなファイルが落とせているはずです。(2013/10/26)

  • djangoappengine-appengine-1.4
  • django-dbindexer-dbindexer-1.4 
  • djangotoolbox-toolbox-1.4
  • django-nonrel-develop 
  • twanschik-django-autoload-1698ab544030
  • django-testapp-testapp-1.4

さてでは、GAEに載せるプロジェクトディレクトリを作りましょう。先週は使いませんでしたが、Google App Engine Launcherから作る機能があります。

File -> New Applicationから上のウィンドウが開きます。Application idは前回GAEに登録したidでいいでしょう。プロジェクトを置きたいディレクトリへのパスをApplication Directoryに入れて、createボタンを押しましょう。
そうすると、新しいプロジェクトができているはずです。

中には見ての通り、ご丁寧に自動的に

  • app.yaml
  • index.yaml
  • main.py

というファイルが作られています。main.pyを開いてみると、

import webapp2

class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world!')

app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)

となっています。webapp2というGAE組み込みのモジュールを使っていますが、結局これは、五行目でわかるように、Httpリクエストに対して、Hello World!をレスポンスとして返しているだけですね。

次はapp.yamlを開いてみましょう。

application: yutakatraining
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico

- url: .*
script: main.app

libraries:
- name: webapp2
version: "2.5.2"

これはこれで走ります。が、Django-nonrelを使うには、このapp.yamlは後で置き換えます。

さて、これだけでも走るのですが、Djangoが関係してません。先ほど、ダウンロードしたものからこのプロジェクトディレクトリにコピーして持ってきましょう。

  • djangoappengine-appengine-1.4 => djangoappengine
  • django-dbindexer-dbindexer-1.4 => dbindexer 
  • djangotoolbox-toolbox-1.4 => djangotoolbox
  • django-nonrel-develop => django 
  • twanschik-django-autoload-1698ab544030 => autoload

以上のフォルダをすべて、プロジェクトディレクトリの中に入れましょう。シムリンクを貼るのでも代替は効きます。

さて、はじめに落としてきたファイルにはdjango-testapp-testapp-1.4なるものもありました。この全部をプロジェクトのディレクトリに入れましょう。app.yamlも置き換えます。また、冒頭のapplication id を変えましょう。1行目の”yutakatraining”のところです。

application: yutakatraining
version: 1
runtime: python27
api_version: 1
threadsafe: yes

builtins:
- remote_api: on

inbound_services:
- warmup

libraries:
- name: django
version: latest

handlers:
- url: /_ah/queue/deferred
script: djangoappengine.deferred.handler.application
login: admin

- url: /_ah/stats/.*
script: djangoappengine.appstats.application

- url: /media/admin
static_dir: django/contrib/admin/media
expiration: '0'

- url: /static/admin
static_dir: django/contrib/admin/static/admin
expiration: '0'

- url: /.*
script: djangoappengine.main.application

全部終わると、次のようになります。

これで終わりかと思いきや、実は少しバグがあってこのままだと動きません。ここを参考にして、djangoappengine/db/base.py の290行目を

self.ops = DatabaseOperations(self)

から、

self.ops = DatabaseOperations()

へ書き換えましょう。さて、これで完了です。Google App Engine Launcher を開いて、先週と同じように、Runボタンを押すとローカルサーバーが起動します。Browseボタンで見てみましょう。

ターミナルで動かす場合、GAEdでdjangoのmanage.py  runserverに対応するものは、dev_appserver.pyだということは先週まででやりましたが、dev_appserver.pyでなくて、python manage.py runserverの方を実行するようにしてください。個人的には、Google App Engine Launcher でボタンを押してやる方が簡単で間違えないので、好きです。もちろん、これをアップロードするには、先週と同じく右上のdeployボタンを押せばokです。

完全無料!

1で登録完了!

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

今すぐ新規会員登録
Page Top