我正在使用无法更改固件的硬件机器。我应该从他们那里做一个服务器,我唯一可以配置的就是IP和端口。
对于初学者来说,我在Flask中制作了以下服务器
from flask import Flask
app = Flask(__name__)
@app.route("/" ,methods=['GET', 'POST', 'DELETE', 'PATCH'])
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000)
我遇到308错误:
然后,我使用以下通用网址方法来帮助解决我的情况。
from flask import Flask
app = Flask(__name__)
@app.route("/", defaults={"path": ""},methods=['GET', 'POST', 'DELETE', 'PATCH'])
@app.route("/<string:path>",methods=['GET', 'POST', 'DELETE', 'PATCH'])
@app.route("/<path:path>",methods=['GET', 'POST', 'DELETE', 'PATCH'])
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000)
但是,我仍然遇到相同的错误:
答案 0 :(得分:0)
由于我还没有50个声望,所以我无法发表评论,所以我将其留在这里。
您要对路径使用path变量:
“创建为所有包含/的URL服务的Catch-All函数的一种简单方法是链接两个路由过滤器。一个用于根路径'/',另一个用于路径占位符。
我们不能只使用一个包含路径占位符的路由过滤器,因为每个占位符必须至少捕获一个字符。”
from flask import Flask
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
return 'You want path: %s' % path
if __name__ == '__main__':
app.run()
% curl 127.0.0.1:5000 # Matches the first rule
You want path:
% curl 127.0.0.1:5000/foo/bar # Matches the second rule
You want path: foo/bar
答案 1 :(得分:0)
如果您坚持使用空路由,只需将 app.route 设置为 strict_slashes=False
,如下所示:
from flask import reqeust
@app.route('/', methods = ['GET','POST','DELETE', 'PATCH'],
strict_slashes=False)
def hello():
return f"hello, {request.method}"
由于 Flask
使用 werkzeug.routing.Rule
,默认情况下启用 strict_slashes
,因此访问没有尾部斜杠的分支 URL 将重定向到附加斜杠的 URL。这会导致响应 308(永久重定向)。