gpt4 book ai didi

python - Google App Engine 中的动态 URL

转载 作者:行者123 更新时间:2023-11-28 16:54:47 27 4
gpt4 key购买 nike

下午好,

我目前正在尝试在 Google AppEngine 中构建一些非常简单的东西。目标是构建一个简单的照片共享应用程序,它将连接回我的 iPhone 应用程序。这对 Python 和 Objective-C 来说都是一次学习经历。

(我作为 PHP 程序员已经有一段时间了)。

目标是创建如下所示的 URL:/img/{{ model.key.id }}

问题是,无论我如何执行 python 脚本,我要么以错误结束,要么根本无法在包含在 FOR 语句中的模板页面上显示任何内容。

我的 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))

我在类里面尝试了以下所有方法,但都以失败告终。我在 URL 中使用 key、key.name 和 key.id 尝试了它们:

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

我的网址:

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:
根据 Jonathan 的要求,以下是 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/来显示 View 页面。我已经改变了这一点,现在有了一个工作模型。但它基于 Key 而不是 key.id:

网址:

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

新网址: ('/b/image/([-\w]+)', ViewPageV2),

以下是两个屏幕截图,其中一个是 id“1”存在的证据以及当前伴随它而来的错误。

alt text http://img215.imageshack.us/img215/9123/screenshot20091130at937.png

alt text http://img215.imageshack.us/img215/2207/screenshot20091130at938.png

再次感谢大家!

最佳答案

一个简单的方法来获取它们:

photos = Photo.gql('ORDER BY __key__')

有关更多信息,请参阅 Queries on Keys在 App Engine 文档中。

你在存储你的照片吗with predefined keys

photo = Photo(key_name="xzy123")
photo.put()

然后您可以在您的 ViewPage 中检索它:

photos = [ Photo(key_name="%s" % id) ]

参见 Getting an Entity Using a Key .

最后,根据 appengine 分配的 key 检索照片并假设该 key 存在于 URL 中(例如http://host/b/img/ahByY。 ..,因此请更改您的模板以生成这种形式的 URL),使用

class ViewPage(webapp.RequestHandler):
def get(self, id):
photos = [ db.get(id) ]
...

关于python - Google App Engine 中的动态 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816529/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com