“关键字不能是表达式”将数据发布到数据存储区

时间:2012-06-14 15:00:43

标签: python google-app-engine

语法错误:

msg = "keyword can't be an expression"
      offset = None
      print_file_and_line = None
      text = 'data = data(name and mood=self.request.POST)\n'

我在这里发布了大部分代码,即使我的数据存储区有一个名为“情境,日期属性”的“访问者”实体(index.yaml文件显然正常工作),表单数据也没有提交给数据存储区在控制台查询中很明显:

SELECT name FROM Visitor
              ^ SyntaxError: invalid syntax

以下的最后一部分是我猜测如何修改Google教程。我知道这是错的,但希望你看到我正在做的事情:

class Visitor(db.Model):

    name = db.StringProperty(required=1)
    mood = db.StringProperty(choices=["Good","Bad","Fair"]) # this is Radio button
    date = db.DateTimeProperty(auto_now_add=True)

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write("""<html><body>
        <form action="/" method="post">
            <p>First Name: <input type="text" name="name"/></p>   # text
            <p><input type="radio" name="mood" value="good">Good</p>  # radio button v 
            <p><input type="radio" name="mood" value="bad">Bad</p>
            <p><input type="radio" name="mood" value="fair">Fair</p>
            <p><input type="submit"value="Process"></p>
        </form></body></html>""")  
    def post(self):
        name = self.request.get("name")
        mood = self.request.get("mood")
        data = data(name and mood=self.request.POST) # < < ^ ^ PROBLEM(S)
        if data.is_valid():
            Visitor = data.save(commit=False)
            Visitor.put()

提前感谢帮助实现预期目标。

1 个答案:

答案 0 :(得分:2)

正如你所指出的那样,你的问题就在这一行

data = data(name and mood=self.request.POST) 

语法错误是因为您尝试在表达式中进行赋值。

mood=self.request.POST
#"name and mood" is a logical expression which will return 
#"mood" if bool(name) is True and bool(mood) is True
#Otherwise it returns the first False value.
data=data(name and mood)  

当然,这也很有趣,因为数据可能是一个可调用的,你用它的结果取而代之......

此外,数据没有在任何地方定义(我们可以看到)......所以当我们摆脱一个语法错误时,你的脚本中可能存在(可能)其他问题。