2013-09-22 48 views
0

有人可以帮助我将django应用程序转换为Google App Engine(GAE)吗?我希望能够将我的django应用程序中的所有文件都复制到GAE应用程序中。但是,我不确定应如何配置GAE的默认文件。应该如何在main.py文件的样子,这样运行Django应用程序就像是专做:为Django应用程序配置GAE

main.py

import webapp2 

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

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

的app.yaml

application: appname 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 

libraries: 
- name: django 
    version: "1.3" 

builtins: 
- django_wsgi: on 

回答

0

我有一个Django应用程序运行在应用引擎上。我跟着这个链接来启动并运行。 http://www.allbuttonspressed.com/projects/djangoappengine。与普通的django相比,所有的配置文件都有很小的变化。我现在不使用django,因为我喜欢应用程序引擎并讨厌django。以下是我的一些文件示例。在你的问题中注意你有一个webapp2请求处理程序,你不会在django中使用类似的东西。它将所有的普通视图定义作为函数,而不是像app引擎那样的类。如果你决定尝试这种方法,让我知道它是怎么回事。

这是我的app.yaml后,我按照上面的链接。

application: app 
version: production 
runtime: python27 
api_version: 1 
threadsafe: yes 

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: /.* 
    script: djangoappengine.main.application 

我settings.py

# Initialize App Engine and import the default settings (DB backend, etc.). 
# If you want to use a different backend you have to remove all occurences 
# of "djangoappengine" from this file. 
from djangoappengine.settings_base import * 
import os 

DEBUG = False 

TEMPLATE_DEBUG = DEBUG 

# Activate django-dbindexer for the default database 
DATABASES['native'] = DATABASES['default'] 
DATABASES['default'] = {'ENGINE': 'dbindexer', 'TARGET': 'native'} 
AUTOLOAD_SITECONF = 'indexes' 

INSTALLED_APPS = (

    'django.contrib.contenttypes', 
    'django.contrib.auth', 
    'django.contrib.sessions', 
    'djangotoolbox', 
    'autoload', 
    'dbindexer', 

    # djangoappengine should come last, so it can override a few manage.py commands 
    'djangoappengine', 
    ) 

MIDDLEWARE_CLASSES = (
    # This loads the index definitions, so it has to come first 
    'autoload.middleware.AutoloadMiddleware', 

    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    ) 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.request', 
    'django.core.context_processors.media', 
    'context_processors.general' 
    ) 


ADMIN_MEDIA_PREFIX = '/media/' 
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'), 
    os.path.join(os.path.dirname(__file__), 'media'), 

    ) 

main.py

import os,sys 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

from google.appengine.dist import use_library 
use_library('django', '1.2') 

# 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 

# Log errors. 
#import logging 
#def log_exception(*args, **kwds): 
# logging.exception('Exception in request:') 
# 
#django.dispatch.Signal.connect(
# django.core.signals.got_request_exception, log_exception) 

# Unregister the rollback event handler. 
django.dispatch.Signal.disconnect(
    django.core.signals.got_request_exception, 
    django.db._rollback_on_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()