войти зарегистрироваться

Django Framework whois

индекс
110,53

Django приложение на Google App Engine

О Google App Engine не слышал уже наверное только ленивый. Использование фреймворка Django совместно с GAE дает в руки разработчика удобные инструменты для быстрого создания веб-приложений.

В этом туториале рассказывается, как создать простое Django приложение с использованием этой платформы. Предполагается, что у вас уже есть аккаунт в Google App Engine.


1. Для начала нужно зарегистрировать имя приложения в GAE и установить у себя тулкит. Среда Google App Engine работает только с Python 2.5 (2.5.1, 2.5.2).

2. Создайте папку для вашего приложения. Имя и размещение не имеет значения. У меня папка называется "dvk".

3. В папке приложения создайте файл main.py
import os, sys

os.environ["DJANGO_SETTINGS_MODULE"] = "dvk.settings"

ROOT_PATH = os.path.dirname(__file__)
sys.path.append(ROOT_PATH)

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings

settings._target = None

import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == "__main__":
    main()

Этот файл запускается на выполнение, когда пользователь открывает в браузере страницу вашего веб-приложения.

4. Создайте файл app.yaml
application: dvk
version: 1
runtime: python
api_version: 1

handlers:
- url: /static
static_dir: static

- url: /.*
script: main.py

Имя приложения естественно подставьте по своему вкусу :)

5. Из папки приложения выполните команду создания нового Django-проекта:
django-admin.py startproject dvk

Маленькое замечание: Всего у нас будет 2 папки проектов - папка GAE-проекта и папка Django-проекта внутри неё. Внешний проект выполняет роль обёртки.
dvk/
main.py
app.yaml
    dvk/
    manage.py
    settings.py
    urls.py

В файле настроек Django-проекта settings.py нужно удалить всё, что относиться к настройкам БД, админке, аутентификации и сессиям. Google App Engine не поддерживает модели Django, поэтому эти модули работать не будут.

6. Теперь можно протестировать наше GAE+Django приложение
cd ..
dev_appserver.py dvk

INFO 2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
INFO 2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
INFO 2008-04-08 19:08:10,404 dev_appserver_main.py] Running application dvk on port 8080: http://localhost:8080

Откройте браузер с адресом http://127.0.0.1:8080/ и у вас отобразится стандартная страница Django с сообщением It worked!

7. Создайте Django апликейшн в папке Django-проекта.
manage.py startapp main


8. Теперь самое время добавить модель данных. Мы создадим простой класс Visitor, который будет хранить информацию обо всех посетителях сайта.
#.../dvk/dvk/main/models.py
from google.appengine.ext import db

class Visitor(db.Model):
    ip = db.StringProperty()
    added_on = db.DateTimeProperty(auto_now_add=True)

При добавлении или изменении моделей в Google App Engine не требуется проводить синхронизацию с базой данных. Она выполняется автоматически.

9. Теперь создадим процедуру-контроллер. Она будет записывать в базу данных параметры посетителя нашей веб-страницы и отображать список всех посетителей.
#.../dvk/dvk/main/views.py
from django.http import HttpResponse
from dvk.main.models import Visitor

def main(request):
    visitor = Visitor()
    visitor.ip = request.META["REMOTE_ADDR"]
    visitor.put()
    result = ""

    visitors = Visitor.all()
    visitors.order("-added_on")
    for visitor in visitors:
        result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u""

    return HttpResponse(result)


10. В файле диспетчера URL-ов укажем, что наша процедура ответственна за обработку запроса главной страницы сайта.
#.../dvk/dvk/main/urls.py
from django.conf.urls.defaults import *

urlpatterns = patterns("",
(r"^$", "mashname.main.views.main"),
)

11. Протестируйте своё приложение открыв окно браузера по адресу http://127.0.0.1:8080/. При каждом обновлении веб-страницы будет добавлятся новая строка и соответственно новый объект Visitor будет записан в БД. GAE также автоматически создает админ-панель приложения - http://127.0.0.1:8080/_ah/admin/

12. Теперь можно заливать наше приложение на GAE: appcfg.py update dvk
При первом выполнении команда попросит авторизироваться.

Использованные материалы:
Running Django on Google App Engine
Django on Google App Engine in 13 simple steps

Кросс-пост с моего блога

комментарии (21)

  • хороший материал. Иван Салагаев уже писал на эту тему.
    • Вы наверное имеете ввиду его статью http://softwaremaniacs.org/blog/2008/04/…
      Ну так это в общем о преимуществах и недостатках GAE.
      p.s.: Фамилия Ивана - Сагалаев, он об этом наверное уже замаялся напоминать :)
      • о как) спасибо, буду знать)
  • пример - это хорошо. но очень малоо ) давай еще
    • сейчас тружусь над MORPG-игрой на Google App Engine,
      по ходу разработки будут новые статьи ;)
      • Если не секрет, почему GAE? Неужели настолько упрощается deployment, что можно пренебречь недостатками?
  • Дядя Вова! Снова спасибо! :-) Пишите-пишите-пишите еще :-)
    • пожалуйста,
      по мере развития текущего моего проекта на GAE буду писать ещё :)
  • вот есть такой проект

    а вообще я очень надеюсь что в ближайшее время выйдет проект, который позволит исопльзовать джанго на все 100%

    хотябы основные вещи, которые делают джанго привлекательной технологией, например, панель администрирования, модели и тд, поработать конечно нужно будет немало, но это того стоит
  • Есть ещё web2py - что-то вроде Django, хотя я его ещё не смотрел внимательно - на сайте разработчиков говорят что он совместим уже с GAE из коробки.
  • Что хоть делает этот пример? (Уже привычно стало сразу пролистывать весь код примера, чтобы узнать в конце что же делают та, прежде чем вникать. но тут не нашел)
    • :)
      пример сам по себе не делает ничего полезного,
      это туториал - как создавать проекты на GAE + Django
  • Очень полезная для меня статья. Давно ждал такого введения в Django + App Engine. Спасибо
  • В GAE все еще нет возможности определять IP посетителей?
    Без этого не очень применимо в отрыве от аккаунтов гугла
    • Как это нету? а как же пример из статьи "request.META["REMOTE_ADDR"]"?
      Не совсем понимаю как связаны ip и аккаунты?
    • GAE предполагает связь с гугл-аккаунтами:
      "...An instance of the User class represents a user with a Google account..."
      http://code.google.com/appengine/docs/us…
      Но, как я понимаю, в текущей реализации класс User еще далек от релиза :)
  • спасибо, познавательно, но не вижу смысла использовать джангу с GAE, джанговские шаблоны там и так есть. По большому счёту, под GAE доступны лишь шаблоны, urlmapping, responce объект и наверно всё. ОРМ не доступен, а следовательно сразу же исчезают все вкусности (админка, User model и тд)
  • без мапинга урлов «джанговским путём» — нет
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.