我正在为我编写的Python程序制作Web API,我正在复制教程。
这是API代码:
#!flask/bin/python
from flask import Flask
from flask import make_response
from flask import request
import requests
import json
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True)
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)
@app.route('/5492946838458/index.html', methods=['POST'])
def create_task():
if not request.json or not 'key' in request.json or not 'name' in request.json or not 'text' in request.json or not 'pack' in request.json:
abort(400)
if 'title' in request.json and type(request.json['title']) != unicode:
abort(400)
if 'description' in request.json and type(request.json['description']) is not unicode:
abort(400)
task = {
'key': request.json['key'],
'name': request.json['name'],
'text': request.json['text'],
'pack': request.json['pack']
}
return (200)
这是我要发送到的网址
https://my.websites.url.here/5492946838458/
以及我发送的json数据
{
"key": "key",
"name": "name",
"text": "text",
"pack": "pack"
}
我得到的标题
date: Fri, 04 Sep 2020 17:48:30 GMT
content-length: 0
vary: Origin
accept-ranges: bytes
allow: GET, HEAD, OPTIONS
为什么会发生这种情况以及如何解决这个问题
我看到两个问题...
此行不应浮动在代码中间。应该在最后:
if __name__ == '__main__':
app.run(debug=True)
在当前位置,如果您使用
python app.py
执行应用程序,应用程序将在此时运行。在它之前的路由 (index
) 将可用,但是在它之后声明的路由 (create_task
) 将不可用(直到您终止服务器 - 当添加后一个路由时,就在 python
进程停止之前)。
如果使用
flask run
执行,则不会出现此问题,因为 if
子句为 False。
@app.route('/5492946838458/index.html', methods=['POST'])
对于这个您可能想要:
@app.route('/5492946838458/', methods=['POST'])
这声明了该路由的 URL。
现在对
https://my.websites.url.here/5492946838458/
的请求应该返回成功的响应。对 /5492946838458
的请求将返回 308 重定向到带有尾部斜杠的请求。
我不确定你之前为什么会得到
405
。也许您的代码中的某处有另一条路线接受请求,但不是方法。