如何在留言簿的问候语类中添加更多构造函数示例(GAE)

2024-04-19 19:32:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Greeting类中再创建一个构造函数“content2”,但无法使用google app engine运行该应用程序。 我实在看不出这个问题。救命啊!你知道吗

此外,我不知道为什么这个代码使用

greetings = Greeting.query(
        ancestor=guestbook_key(guestbook_name)) \
        .order(-Greeting.date) \
        .fetch(10)

而不是

query = ndb.gql("SELECT * "
                        "FROM Greetings "
                       "WHERE ANCESTOR IS :1 "
                        "ORDER BY date DESC",
                         guest_name)

这是留言簿.py你知道吗

import urllib
import webapp2
import jinja2
import os
import datetime
import cgi


from google.appengine.api import users
from google.appengine.api import images
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext import ndb
from google.appengine.ext.webapp.util import run_wsgi_app


JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__) + "/templates"),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)

DEFAULT_GUESTBOOK_NAME = 'default_guestbook'
    def guestbook_key(guestbook_name=DEFAULT_GUESTBOOK_NAME):
    return ndb.Key('Guestbook', guestbook_name)


class Author(ndb.Model):
    """Sub model for representing an author."""
    identity = ndb.StringProperty(indexed=False)


class Greeting(ndb.Model):
    """A main model for representing an individual Guestbook entry."""
    author = ndb.StructuredProperty(Author)
    content = ndb.StringProperty(indexed=False)
    content2 = ndb.TextProperty(indexed=False)
    date = ndb.DateTimeProperty(auto_now_add=True)


    class MainPage(webapp2.RequestHandler):

    def get(self):
        guestbook_name = self.request.get('guestbook_name',
                                      DEFAULT_GUESTBOOK_NAME)
        greetings = Greeting.query(
            ancestor=guestbook_key(guestbook_name)) \
            .order(-Greeting.date) \
            .fetch(10)

        user = users.get_current_user()
        if user:
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'

    template_values = {
        'user': user,
        'greetings': greetings,
        'guestbook_name': urllib.quote_plus(guestbook_name),
        'url': url,
        'url_linktext': url_linktext,
    }

    template = JINJA_ENVIRONMENT.get_template('index.html')
    self.response.write(template.render(template_values))

class Guestbook(webapp2.RequestHandler):
    def post(self):
        guestbook_name = self.request.get('guestbook_name',
                                      DEFAULT_GUESTBOOK_NAME)
        greeting = Greeting(parent=guestbook_key(guestbook_name))

    if users.get_current_user():
        greeting.author = Author(
                identity=users.get_current_user().user_id(),
                email=users.get_current_user().email())

    greeting.content = self.request.get('content')
    greeting.content2 = self.request.get('content2')
    greeting.put()

    query_params = {'guestbook_name': guestbook_name}
    self.redirect('/?' + urllib.urlencode(query_params))

app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/sign', Guestbook),

], debug=True)

这是索引.html你知道吗

....
 <form action="/sign?guestbook_name={{ guestbook_name }}" method="post">
  <div><textarea name="content" rows="3" cols="60"></textarea></div>
   <div class="desc2">
   Image of cat url: 
   <div><textarea name="content2" rows="3" cols="60"></textarea></div>
   <div class="desc2">
   </div>
  <div><input type="submit" value="Submit"></div>
  </form>
 {% for greeting in greetings %}
<!----------------------------------------------------------->
  {% if greeting.author %}
    <b>{{ greeting.author.email }}
      {% if user and user.user_id() == greeting.author.identity %}
        (You)
      {% endif %}
    </b> wrote:
  {% else %}
   An anonymous person wrote:
  {% endif %}
 <!----------------------------------------------------------->

    <blockquote> {{greeting.content2}}

 <!----------------------------------------------------------->
  {{ greeting.content }}</blockquote>
{% endfor %}

....

Tags: namefromimportselfdivurlgetgoogle