Добрый день,
В настоящее время я пытаюсь создать что-то невероятно простое в Google AppEngine. Цель состоит в том, чтобы создать простое приложение для обмена фотографиями, которое будет подключаться к моему приложению iPhone. Это весь опыт обучения как для Python, так и для Objective-C.
(я давно программист PHP).
Цель - создать URL-адреса, которые выглядят следующим образом:
/ img / {{model.key.id}}
Проблема в том, что, как бы я ни делал скрипт python, мне кажется, что я либо получаю сообщение об ошибке, либо просто не вижу ничего для отображения на странице моего шаблона, заключенной в оператор FOR.
Файл My App.yaml:
application: randomwebappname
version: 1
runtime: python
api_version: 1
handlers:
- url: /media
static_dir: media
- url: /b/.*
script: beta.py
login: required
- url: /.*
script: main.py
Моя модель (внутри beta.py):
class Photo(db.Model):
author = db.StringProperty()
title = db.StringProperty()
slugline = db.StringProperty()
content = db.StringProperty(multiline=True)
coordinates = db.StringProperty()
avatar = db.BlobProperty()
date = db.DateTimeProperty(auto_now_add=True)
Мой класс для просмотра страницы изображений:
class ViewPage(webapp.RequestHandler):
def get(self, id):
template_values = {
'image': image,
}
path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
self.response.out.write(template.render(path, template_values))
Я попробовал все следующее в своем классе, но все они заканчиваются неудачей. Я попробовал их с ключом, key.name и key.id в URL:
photos = db.Query(Photo).filter('key', slug).fetch(limit=1)
photos = Photo.get_by_key_name(id)
photos = Photo.get_by_key_name(key)
key = db.Key.from_path('Photo', id)
photos = db.GqlQuery("SELECT * FROM Photo WHERE __key__ = :key", key=key)
photos = db.get(photo_key)
photos = self.request.get("id")
Мои URL:
application = webapp.WSGIApplication([
('/b/', HomePage),
('/b/upload', UploadPage),
('/b/add', MainPage),
('/b/img', Image),
('/b/img/([-\w]+)', ViewPage),
('/b/submit', Submission)
], debug=True)
Запрос шаблона:
{% for photo in photos %}
<img alt="" title="" src="img?img_id={{ photo.key }}" alt="main image" />
{% endfor %}
Кажется, это было бы что-то невероятно простое, и я знаю, что что-то упустил, но я просто не уверен, где это. Я написал бы это на PHP, но мне нравится концепция AppEngine, и я уже говорил, что это хороший опыт изучения Python.
Как примечание, это приложение работает на главной странице сайта. У меня просто есть запрос GQL, и он нормально выводит изображения, он просто не работает, когда я пытаюсь перейти на страницы / img / id.
Любой совет, ребята (и девочки)? Заранее спасибо!
ОБНОВЛЕНИЕ № 1 :
Согласно запросу Джонатана, следующий класс Image:
class Image (webapp.RequestHandler):
def get(self):
photo = db.get(self.request.get("img_id"))
if photo.avatar:
self.response.headers['Content-Type'] = "image/png"
self.response.out.write(photo.avatar)
else:
self.response.out.write("No image")
Кроме того, после публикации я понял, что это было частью проблемы, так как я пытался сделать / img как фактическое изображение и / img /, чтобы отобразить страницу просмотра. С тех пор я изменил это, и теперь у меня есть рабочая модель. Но он основан на ключе, а не на key.id:
URL:
('/b/i', ViewPage)
Новый класс ViewPage:
class ViewPage(webapp.RequestHandler):
def get(self):
image = db.get(self.request.get("id"))
template_values = {
'image': image,
}
path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
self.response.out.write(template.render(path, template_values))
Итак ... чтобы попасть на страницу просмотра (которая включает комментарии и тому подобное), вам теперь нужно перейти по следующему URL:
/ b / i? img_id = {{image.key}}
По крайней мере, страница работает сейчас, но я бы предпочел, чтобы страница выглядела следующим образом, как указано выше:
/ b / img / {{image.key.id}}
Обновление № 2: обновлен класс ViewPage, а также URL-адреса:
class ViewPageV2(webapp.RequestHandler):
def get(self, id):
images = [ db.get(id) ]
template_values = {
'image': image,
}
path = os.path.join(os.path.dirname(__file__), 'templates/view.html')
self.response.out.write(template.render(path, template_values))
Новый URL:
('/ b / image / ([- \ w] +)', ViewPageV2),
Ниже приведены два скриншота, один из которых является доказательством существования идентификатора "1" и ошибки, которая идет с ним в настоящее время.
альтернативный текст http://img215.imageshack.us/img215/9123/screenshot20091130at937.png
альтернативный текст http://img215.imageshack.us/img215/2207/screenshot20091130at938.png
Еще раз спасибо всем!