我有一些URL路径,想检查它们是否指向Flask应用程序中的URL规则。我如何使用Flask检查这个?
from flask import Flask, json, request, Response
app = Flask('simple_app')
@app.route('/foo/<bar_id>', methods=['GET'])
def foo_bar_id(bar_id):
if request.method == 'GET':
return Response(json.dumps({'foo': bar_id}), status=200)
@app.route('/bar', methods=['GET'])
def bar():
if request.method == 'GET':
return Response(json.dumps(['bar']), status=200)
test_route_a = '/foo/1' # return foo_bar_id function
test_route_b = '/bar' # return bar function
3条答案
按热度按时间r3i60tvu1#
app.url_map
存储将规则与端点Map和匹配的对象。app.view_functions
将端点Map到视图函数。调用
match
将url与端点和值进行匹配。如果没有找到路由,则会引发404,如果指定了错误的方法,则会引发405。你需要方法和url来匹配。重定向被视为异常,您需要递归地捕获和测试这些异常以找到视图函数。
可以添加不Map到视图的规则,在查找视图时需要捕获
KeyError
。还有更多的选项可以传递给
bind
来影响如何进行匹配,有关详细信息,请参阅文档。view函数也可能引发404(或其他)错误,因此这只能保证url与视图匹配,而不能保证视图返回200响应。
cuxqih212#
除了@davidism的答案(flask的核心开发者)。注意,如果你想发现flask app处理的当前url的view函数。你可以使用flask的
Request
对象:Flask中默认使用的请求对象。记住匹配的端点和视图参数。
以及
Flask.view_functtions
,其中::将端点名称Map到视图函数的字典。#:要注册视图函数,请使用:meth:
route
装饰器。ngynwnxp3#
为了补充这里给出的其他答案,对于任何想要为Flask的基于类的视图做这件事的人来说,你会看到
app.view_functions
返回基类View的view方法,而不是你定义视图的具体类:解决方案只是一个额外的步骤,即调用
view_class
成员:要处理视图函数和类的混合,可以执行以下操作: