django - 如何在 Google 应用引擎中通过 Django 添加模型表单?

标签 django google-app-engine django-forms

我建立了一个基于 Google App Engine 的网站。它包括十个模型,根据用户输入进行一些简单的计算。以前,它是使用 Python 2.5 编码的,使用 djangoform.modelform 和 db.model 来处理数据。由于 Python 2.7 不支持 djangoform.modelform,我想改用 django modelform。但是,在迁移过程中,我遇到了一些问题(严重的内部错误)。当我试图通过 Django.forms.Modelform 添加表单时。我提供了我的旧代码和新代码(不起作用)。我的问题是:

  1. 如何使用Django库来解决我的问题?

  2. 如果可能的话,我是否必须将我的网站做成一个项目,并为模型创建十个应用程序?

  3. 我是否必须修改我的 yaml 文件,并创建新的 url.py、setting.py 等?

非常感谢任何评论和建议。我正在使用 Python 2.7、GAE 1.6.2 和 Django 1.2。

这是有问题的代码(代码1)。

import webapp2 as webapp
import django
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
import os
from django.db import models
from django.forms import ModelForm

class trexInp(models.Model):
    chemical_name = models.CharField(max_length=255)

class trexInput(ModelForm):
    class Meta:
        model = trexInp

class trexInputPage(webapp.RequestHandler):
    def get(self):        
        html = str(trexInput())
        self.response.out.write(html)

app = webapp.WSGIApplication([('/.*', trexInputPage)], debug=True)

def main():
    run_wsgi_app(app)

if __name__ == '__main__':
    main()

为了比较,我附上了旧代码(代码 2)。

import webapp2 as webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from google.appengine.ext.webapp import template
from google.appengine.ext.db import djangoforms

class trexInp(db.Model):
    chemical_name = db.StringProperty()

class trexInput(djangoforms.ModelForm):
    class Meta:
        model = trexInp

class trexInputPage(webapp.RequestHandler):
    def get(self):
        html = str(trexInput())
        self.response.out.write(html)

app = webapp.WSGIApplication([('/.*', trexInputPage)], debug=True)

def main():
    run_wsgi_app(app)

if __name__ == '__main__':
    main()

这是我的 app.yaml 文件

application: pypest1
version: 1
runtime: python27
api_version: 1

threadsafe: false

libraries:
- name: numpy
  version: latest
- name: webapp2
  version: latest
- name: django
  version: "1.2"

handlers:
- url: /
  script: main.py 
- url: /index.html
  script: main.py 

#t-rex
- url: /trex_input.html
  script: trex/trex_input.py

我的main.py文件 导入操作系统 os.environ['DJANGO_SETTINGS_MODULE']='global_settings' 将 webapp2 导入为 webapp

from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
from google.appengine.ext.db import djangoforms


class defaultPage(webapp.RequestHandler):
    def get(self):
        html = template.render('templates/01.html', {'title':'model'})
        self.response.out.write(html)
app = webapp.WSGIApplication([('/.*', defaultPage)], debug=True)

def main():
    run_wsgi_app(app)

if __name__ == '__main__':
    main()  

这是服务器日志:

    2012-02-24 22:40:55 Running command: "['C:\\Python27\\pythonw.exe', 'C:\\Program Files (x86)\\Google\\google_appengine\\dev_appserver.py', '--admin_console_server=', '--port=8082', u'C:\\Users\\tao\\Dropbox\\AppPest1']"
