我想将任何路径重定向/users到静态应用程序.以下视图应捕获这些路径并提供适当的文件(它只打印此示例的路径).这适用于/users,/users/604511和/users/604511/action.为什么路径/users/会导致404错误?
@bp.route('/users')
@bp.route('/users/<path:path>')
def serve_client_app(path=None):
return path
Run Code Online (Sandbox Code Playgroud)
dav*_*ism 106
您的/users路线缺少尾部斜杠,Werkzeug将其解释为与尾部斜杠不匹配的明确规则.添加尾部斜杠,如果url没有它,Werkzeug将重定向,或者strict_slashes=False在路径上设置Werkzeug将匹配带有或不带斜杠的规则.
@app.route('/users/')
@app.route('/users/<path:path>')
def users(path=None):
return str(path)
c = app.test_client()
print(c.get('/users')) # 302 MOVED PERMANENTLY (to /users/)
print(c.get('/users/')) # 200 OK
print(c.get('/users/test')) # 200 OK
Run Code Online (Sandbox Code Playgroud)
@app.route('/users', strict_slashes=False)
@app.route('/users/<path:path>')
def users(path=None):
return str(path)
c = app.test_client()
print(c.get('/users')) # 200 OK
print(c.get('/users/')) # 200 OK
print(c.get('/users/test')) # 200 OK
Run Code Online (Sandbox Code Playgroud)
您还可以设置strict_slashes所有网址.
app.url_map.strict_slashes = False
Run Code Online (Sandbox Code Playgroud)
但是,在大多数情况下,应避免禁用严格斜杠.文档解释了原因:
即使省略了尾部斜杠,此行为也允许相对URL继续工作,这与Apache和其他服务器的工作方式一致.此外,URL将保持唯一,这有助于搜索引擎避免两次索引相同的页面.
Nic*_*ams 37
全局禁用严格斜线; 设置url_map.strict_slashes = False如下:
app = Flask(__name__)
app.url_map.strict_slashes = False
Run Code Online (Sandbox Code Playgroud)
这样您就不必strict_slashes=False为每个视图使用.
然后你只需定义没有尾部斜杠的路线,如下所示:
bp = Blueprint('api', __name__, url_prefix='/api')
@bp.route('/my-route', methods=['POST'])
Run Code Online (Sandbox Code Playgroud)
然后/my-route,/my-route/两者都相同.
Dau*_*ros 10
这是因为Werkzeug与其他HTTP服务器的一致性.看看Flask的Quickstart文档.相关段落:
唯一的URL /重定向行为
Flask的URL规则基于Werkzeug的路由模块.该模块背后的想法是确保基于Apache和早期HTTP服务器规定的先例的美观和唯一的URL.
采取以下两条规则:
Run Code Online (Sandbox Code Playgroud)@app.route('/projects/') def projects(): return 'The project page' @app.route('/about') def about(): return 'The about page'虽然它们看起来很相似,但它们在URL定义中对尾部斜杠的使用有所不同.在第一种情况下,项目端点的规范URL具有尾部斜杠.从这个意义上说,它类似于文件系统上的文件夹.在没有尾部斜杠的情况下访问它将导致Flask重定向到带有斜杠的规范URL.
但是,在第二种情况下,URL的定义没有斜杠,而是类似UNIX类系统上文件的路径名.使用尾部斜杠访问URL将产生404"未找到"错误.
即使省略了尾部斜杠,此行为也允许相对URL继续工作,这与Apache和其他服务器的工作方式一致.此外,URL将保持唯一,这有助于搜索引擎避免两次索引相同的页面.
所以只需添加/users/路由.
| 归档时间: |
|
| 查看次数: |
23373 次 |
| 最近记录: |