Domanda

Buon pomeriggio,

Attualmente sto cercando di creare qualcosa di incredibilmente semplice all'interno di Google AppEngine. L'obiettivo è quello di creare una semplice applicazione di condivisione di foto che si ricollegherà alla mia applicazione per iPhone. È tutta un'esperienza di apprendimento sia per Python che per Objective-C.

(Sono programmatore PHP da un po 'di tempo).

L'obiettivo è creare URL simili al seguente: / img / {{model.key.id}}

Il problema è che sembra non importa come faccio lo script Python, o finisco con un errore o semplicemente non ottengo nulla da visualizzare sulla mia pagina modello che è racchiusa nell'istruzione FOR.

Il mio file 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

Il mio modello (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)

La mia lezione per visualizzare la pagina dell'immagine:

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

Ho provato tutte le seguenti cose nella mia classe, ma tutte hanno avuto esito negativo. Li ho provati con key, key.name e key.id nell'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")

I miei URL:

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

La query modello:

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

Sembra che sarebbe qualcosa di incredibilmente semplice e so che mi manca qualcosa, ma non sono sicuro di dove si trovi. Vorrei scrivere questo in PHP, ma mi piace il concetto di AppEngine e ho detto sopra, è una buona esperienza di apprendimento in Python.

Come nota a margine, questa applicazione funziona sulla homepage del sito. Ho semplicemente una query GQL e restituisce le immagini bene, fallisce quando provo ad andare alle pagine / img / id.

Qualche consiglio ragazzi (e ragazze)? Grazie in anticipo!

AGGIORNAMENTO # 1 :
Secondo la richiesta di Jonathan, la seguente è la 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")

Inoltre, dopo aver pubblicato questo, mi sono reso conto che questo era parte del problema mentre stavo provando a fare / img come l'immagine reale e / img / per visualizzare la pagina di visualizzazione. Da allora l'ho cambiato e ora ho un modello funzionante. Ma si basa sulla chiave e non su key.id:

URL:

('/b/i', ViewPage)

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

Quindi ... per arrivare alla pagina Visualizza (che include commenti e simili), ora devi andare al seguente URL: / b / i? img_id = {{image.key}}

Almeno la pagina funziona ora, ma preferirei che la pagina assomigliasse a quanto segue: / b / img / {{image.key.id}}

Aggiornamento n. 2: classe ViewPage aggiornata e 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))

Nuovo URL:     ('/ b / image / ([- \ w] +)', ViewPageV2),

Di seguito sono riportati due screenshot con uno a prova di ID "1". esistente e l'errore che ne deriva attualmente.

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

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

Ancora una volta, grazie a tutti!

È stato utile?

Soluzione

Un modo semplice per prenderli tutti:

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

Per ulteriori informazioni, vedi Query on Keys nei documenti di App Engine.

Stai memorizzando le tue foto con chiavi predefinite ?

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

Quindi puoi recuperarlo nella tua ViewPage:

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

Vedi Ottenere un'entità usando una chiave .

Infine, per recuperare una foto in base alla sua chiave assegnata all'appengino e supponendo che questa chiave sia presente nell'URL ( ad esempio , http: // host / b / img / ahByY. .. , quindi modifica il tuo modello per generare URL di questo modulo), usa

class ViewPage(webapp.RequestHandler):
  def get(self, id):
    photos = [ db.get(id) ]
    ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top