Flask框架路由定义与参数传递详解
本文详细介绍Flask框架中路由的多种定义方式,包括请求方法限定、同路由多函数匹配及正则路由。深入解析路由传参机制,涵盖默认String类型与Int类型转换。同时演示了重定向、JSON返回及自定义状态码的实现,并介绍如何扩展自定义URL转换器以优化访问控制。
本文总结Flask框架中常用的路由定义方法,供读者参考学习。
Flask路由定义与匹配机制
Flask路由的多种定义方式
限定请求方法
通过methods参数指定路由接受的HTTP请求类型,支持同时指定多种方法。
@app.route('/',methods=['GET'])
def hello():
return '<h1>hello world</h1>'
路由匹配机制
当同一路由路径对应多个视图函数时,Flask按照代码从上到下的顺序进行匹配。
@app.route('/')
def hello():
return '<h1>hello world</h1>'
@app.route('/')
def hello_2017():
return '<h1>hello 2017</h1>'
因此,上述示例中访问根路径将返回hello函数的执行结果。
路由参数传递与类型处理
路由参数传递示例
在实际开发中,常需将相似结构的URL映射至同一视图函数,例如通过同一接口展示不同用户的个人主页。
路由捕获的参数默认视为字符串类型,可通过尖括号指定类型(如int),若不指定则保持动态字符串解析。
@app.route('/user/<int:id>')
def hello_itheima(id):
return 'hello itcast %d' %id
重定向、JSON返回与状态码处理
重定向功能示例
from flask import redirect
@app.route('/')
def hello_itheima():
return redirect('http://www.itcast.cn')
返回JSON格式数据
from flask import Flask,json
@app.route('/json')
def do_json():
hello = {"name":"stranger", "say":"hello"}
return json.dumps(hello)
自定义HTTP状态码示例
在Flask中返回特定状态码主要有两种实现途径:
- 直接return元组:可自定义状态码及错误信息,如error=666和errmsg='查询数据库异常',便于前后端数据交互。 - abort方法:仅抛出符合HTTP协议的标准异常状态码,用于手动触发异常处理。
@app.route('/')
def hello_itheima():
return 'hello itcast',666
正则路由与自定义转换器
正则表达式路由示例
Web开发中常需限制用户访问规则,此时可利用正则匹配实现访问控制,从而优化路由性能与安全性。
导入基础转换器模块
from werkzeug.routing import BaseConverter
实现自定义URL转换器
# 自定义转换器
class Regex_url(BaseConverter):
def __init__(self,url_map,*args):
super(Regex_url,self).__init__(url_map)
self.regex = args[0]
app = Flask(__name__)
# 将自定义转换器类添加到转换器字典中
app.url_map.converters['re'] = Regex_url
@app.route('/user/<re("[a-z]{3}"):id>')
def hello_itheima(id):
return 'hello %s' %id
Flask内置的几种标准转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
希望上述内容能协助读者更好地掌握Flask框架的路由配置与程序设计技巧。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









