在app.yaml配置中匹配模式,POST 404错误

时间:2012-07-03 20:57:01

标签: python google-app-engine gql

由于main.app是默认页面,无论根目录中的index.html页面如何(遗憾的是GAE不像cgi / apache那样工作),我已经制作了表单页面main.app和查询/响应页面response.py。提交表单后,我收到错误:

  

未找到错误:/ response.py与任何模式都不匹配   应用程序配置。

application: emot13  
version: 1
runtime: python27
api_version: 1
threadsafe: true 

handlers:
-   url: /stylesheets/
    static_dir: stylesheets
-   url: / 
    script: main.app 
-   url: /.
    script: response.app 

main.app:

#!/usr/bin/env python
import cgi
import urllib
from google.appengine.ext import db
import webapp2

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("""<html>
<body>
<head>
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
</head>
<body>

    <form action="/response.py" method="post"> #also tried "response.py", no difference
    <p>First Name: <input type="text" name="name"/></p>
    <p>How are things?</p>
    <p><input type="radio" name="mood" value="good">Good</p>
    <p><input type="radio" name="mood" value="bad">Bad</p>
    <p><input type="radio" name="mood" value="fair">Fair</p>
    <p><input type="submit" name="submit" value="Process"/></p>
    </form>
</body></html>""")

app = webapp2.WSGIApplication(
                                    [("/", MainPage)],
                                    debug=True)

def main():
        application.run()

if __name__ == "__main__":
        main()

response.py:

#!/usr/bin/env python
import cgi
import time
import datetime 
import urllib
from google.appengine.ext import db
import webapp2


#model
class Visitor(db.Model):
    name = db.StringProperty(required=1)
    mood = db.StringProperty(choices=["good","bad","fair"])
    date = db.DateTimeProperty(auto_now_add=True)

class Response(webapp2.RequestHandler):
    def get(self):
        today = datetime.date.today()
        self.response.out.write("""<html><head>
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
</head>
<body>
        self.response.out.write(today.strftime(<html><body><p style='color:#3E3535'>%A, %d %B</p>)
</body></html> """)  
        localtime = time.localtime(time.time())
        mon = localtime[1] # MONTH
        h = localtime[3] # HOUR
        name = self.request.get("name")
        name = name.capitalize()
        mood = self.request.get("mood")

        # variables and if/elif statements follow; they all work so that is not the problem.

        responses = db.GqlQuery("SELECT * "
                                "FROM Visitor "
                                "ORDER BY date DESC_LIMIT 1")
        for response in responses:                                                                     
            if mood == "bad" and name != "": 
                # responses follow; they all work so that is not the problem. 

class Process(webapp2.RequestHandler):   
    def post(self):
        name = self.request.get("name")
        mood = self.request.get("mood")
        info = Visitor(name = name, mood = mood)
        info.put()
        self.redirect("/")


app = webapp2.WSGIApplication(
                                    [("/", Response),
                                    ("/", Process)], 
                                    debug=True)

# tried uncommenting this as well v v
#def response():
#    application.run()

#if __name__ == "__response__":
#        response()

帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题在于第三个处理程序,它应该是

-   url: /.*
    script: response.app 

-   url: /response.py
    script: response.app 

您发布的代码将匹配,/ a,/ b等