gpt4 book ai didi

python - Pycharm 和 Google App Engine 渲染请求发布数据的问题

转载 作者:行者123 更新时间:2023-11-30 23:39:24 27 4
gpt4 key购买 nike

我是一名应用程序开发新手。我使用 pycharm 进行编码,并将其与 google 应用引擎链接起来,这样我就可以使用 JetBrains 提供的方便的运行和调试功能来测试我的代码。我在同一目录中有一个名为validation.py的单独文件,其中包含真正的valid_month、valid_day、valid_year函数。我遇到的问题是这样的(此时我很困惑)。这段代码早些时候生成了一个显示表单数据的 html 页面(我认为这与我的 get(self) 函数被更改为 write_form 有关,因为它不是更早的),但即使表单数据是显示后,我将输入用户所需的信息,该页面只会像“获取”一样操作数据并将数据放入 URL 中。现在,使用 write_form 我什至没有生成页面,我只是收到错误。请记住,我是通过 CS253 Udacity Web 开发类(class)执行此操作的,因此我的代码模仿了该类(class)的代码,但我使用的是 webapp 而不是 webapp2。

这是代码

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from validation import valid_day, valid_month, valid_year

months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
month_abbvs = dict((m[:3], m) for m in months)

def valid_month(user_month):
return True

def valid_day(user_day):
return True

def valid_year(user_year):
return True


form ="""
<form method="post">
What is your birthday?
<br>
<label>Month <input type="text" name="month" value="%(month)s"></label>
<br>
<label>Day <input type="text" name="day" value="%(day)s"></label>
<br>
<label>Year <input type="text" name="year" value="%(year)s"></label>
<div style="color:red">%(error)s</div>
<br>
<br>
<input type="submit">
</form>
"""



class OTWHandler(webapp.RequestHandler):

def write_form(self, error=""):
self.response.out.write(form % {"error": error})

def get(self):
self.write_form()

def post(self):
user_month = valid_month(self.request.get('month'))
user_day = valid_day(self.request.get('day'))
user_year = valid_year(self.request.get('year'))


if not (user_month and user_day and user_year):
self.write_form("Invalid entry")
else:
self.response.out.write("That is totally a valid day!")


def main():
app = webapp.WSGIApplication([('/', OTWHandler)], debug=True)
util.run_wsgi_app(app)

这是错误

Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 1102, in __call__
return handler.dispatch()
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "C:\Program Files\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "C:\Users\Madrigal\PycharmProjects\OTW\otw.py", line 42, in get
self.write_form()
File "C:\Users\Madrigal\PycharmProjects\OTW\otw.py", line 39, in write_form
self.response.out.write(form % {"error": error})
KeyError: 'month'

非常感谢您的回复。谢谢。

最佳答案

问题与您传递到 form 字符串中的字典有关。如果您查看表单,您将看到类似%(month)s 的值 - 这意味着表单期望将名为 month 的参数传递给它,并且它将返回相应的值。现在的问题是,您(我假设)向页面发出 GET 请求,当发生这种情况时,您仅传递给 form 的值字典有一个值 - error。因此,当 form 查找 month 时,它找不到任何内容并返回 KeyError。

一个简单的例子可以做到这一点:

def write_form(self, error=""):
test_date = datetime.date(2012, 11, 26)
my_values = {
'month': test_date.month,
'day': test_date.day,
'year': test_date.year,
'error': error
}
self.response.out.write(form % my_values)

最好将日期参数作为函数的一部分,但希望这个概念有意义 - 对于 form 中的每个 %(something) 格式的字符串>,您需要传入相应的键/值参数,以便它知道要加载什么。

关于python - Pycharm 和 Google App Engine 渲染请求发布数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com