一、路由
@app.route('/index') #路由
def view_function(): #视图函数
return "hello kobe" #响应
在程序中获取路由信息
在应用中的url_map属性中保存着整个Flask应用的路由映射信息,可以通过读取这个属性获取路由信息
print(app.url_map)
如果想在程序中遍历路由信息,可以采用如下方式
for rule in app.url_map.iter_rules():
print('name={} path={}'.format(rule.endpoint, rule.rule))
二、需求
通过访问/地址,以json的方式返回应用内的所有路由信息
实现
@app.route('/')
def route_list():
rules_iterator=app.url_map.iter_rules()
return json.dumps({rule.endpoint:rule.rule for rule in rules_iterator})
三、动态路由(URL路径参数)
动态路由就是把请求参数作为路由中url的一部分
例如,有一个请求访问的接口地址为/users/123,其中123实际上为具体的请求参数,表明请求123号用户的信息。此时如何从url中提取出123的数据?
Flask不同于Django直接在定义路由时编写正则表达式的方式,而是采用转换器语法:
@app.route('/users/<user_id>')
def user_info(user_id):
print(type(user_id))
return 'hello user {}'.format(user_id)
此处的<>即是一个转换器,默认为字符串类型,即将该位置的数据以字符串格式进行匹配、并以字符串为数据类型类型、 user_id为参数名传入视图。
转换器:负责提取动态url中的id数据,并且把id数据传给视图函数
案例1:
from flask import Flask,json
#static_url_path:相当于路由
app = Flask(__name__,static_url_path='/zhilong',static_folder='static') #初始化Flask项目的服务
@app.route('/')
def hello_world():
return "hello world"
@app.route('/user/<int:user_id>') #动态路由就是把请求参数作为路由中url的一部分
def users(user_id): #转换器:负责提取动态url中的id数据,并且把id数据传给视图函数
print(type(user_id))
return "当前访问的用户是:用户{}".format(user_id)
if __name__ == '__main__':
#0.0.0.0:代表当前系统中的所有的ip地址 默认端口是5000,flask的debug模式:把错误信息显示在页面中
app.run(host='0.0.0.0',port=8080,debug=False)
访问路径为:http://192.168.112.217:8080/user/24
案例2:
from flask import Flask,json
#static_url_path:相当于路由
app = Flask(__name__,static_url_path='/zhilong',static_folder='static') #初始化Flask项目的服务
@app.route('/')
def hello_world():
return "hello world"
@app.route('/user/<int(min=1):user_id>') #动态路由就是把请求参数作为路由中url的一部分
def users(user_id): #转换器:负责提取动态url中的id数据,并且把id数据传给视图函数
print(type(user_id))
return "当前访问的用户是:用户{}".format(user_id)
if __name__ == '__main__':
#0.0.0.0:代表当前系统中的所有的ip地址 默认端口是5000,flask的debug模式:把错误信息显示在页面中
app.run(host='0.0.0.0',port=8080,debug=False)
访问路径:http://192.168.112.217:8080/user/-3,页面404,
原因@app.route(’/user/<int(min=1):user_id>’)中min=1设置为user_id最小为1,当url中传入的值小于1时,会报404
四、Flask也提供其他类型的转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74194.html