Я очень плохо знаком с python и после краткого введения в python + движок приложений Google, я начал работать над пилотным проектом. Я загрузил 2 объекта UserDetails и PhoneBook с данными на движок приложения. Теперь в моем пользовательском интерфейсе я пытаюсь сначала взять имя пользователя, затем запросить его, чтобы получить идентификатор пользователя из UserDetails, затем, используя полученный идентификатор пользователя, я запрашиваю телефонную книгу, чтобы получить записи его телефонной книги. Вот мой код для пользовательского интерфейса,
#!/usr/bin/env python
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from models import UserDetails,PhoneBook
#import models
class showPhoneBook(db.Model):
""" class to store the user_name to db """
user_name = db.StringProperty(required=True)
class MyHandler(webapp.RequestHandler):
def get(self):
""" Query type 1 """
#p = db.GqlQuery('SELECT * FROM UserDetails WHERE user_name = :1', user_name)
""" Query type 2 """
#p = UserDetails.gql('WHERE user_name = :1', user_name)
""" Query type 3 """
p = UserDetails.all().filter('user_name = ', user_name)
result1 = p.get()
for itr1 in result1:
userId = itr.user_id
""" Query type 1 """
#q = db.GqlQuery('SELECT * FROM PhoneBook WHERE user_id = :1', userId)
""" Query type 2 """
#q = PhoneBook.gql('WHERE user_id = :1', userId)
""" Query type 3 """
q = PhoneBook.all().filter('user_id = ', userId)
values = {
'phoneBookValues': q
}
self.response.out.write(
template.render('phonebook.html', values))
def post(self):
phoneBookuserID = showPhoneBook(
user_name = self.request.get('username'))
phonebookuserID.put()
self.redirect('/')
def main():
app = webapp.WSGIApplication([
(r'.*',MyHandler)], debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == "__main__":
main()
Проблема в том, что я получаю в своих журналах сообщение об ошибке, что GAE не может импортировать класс UserDetails / phone из моделей,
<type 'exceptions.ImportError'>: cannot import name UserDetails
Traceback (most recent call last):
File "/base/data/home/apps/bulkloader160by2/1-4.337299749289926105/main.py", line 7, in <module>
from models import UserDetails,PhoneBook
и когда я удаляю from models import UserDetails,PhoneBook
и использую import models
, я получаю,
global name 'UserDetails' is not defined
Traceback (most recent call last):
File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__
handler.get(*groups)
File "/base/data/home/apps/bulkloader160by2/1-4.337300095868541686/main.py", line 19, in get
p = UserDetails.all().filter('user_name = ', user_name)
NameError: global name 'UserDetails' is not defined
Это мой файл models.py, в котором определены мои классы UserDetails и PhoneBook. Я сохранил этот файл в корневом каталоге.
#!/usr/bin/env python
from google.appengine.ext import db
#Table structure of User Details table
class UserDetails(db.Model):
user_id = db.IntegerProperty(required = True)
user_name = db.StringProperty(required = True)
mobile_number = db.PhoneNumberProperty(required = True)
#Table structure of Phone Book table
class PhoneBook(db.Model):
contact_id = db.IntegerProperty(required=True)
user_id = db.IntegerProperty(required=True)
contact_name = db.StringProperty(required=True)
contact_number = db.PhoneNumberProperty(required=True)
Будучи новичком в python, я не могу понять, почему не могу импортировать мои классы из моего файла models.py и как установить / получить имя пользователя от post(self)
до get(self)
.
Пожалуйста, прости меня, если я наивен, но твоя помощь очень ценится, если ты поможешь мне правильно настроить мой код.
Спасибо.