[英]405 for Google App Engine - The method POST is not allowed for this resource — adding to Boilerplate
[英]What is producing “405 Method Not Allowed” in this python code (google app engine)?
我是一个 Python 新手,我正在尝试构建一个应用程序,一步一步复制我之前在课堂上教过的内容,但是我收到了“405 Method Not Allowed”错误。
教授的做法是这样的:
这是我所做的:
有人能指出我下面代码中这个错误“405 Method Not Allowed”的原因是什么? 我看不出我做的和教授教的有什么区别。 缩进也可以(这里是 main.py 文件https://docs.google.com/open?id=0B8TXLR_e14aCVDFfdlpYSU9DNDg )。
在此先感谢您的帮助!
这是我的代码:
form= """
<html>
<head>
<title>Unit 2 Rot 13</title>
</head>
<body>
<h2>Enter some text to ROT13:</h2>
<form method="post" action="/rot13">
<textarea name="text"
style="height: 100px; width: 400px;"></textarea>
<br>
<input type="submit">
</form>
</body>
</html> """
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write(form)
class Rot13Handler(webapp2.RequestHandler):
def post(self):
text = self.request.get("text")
self.response.out.write(text)
app = webapp2.WSGIApplication([('/', MainHandler), ('/rot13', Rot13Handler)],
debug=True)
我只是按照 Udacity 的在线课程尝试 Python,但遇到了 AppEngine 无法找到 post 方法的类似问题。
最后发现根本原因是INDENTION 。
我用 Notepad++ 作为小项目的编辑器,但它无法工作,一直抛出 405 错误。 然后我将代码复制并粘贴到安装了 Python 插件的 Netbean IDE,IDE 显示错误的缩进使 POST 方法成为 GET 方法的内部方法,在 Notepad++ 中找不到,尽管它看起来像缩进处理得很好。
代码是正确的,工作正常。 您需要在别处寻找此 405 错误的解释。
编辑
你有没有发布你的实际代码? 当您单击提交时,下面的代码会给您一个 405 Method not Allowed 错误。 它有一个微妙的错误...... :)
import webapp2
form= """
<html>
<head>
<title>Unit 2 Rot 13</title>
</head>
<body>
<h2>Enter some text to ROT13:</h2>
<form method="post" action="/rot13">
<textarea name="text"
style="height: 100px; width: 400px;"></textarea>
<br>
<input type="submit">
</form>
</body>
</html> """
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write(form)
class Rot13Handler(webapp2.RequestHandler):
# Error here: mistyped get instead of post :)
def get(self):
text = self.request.get("text")
self.response.out.write(text)
app = webapp2.WSGIApplication([('/', MainHandler),
('/rot13', Rot13Handler)],
debug=True)
如果您的路由输入错误,也会发生同样的情况,例如:
app = webapp2.WSGIApplication([('/', MainHandler),
('/rot13', MainHandler)],
debug=True)
编辑(谢谢,@Nick Johnson)
如果上述方法均无效,请考虑从头开始并检查您的 GAE 设置。
main.py
模块旁边是否有有效的app.yaml
文件?有同样的问题。 问题又是缩进。 定义时:
def post(self):
如果我使用 'tab' 进行缩进,则它不起作用。 当我使用空格时,它确实如此。 错误日志什么也没显示。 为避免此类问题,您可以使用 python IDE,如 Wing IDE。
我在 Notepad++ 上遇到了同样的问题。 我在 Python IDLE 中唯一改变的就是用制表符替换了一些空格,并且效果很好:)
使用 Notepad++ 遇到了同样的问题。 我花了几天的时间才弄清楚出了什么问题,直到我读到了这篇文章。 改用 Python IDLE。 奇迹般有效。 我会回应@Aris 并说使用“传统”Python IDE 是最好的方法。
我的代码遇到了同样的问题,当我重新排列处理程序的顺序时,这个问题得到了解决。 经历了几个不同的 SO 答案,检查处理程序定义、缩进中的错误,最后在查看处理程序的顺序时修复它。
就我而言,当我尝试拨打电话时:我收到了 405 不允许的方法
@app.route("/test")
def test():
print('inside test')
if request.method == 'POST':
# some code
res = json.dumps({ 'success': True, 'message': db_res }), 200, headers
return res
我错过的地方:
方法=['POST']
@app.route("/test" , methods=['POST'])
然后它对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.