Как новичок в Python и App Engine, я снова должен попросить вас о помощи. Некоторое время я работал с книгой «Код в облаке», чтобы изучить основы использования App Engine. Дело в том, что я пока не очень успешен. Хотя большинство проблем, с которыми я столкнулся, связано с кодировкой / декодированием UTF-8, на этот раз у меня возникают проблемы с выполнением запросов к хранилищу данных.
Для изучения основ я воссоздал код для простого сервиса чата, доступного в главе IV вышеупомянутой книги. Ключевые элементы:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import datetime
from google.appengine.ext import db
#START: ChatMessage
class ChatMessage(db.Model):
user = db.StringProperty(required=True)
timestamp = db.DateTimeProperty(auto_now_add=True)
message = db.TextProperty(required=True)
def __str__(self):
return "%s (%s): %s" % (self.user, self.timestamp, self.message)
#END: ChatMessage
Выше я определил модель данных для сообщения
class ChatRoomPage(webapp.RequestHandler):
def get(self):
self.response.headers["Content-Type"] = "text/html"
self.response.out.write("""
<html>
<head>
<title>AppEngine Chat Room</title>
</head>
<body>
<h1>Welcome to AppEngine Chat Room</h1>
<p>(Current time is %s)</p>
""" % (datetime.datetime.now()))
messages = db.GqlQuery("SELECT * From ChatMessage ORDER BY time")
for msg in messages:
self.response.out.write("<p>%s</p>" % msg)
self.response.out.write("""
<form action="/talk" method="post">
<div><b>Name:</b>
<textarea name="name" rows="1" cols="20"></textarea></div>
<p><b>Message</b></p>
<div><textarea name="message" rows="5" cols="60"></textarea></div>
<div><input type="submit" value="Send ChatMessage"/></div>
</form>
</body>
</html>
""")
# END: MainPage
В блоке выше я создаю пользовательский интерфейс и выполняю запрос GQL для данных, которые я разместил.
И наконец:
class ChatRoomPoster(webapp.RequestHandler):
def post(self):
chatter = self.request.get("name")
msgtext = self.request.get("message")
msg = ChatMessage(user=chatter, message=msgtext)
msg.put()
self.redirect('/')
Я создаю обработчик для отправки собранных данных в хранилище данных.
Изучив книгу построчно, а также учебник Google и ряд тем на этом сайте, я до сих пор не могу понять, почему код не работает должным образом. По сути, чат не отображает прошлые сообщения. Я предполагаю, что я делаю что-то не так с доступом к хранимым данным, так как программа не выдает никаких исключений - мне не хватает идентификатора или чего-то в этом роде. Возможно, я снова упускаю что-то очень очевидное.
Буду очень признателен за вашу помощь. Заранее спасибо.