2012-02-24 11 views
5

Zbudowałem witrynę internetową opartą na Google App Engine. Zawiera dziesięć modeli, wykonując proste obliczenia na podstawie danych wprowadzanych przez użytkownika. Wcześniej był kodowany przy użyciu Pythona 2.5 przy użyciu djangoform.modelform i db.model do obsługi danych. Ponieważ Python 2.7 nie obsługuje djangoform.modelform, chciałbym zamiast tego użyć django modelform. Jednak podczas migracji napotkałem pewne problemy (zepnij błąd wewnętrzny). kiedy próbowałem dodać formularz przez Django.forms.Modelform. Dostarczyłem moje stare kody i nowe (nie działa). Moje pytania to:Jak dodać formularze formularzy przez Django w aparacie aplikacji Google?

  1. Jak używać biblioteki Django do rozwiązania mojego problemu?

  2. Jeśli to możliwe, czy muszę utworzyć projekt strony i utworzyć dziesięć aplikacji dla modeli?

  3. Czy muszę zmodyfikować mój plik yaml i utworzyć nowy adres url.py, setting.py, itp?

Naprawdę doceniam każdy komentarz i sugestię. Korzystam z Pythona 2.7, GAE 1.6.2 i Django 1.2.

Oto kod (kod 1) z problemem.

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() 

Aby porównać, podłączyłem stary kod (Code 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() 

Oto mój plik 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 

Mój plik main.py import os os.environ [ 'DJANGO_SETTINGS_MODULE'] = 'global_settings' import webapp2 jak 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() 

Oto rejestr serwera:

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 - 
+0

musisz zmienić format kodu - tiret każdego wiersza do 4 pomieszczeń –

+0

Dzięki za sugestię. Przeformatowany. –

+1

Z jakimi problemami się spotykasz? –

Odpowiedz

5

Nie mogę ci pomóc z twoim konkretnym kodem, ale ostatnio musiałem wykonać podobne zadanie (zastąpić djangoformy). To jest zmiana, z którą się rozkręcam. Mam nadzieję, że można nauczyć się czegoś od niego:

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

+0

Tak, to jest sposób na zrobienie tego. Inną opcją jest użycie django-nonrel i użycie modeli Django zamiast modeli db silnika aplikacji. Istnieje jednak kilka wad django-nonrel, głównie będących dłuższym czasem uruchamiania dla zimnych instancji, a dostęp do niektórych natywnych funkcji magazynu danych gae jest trudniejszy. – dragonx

+0

Dziękuję za komentarze i zastosowałem się do sugestii Guido, aby zastąpić djangoformy i działa! Ponownie, naprawdę doceniam, że pomagacie –

Powiązane problemy