Pergunta

Boa tarde,

Atualmente estou tentando construir algo incrivelmente simples dentro do Google AppEngine. O objetivo é construir um aplicativo de compartilhamento de fotos simples que vai ligar de volta para minha aplicação do iPhone. É tudo uma experiência de aprendizagem tanto para Python e Objective-C.

(eu fui um programador PHP há algum tempo).

O objetivo, criar de URL que se parecem com o seguinte: / Img / {{model.key.id}}

O problema é que parece não importa como eu fazer o script python, eu quer acabar com um erro ou simplesmente não ganha nada para exibição na minha página do modelo que está envolto na instrução FOR.

Minha app.yaml arquivo:

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

My Model (dentro 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)

Minha classe para visualizar a imagem da página:

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

Eu tentei todos os seguintes na minha classe, mas todos eles terminam em fracasso. Eu tentei-los com chave, key.name e key.id na 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")

Minha URL de:

application = webapp.WSGIApplication([
    ('/b/', HomePage),
    ('/b/upload', UploadPage),
    ('/b/add', MainPage),
    ('/b/img', Image),
    ('/b/img/([-\w]+)', ViewPage),
    ('/b/submit', Submission)
], debug=True)

O modelo de consulta:

{% for photo in photos %}
<img alt="" title="" src="img?img_id={{ photo.key }}" alt="main image" />
{% endfor %}

Isto parece que seria algo extremamente simples e eu sei que eu estou faltando alguma coisa, mas eu não sou apenas certo onde ele se encontra. Eu ia escrever isso em PHP, mas eu como o conceito de AppEngine e eu disse acima, é uma experiência de aprendizagem boa Python.

Como uma nota lateral, esta aplicação funciona na página inicial do site. Eu simplesmente tenho uma consulta GQL e emite o imagens muito bem, ele só falha quando eu tento ir para as páginas / img / id.

Qualquer caras conselho (e moças)? Agradecemos antecipadamente!

Atualização nº 1 :
Como pelo pedido de Jônatas, o seguinte é a classe 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")

Além disso, depois de postar isso, eu percebi que isso era parte do problema como eu estava tentando fazer / img como a imagem real e / img / para visualizar a página de visualização. Eu já mudou este e agora tem um modelo de trabalho. Mas está baseado na chave e não key.id:

URL:

('/b/i', ViewPage)

New ViewPage Classe:

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

Então ... para chegar à página View (que inclui comentários e tal), agora você tem que ir para o seguinte URL: / B / i? Img_id = {{image.key}}

Pelo menos a página está trabalhando agora, mas eu prefiro muito mais para obter a página para se parecer com o seguinte como dito acima: / B / img / {{image.key.id}}

Atualização # 2: classe ViewPage atualizado, bem como URL de:

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

Novo URL: ( '/ B / imagem / ([- \ w] +)', ViewPageV2),

A seguir estão dois screenshots com uma sendo prova de id "1" existente e o erro que está vindo com ele atualmente.

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

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

Mais uma vez, Obrigado a todos!

Foi útil?

Solução

Uma maneira simples de pegar todos eles:

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

Para saber mais, consulte consultas em chaves na documentação do App Engine.

Você está armazenando suas fotos com chaves predefinidas ?

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

Em seguida, você pode recuperá-la em sua ViewPage:

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

Obtendo uma Entidade Usando um Key .

Finalmente, para recuperar uma foto com base na sua tecla atribuída-appengine e assumindo esta chave estiver presente no URL ( ex , http://host/b/img/ahByY..., então mudar o seu modelo para gerar URLs desta forma), uso

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top