Getting display after form post submission in Google App Engine in Python
Content of page not displayed after a form post, but displayed when directly viewing the page. I have a Python App Engine piece of code that is attempting to direct to a ne开发者_如何学Pythonw page and display a programatically defined (i.e. in the code, not html) piece of text. However up pressing the submit button of the form I get a blank page and no error messages.
I've been using the Google App engine code examples. The form just just takes some options, but I'm not even collecting anything from it and should go to the new page, however it does not and I cannot find out where it might be going wrong.
I have
class MainPage(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
and
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
application = webapp.WSGIApplication(
[('/', MainPage),
('/confirm', Confirm)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
and in the HTML: index.html
<html>
<body>
<form action="/confirm" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Submit"></div>
</form>
</body>
</html>
I want to know why if I submit the form, I do not get the You have confirmed! message, but if I go to /confirm I do. Thanks.
Your code runs pretty smoothly; probably you have not implemented correctly the post
method for some weird indentation error (this would explain the 405 error).
Copy and paste my application.py
and try again:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, {}))
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
application = webapp.WSGIApplication(
[('/', MainPage),
('/confirm', Confirm)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
I would test your assertion that POST to Confirm works correctly using curl to post something:
curl -v0 -F content=blah -F submit=submit 'http://my-app.appspot.com/confirm'
If that works fine, then I would use HttpFox (a FF extension) to see what's sent to the server.
Seems you're either not submitting what you think you are, or you're POST handler is not working as you think it is. Both of the above steps should help clarify which is which.
@Rusty i think you should either change your form submission method to get or post and make sure you have written the same in the application.py as well. or you can do something like this
class Confirm(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('You have confirmed!')
def get(self):
return Confirm.post(self)
精彩评论