英文原文链接:Running Django on Google App Engine
作者:Damon Kohler
翻译:將王車
使用Django 0.96.1
Google App Engine中已经包括Django 0.96.1,如果你使用这个最新的稳定版(译者注:本文写于2008.04,你看到译文的时候Django 1.0应该已经发布了吧),则不需要安装其它的东西。只需要简单引入你的Django组件就行了。如果你使用的是Django的开发版则需要一些额外的措施。
作者:Damon Kohler
翻译:將王車
在Google App Engine中使用Django
引言
Google App Engine和Django都使用WSGI标准来运行程序。因此可以在Google App Engine中使用包括中间件在内的几乎所有的Django的属性。作为开发人员,你唯一必须做的事仅仅是修改Django的数据模型,使用Google App Engine Datastore API来调用更快、更稳定的Google App Engine的数据存储。因为Django和Google App Engine对(数据)模型有着相似的定义,做为一个Django的开发人员,你将很容易修改你的程序来使用我们的数据存储。使用Django 0.96.1
Google App Engine中已经包括Django 0.96.1,如果你使用这个最新的稳定版(译者注:本文写于2008.04,你看到译文的时候Django 1.0应该已经发布了吧),则不需要安装其它的东西。只需要简单引入你的Django组件就行了。如果你使用的是Django的开发版则需要一些额外的措施。在main.py中添加WSGI处理器
使用WSGI来启动你的Django程序只需要几个简单的步骤,导入google.appengine.ext.webapp
中的util
和Django中的WSGI处理组件。用样,我们使用Google App Engine来记录异常来代替使用manage.py做处理异常,所有的日志都能在Admin console中看到。需要更多关于Google App Engine日志记录方面的信息,请阅读我们的相关文章 。相关代码:另外,你Google App Engine的app.yaml也应该看起象这样:
import logging, os
# 导入Google App Engine的模块
from google.appengine.ext.webapp import util
# 强制Django重新载入settings
from django.conf import settings
settings._target = None
# 在导入任何Django的模块前必须设置该环境变量。
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher
def log_exception(*args, **kwds):
logging.exception('Exception in request:')
# 记录错误。
django.dispatch.dispatcher.connect(
log_exception, django.core.signals.got_request_exception)
# 取消回滚事件处理器
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)
def main():
# 为WSGI创建一个Django程序
application = django.core.handlers.wsgi.WSGIHandler()
# 使用WSGI CGI处理器来运行该程序 util.run_wsgi_app(application)
if __name__ == '__main__':
main()
application: my_application
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /.*
script: main.py
你可以将css文件,图片和其它静态资源放在静态目录里。
安装Django的开发版
要使用Django的开发版,请从Django的网站下载相关文件,并将放在你程序的最顶层目录下。为了减少部署到Google App Engine时的文件数量,可以删除Django文件夹中的下列目录:django/bin
django/contrib/admin
django/contrib/auth
django/contrib/databrowse
django/test
你需要修改main.py来除去默认的Django版本,并载入你程序所包含的版本。
import logging, os, sys
# 导入Google App Engine的模块
from google.appengine.ext.webapp import util
# 强制Django重新载入settings
from django.conf import settings
settings._target = None
# 删除Django的标准版。
for k in [k for k in sys.modules if k.startswith('django')]:
del sys.modules[k]
# 在sys.path中添加我们程序的目录,因为我们需要从这里开始导入。
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
# 在导入任何Django的模块前必须设置该环境变量。
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher
def log_exception(*args, **kwds):
logging.exception('Exception in request:')
# 记录错误。
django.dispatch.dispatcher.connect(
log_exception, django.core.signals.got_request_exception)
# 取消回滚事件处理器
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)
def main():
# 为WSGI创建一个Django程序
application = django.core.handlers.wsgi.WSGIHandler()
# 使用WSGI CGI处理器来运行该程序 util.run_wsgi_app(application)
if __name__ == '__main__':
main()
更改Django的settings
因为Google App Engine不支持Django的Models,所以所有DATABASE_*的配置需要放为空。而身份验证(authentication)和管理(admin)中间件因为使用了Models所以也需要禁用,他们的功能可以分别使用App Engine Users API和Admin Console来代替。Sessions模块也依赖Models,所以也需要禁用。最后,需要用"app"来代替对"project.app"的引用和动态的决定模板目录的位置。import os
ROOT_URLCONF = 'urls' # 用'urls'代替'project.urls'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
)
ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or
# "C:/www/django/templates". Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
ROOT_PATH + '/templates',
)
开发环境的使用
Google App Engine的SDK带有一个名为
-------传说中的分割线-------
有打算在GAE中使用Django的话可以看看使用Google App Engine Helper for Django
dev_appserver.py的开发服务器,你也能用它将你的程序部署到Google App Engine。如果你使用Google App Engine的数据存储,也不需要再使用
manage.py
来同步数据库。结语
就这样!现在你就能创建的你的程序就象在Django中一样。-------传说中的分割线-------
有打算在GAE中使用Django的话可以看看使用Google App Engine Helper for Django
Comments