2013-12-09 62 views
0

我是新的GAE和Python语言,我想做任何事情都非常简单,我有评论框(http://soltexfirstapp.appspot.com),我想要的是,检查是否有人写了一个新的在用户提交新内容之前发表评论,并通过一个框提醒他说:“评论框中有新评论,你想继续吗?!是或否?”。我对python语法感到困惑,特别是在查询的时候。谷歌应用程序引擎数据库最后登录

我的代码工作...

喊。 PY

import webapp2 
import datetime 
import time 
from google.appengine.ext import webapp 
from google.appengine.ext import db 
from google.appengine.ext.webapp \ 
import template 



class Shout(db.Model): 
    message = db.StringProperty(required=True) 
    when = db.DateTimeProperty(auto_now_add=True) 
    who = db.StringProperty() 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     shouts = db.GqlQuery('SELECT * FROM Shout ' 
'ORDER BY when ASC') 
     values = { 
      'shouts': shouts 
     } 

     # my attempt to make and print the query 
     # aaa = db.GqlQuery('SELECT * FROM Shout ' 
          'ORDER BY when DESC LIMIT 1') 
     # self.response.out.write('Query is: %s', aaa) 

     self.response.out.write(template.render('main.html',values)) 

    def post(self): 
     shout = Shout (
      message = self.request.get('message'), 
      who = self.request.get('who')) 
     shout.put() 
     self.redirect('/') 

application = webapp2.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 

main.html中

<!DOCTYPE html> 
<html> 
<head> 
    <title>Comment System</title> 
    <link rel="stylesheet" href="./css/main.css" media="screen" /> 
</head> 
<body> 

<h1>Cloud Comment System</h1> 

{% for shout in shouts %} 

<div> 
    <div id="fl"> 
     {{shout.when}} 
     from 
     {% ifequal shout.who "" %} 
      Anonymous 
     {% else %} 
     {{shout.who}} 
     {% endifequal %} 
    </div> 

    {{shout.message}} 

</div> 
{% endfor %} 

<form action="" method="post" accept-charset="utf-8"> 
    <p>From:<input type="text" name="who" value="" id="who"></p> 
    <p>Message:<input type="text" name="message" value="" id="message"></p> 
    <p><input type="submit" name="" value="comment"></p> 
</form> 

</body> 
</html> 

我真的很感激任何帮助。谢谢

回答

0

一开始,你应该总是说什么在你的代码中不起作用,错误等......在你请求帮助的时候是模糊的。

所以我会试着猜你是什么。

在您的查询中,您是由ASC订购的(日期意味着最早的产品首先)。 您应该订购DESC,最新的第一个,因为您的描述建议您想要最近的评论。

你查询应该是

shouts = db.GqlQuery('SELECT * FROM Shout ORDER BY when DESC') 

在你的代码有一些额外的'字符。

你可能不想循环并显示所有的声音,所以你应该限制结果集的提取或类似的东西。

另外,您正在提取Shout s没有发送日期(即与之比较的日期)。我从你的问题描述中假设你想要新的在特定的日期/时间之后留言。您需要确定该日期是什么,并将其用作查询中的比较。

+0

是的,你是对的,我应该说我的代码正在工作。 Iam使用ASC的顺序,最后一个是最新的,所以它对我来说是okey。 关于额外的人物,这两种方式都是正确的,请查看https://www.youtube.com/watch?v=bfgO-LXGpTM分钟6:49由谷歌开发人员制作的视频。 感谢您的“提取”提示,我现在没有考虑到这一点,但它是一个很好的理念,我会尽力实施。 我想要的是,比较用户提交评论前后的最后一个“何时”,如果提交之后和发布之前不一样,用户应该被提醒。 – soltex

+0

您可能需要为此使用异步JavaScript请求,否则如果我理解您说的正确,则需要两次提交文章 –