我是一个蟒蛇新手,我正在尝试按照我班上早些时候教过的内容逐步构建应用程序,但我得到的是“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)
答案 0 :(得分:9)
我只是在Udacity的在线课程后尝试使用Python,并遇到类似的问题,AppEngine无法找到post方法。
最后,事实证明根本原因是 INDENTION 。
我使用Notepad ++作为小项目的编辑器,它只是无法工作,继续抛出405错误。然后我将代码复制并粘贴到安装了Python插件的Netbean IDE中,IDE显示错误的缩进使得POST方法成为GET方法的内部方法,这在Notepad ++中找不到,尽管它看起来像是缩进的处理得很好。
答案 1 :(得分:4)
代码是正确的,工作正常。你需要到别处寻找这个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设置。
app.yaml
模块旁边有一个有效的main.py
文件?答案 2 :(得分:2)
有同样的问题。问题再次是缩进。定义时:
def post(self):
如果我使用'tab'进行缩进则无法正常工作。当我使用空格时,它做到了。错误日志没有显示。为了避免这样的问题,你可以使用python IDE,比如Wing IDE。
答案 3 :(得分:1)
我在Notepad ++中遇到了同样的问题。我用Python IDLE改变的只是用一个标签替换一些空格并且它运行良好:)
答案 4 :(得分:0)
使用Notepad ++遇到同样的问题。在我读到这篇文章之前,我花了好几天才弄清楚出了什么问题。切换到使用Python IDLE。奇迹般有效。我会回应@Aris并说使用'传统'Python IDE是最好的方法。
答案 5 :(得分:0)
我的代码遇到了同样的问题,当我重新安排处理程序的顺序时,这个问题已得到修复。通过几个不同的SO答案检查Handler定义,缩进中的错误,最后通过查看处理程序的顺序修复它。
答案 6 :(得分:0)
以我为例,当我尝试拨打电话时:我得到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
我错过的地方:
methods = ['POST']
@app.route("/test" , methods=['POST'])
然后对我有用