WARNING  2012-02-25 03:40:57,216 rdbms_mysqldb.py:74] The rdbms API is not available because the MySQLdb library could not be loaded.
INFO     2012-02-25 03:40:57,486 dev_appserver_multiprocess.py:650] Running application dev~pypest1 on port 8082: http://localhost:8082
INFO     2012-02-25 03:40:57,486 dev_appserver_multiprocess.py:652] Admin console is available at: http://localhost:8082/_ah/admin
WARNING  2012-02-25 03:40:59,211 py_zipimport.py:139] Can't open zipfile C:\Python27\lib\site-packages\setuptools-0.6c11-py2.7.egg-info: IOError: [Errno 13] file not accessible: 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info'
INFO     2012-02-25 03:40:59,611 dev_appserver.py:2865] "GET / HTTP/1.1" 200 -
INFO     2012-02-25 03:40:59,671 dev_appserver.py:2865] "GET /stylesheets/style.css HTTP/1.1" 304 -
INFO     2012-02-25 03:40:59,720 dev_appserver.py:2865] "GET /images/valid-xhtml10-blue.png HTTP/1.1" 304 -
INFO     2012-02-25 03:40:59,767 dev_appserver.py:2865] "GET /images/valid-css-blue.png HTTP/1.1" 304 -
INFO     2012-02-25 03:40:59,816 dev_appserver.py:2865] "GET /stylesheets/images/bg.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:40:59,867 dev_appserver.py:2865] "GET /stylesheets/images/header.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:41:00,023 dev_appserver.py:2865] "GET /stylesheets/images/intro.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:41:00,381 dev_appserver.py:2865] "GET /favicon.ico HTTP/1.1" 404 -
INFO     2012-02-25 03:41:01,177 dev_appserver.py:2865] "GET /trex_description.html HTTP/1.1" 200 -
INFO     2012-02-25 03:41:01,538 dev_appserver.py:2865] "GET /stylesheets/style.css HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,585 dev_appserver.py:2865] "GET /images/valid-xhtml10-blue.png HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,632 dev_appserver.py:2865] "GET /images/valid-css-blue.png HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,783 dev_appserver.py:2865] "GET /stylesheets/images/bg.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,891 dev_appserver.py:2865] "GET /stylesheets/images/header.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,940 dev_appserver.py:2865] "GET /stylesheets/images/intro.jpg HTTP/1.1" 304 -
INFO     2012-02-25 03:41:01,996 dev_appserver.py:2865] "GET /favicon.ico HTTP/1.1" 404 -
WARNING  2012-02-25 03:41:03,632 py_zipimport.py:139] Can't open zipfile C:\Python27\lib\site-packages\setuptools-0.6c11-py2.7.egg-info: IOError: [Errno 13] file not accessible: 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info'
ERROR    2012-02-25 03:41:03,657 cgi.py:121] Traceback (most recent call last):
  File "C:\Users\tao\Dropbox\AppPest1\trex\trex_input.py", line 33, in <module>
    class trexInp(models.Model):
  File "C:\Program Files (x86)\Google\google_appengine\lib\django_1_2\django\db\models\base.py", line 50, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range

INFO     2012-02-25 03:41:03,686 dev_appserver.py:2865] "GET /trex_input.html HTTP/1.1" 500 -

最佳答案

我无法帮助你处理你的具体代码,但我最近不得不自己做一个类似的任务(替换 djangoforms)。这是我想到的改变。希望你能从中学到一些东西:

http://code.google.com/p/rietveld/source/diff?spec=svn33bb90856ee02a26fa70c873658e91df445aca93&r=33bb90856ee02a26fa70c873658e91df445aca93&format=side&path=/codereview/views.py

关于django - 如何在 Google 应用引擎中通过 Django 添加模型表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437162/

相关文章:

django自定义标签内联或 block

python - Google App Engine 写入属性

python - 基于 URL 的数据库路由

python - IronPython 上的 Django

java - 没有为 Content-Type : application/json 定义解析器

python - 如何从 forms.ModelForm 中的模型获取字段

Django - 管理员 save_model() 和 post_save 信号之间的区别

django - 在 Django 中将表单拆分为选项卡

django - 如何将过滤器后端应用于 Django Rest Framework 中所有资源的所有字段?

django - create_user() 缺少 1 个必需的位置参数 : 'password'