Я читаю «Head First Python». Я нахожусь в главе 10, где представлен Google App Engine. Первоначальный мир приветствия с использованием Python и Google App Engine был успешным, но последующие программы все провалились.Google App Engine - Django - Python - Ubuntu - Проблемы
У меня есть следующий app.yaml файл:
application: three
version: 1
runtime: python27
api_version: 1
threadsafe: false
handlers:
- url: /.*
script: page368b.py
libraries:
- name: django
version: "1.3"
Со следующим Python кода (page368b.py):
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext import db
from google.appengine.ext.webapp import template
#this line throws the error when accessing the web-page
from google.appengine.ext.db import djangoforms
import birthDB
class BirthDetailsForm(djangoforms.ModelForm):
class Meta:
model = birthDB.BirthDetails
class SimpleInput(webapp.RequestHandler):
def get(self):
html = template.render('templates/header.html', {'title': 'Provide your birth details'})
html = html + template.render('templates/form_start.html', {})
html = html + str(BirthDetailsForm(auto_id=False))
html = html + template.render('templates/form_end.html', {'sub_title': 'Submit Details'})
html = html + template.render('templates/footer.html', {'links': ''})
self.response.out.write(html)
def main():
app = webapp.WSGIApplication([('/.*', SimpleInput)], debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == '__main__':
main()
Вот другой модуль Python импортирован в один выше (
from google.appengine.ext import db
class BirthDetails(db.Model):
name = db.StringProperty()
date_of_birth = db.DateProperty()
time_of_birth = db.TimeProperty()
Существует шаблоны, которые вызывается вышеуказанным модулем Python. В них есть код HTML с некоторым кодом Django. Ниже приведен пример использования footer.html.
<p>
{{ links }}
</p>
</body>
</html>
Другие файлы HTML аналогичны. Я могу запустить Google App Engine без проблем, используя эту команду из BASH: python google_appengine/dev_appserver.py ~/Desktop/three
Каталог три содержит шаблоны папку, файл app.yaml, модули Python, приведенные выше.
Моя проблема, когда я получить доступ к веб-странице на http://localhost:8080
ничего там и BASH оболочки, где выполняется команда, чтобы начать это показывает все вызовы в программе Python, вызвавшего проблему, а затем, наконец, говорит: ImportError : Параметры не могут быть импортированы, поскольку переменная среды DjANGO_SETTINGS_MODULE не определена.
Я прочитал в нескольких разных местах несколько разных вещей, чтобы попробовать, поэтому я подумал, что буду идти дальше и создавать новое сообщение, и надеюсь, что некоторые экспертные программисты на Python будут звонить и оказывать помощь потерянному хоббиту как я.
Кроме того, в книге говорится, что для установки этого кода используется Python2.5, но Google App Engine теперь поддерживает Python2.7, который не был доступен на момент написания книг. Кроме того, я только что проверил, и Python2.5 даже не может использоваться с Google App Engine. Python2.5 deprecated
Это, вероятно, слишком сложно решить здесь. Я удивлен, что все эти различные технологии используются в книге Head First Python. Он задает много Python noob.^_^
С уважением,
user_loser
UPDATE - я установил Django на моей Ubuntu операционной системы
Когда я изменить строку в модуле питон 368B.ру from google.appengine.ext.db import djangoforms
к from django import forms
я получаю следующее сообщение об ошибке на консоли при доступе к веб-странице на localhost
:
[email protected]:~/Desktop$ google_appengine/dev_appserver.py three
INFO 2014-09-06 21:08:36,669 api_server.py:171] Starting API server at: http://localhost:56044
INFO 2014-09-06 21:08:36,677 dispatcher.py:183] Starting module "default" running at: http://localhost:8080
INFO 2014-09-06 21:08:36,678 admin_server.py:117] Starting admin server at: http://localhost:8000
ERROR 2014-09-06 21:08:48,942 cgi.py:121] Traceback (most recent call last):
File "/home/loser/Desktop/three/page368b.py", line 13, in <module>
class BirthDetailsForm(forms.ModelForm):
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/models.py", line 205, in __new__
opts.exclude, opts.widgets, formfield_callback)
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/models.py", line 145, in fields_for_model
opts = model._meta
AttributeError: type object 'BirthDetails' has no attribute '_meta'
INFO 2014-09-06 21:08:48,953 module.py:652] default: "GET/HTTP/1.1" 500 -
ERROR 2014-09-06 21:08:49,031 cgi.py:121] Traceback (most recent call last):
File "/home/loser/Desktop/three/page368b.py", line 13, in <module>
class BirthDetailsForm(forms.ModelForm):
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/models.py", line 205, in __new__
opts.exclude, opts.widgets, formfield_callback)
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/models.py", line 145, in fields_for_model
opts = model._meta
AttributeError: type object 'BirthDetails' has no attribute '_meta'
ошибки обновления от запуска программы, как без внесения каких-либо изменений:
[email protected]:~/Desktop$ google_appengine/dev_appserver.py three/
INFO 2014-09-06 21:35:19,347 api_server.py:171] Starting API server at: http://localhost:60503
INFO 2014-09-06 21:35:19,356 dispatcher.py:183] Starting module "default" running at: http://localhost:8080
INFO 2014-09-06 21:35:19,358 admin_server.py:117] Starting admin server at: http://localhost:8000
ERROR 2014-09-06 21:35:25,011 cgi.py:121] Traceback (most recent call last):
File "/home/loser/Desktop/three/page368b.py", line 13, in <module>
class BirthDetailsForm(djangoforms.ModelForm):
File "/home/loser/Desktop/google_appengine/google/appengine/ext/db/djangoforms.py", line 772, in __new__
form_field = prop.get_form_field()
File "/home/loser/Desktop/google_appengine/google/appengine/ext/db/djangoforms.py", line 370, in get_form_field
return super(DateProperty, self).get_form_field(**defaults)
File "/home/loser/Desktop/google_appengine/google/appengine/ext/db/djangoforms.py", line 353, in get_form_field
return super(DateTimeProperty, self).get_form_field(**defaults)
File "/home/loser/Desktop/google_appengine/google/appengine/ext/db/djangoforms.py", line 200, in get_form_field
return form_class(**defaults)
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/fields.py", line 340, in __init__
super(DateField, self).__init__(*args, **kwargs)
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/fields.py", line 99, in __init__
widget = widget()
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/forms/widgets.py", line 382, in __init__
self.format = formats.get_format('DATE_INPUT_FORMATS')[0]
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/utils/formats.py", line 67, in get_format
if use_l10n or (use_l10n is None and settings.USE_L10N):
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/utils/functional.py", line 276, in __getattr__
self._setup()
File "/home/loser/Desktop/google_appengine/lib/django-1.3/django/conf/__init__.py", line 40, in _setup
raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
Где вы разместили файл settings.py? – power
Вот пример установки (не мой): http://django-rocket-engine.readthedocs.org/en/latest/installation.html – power
@power нет settings.py - Да, я прочитал об этом файле но в примере в книге не было ни одного. Но книга была написана, когда Python2.5 все еще использовался в Google App Engine. –