동적 URL은 Google Appengine 내부입니다
-
08-07-2019 - |
문제
좋은 오후에요,
저는 현재 Google Appengine 내부에서 엄청나게 간단한 것을 구축하려고합니다. 목표는 iPhone 응용 프로그램에 다시 연결될 간단한 사진 공유 응용 프로그램을 구축하는 것입니다. 그것은 모두 파이썬과 목표 c에 대한 학습 경험입니다.
(저는 꽤 오랫동안 PHP 프로그래머였습니다).
목표, 다음과 같이 보이는 URL을 만듭니다 : /img /{{model.key.id}}
문제는 Python 스크립트를 어떻게 수행하든 오류로 끝나거나 For Statement에 래핑 한 템플릿 페이지에 표시 할 것이 없다는 것입니다.
내 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")
내 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:
Jonathan의 요청에 따라 다음은 이미지 클래스입니다.
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를 작성하려고 할 때 이것이 문제의 일부라는 것을 깨달았습니다. 나는 이것을 변경했고 이제는 작업 모델이 있습니다. 그러나 키를 기반으로합니다. key.id :
URL :
('/b/i', 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}}로 이동해야합니다.
Atlest Page가 지금 작동하고 있지만 위에서 언급 한대로 다음과 같이 페이지가 다음과 같이 보이는 것을 선호합니다 :/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),
다음은 하나의 스크린 샷이 ID "1"증명 인 "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__')
자세한 내용은 참조하십시오 키의 쿼리 앱 엔진 문서에서.
사진을 저장하고 있습니까? 사전 정의 된 키?
photo = Photo(key_name="xzy123")
photo.put()
그런 다음 뷰 페이지에서 검색 할 수 있습니다.
photos = [ Photo(key_name="%s" % id) ]
마지막으로, Appengine 제공 키를 기반으로 사진을 검색 하고이 키가 URL에 있다고 가정합니다.예를 들어, http://host/b/img/ahByY...
,이 양식의 URL을 생성하려면 템플릿을 변경하십시오)
class ViewPage(webapp.RequestHandler):
def get(self, id):
photos = [ db.get(id) ]
...