路由基本定义
指定路由地址:
-
指定访问路径为 demo1,http://127.0.0.1:5000/demo1
@app.route('/demo1') def index(): return 'demo1'
给路由传参:
-
路由传参,http://127.0.0.1:5000/user/abc
@app.route('/user/<user_id>') def user_info(user_id): return 'hello %s' % user_id
路由传递的参数默认当做 string 处理,也可以指定参数的类型
-
指定路由传递参数类型(int),http://127.0.0.1:5000/user/123
@app.route('/user/\<int:user_id\>') def user_info(user_id): return 'hello %d' % user_id
尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数。
指定请求方式:
默认请求方式:GET OPTIONS(自带) HEAD(自带)
@app.route('/demo2', methods=['GET', 'POST'])
def demo2():
# 直接从请求中取到请求方式并返回
return request.method
视图常用逻辑
return返回JSON
给客户端返回JSON数据,直接使用jsonify生成一个JSON的响应
\# 返回JSON 类型数据
@app.route('/demo4')
def demo4():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议,如果是 JSON 需要指定 content-type:application/json
return重定向:
- 1 redirect
@app.route('/demo5')
def demo5():
return redirect('http://www.baidu.com')
- 2 url_for
\#demo1路径必须存在
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
- 3 url_for带参数,(’视图函数‘,形参=值)
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))
自定义状态码:
可以实现自定义状态码:status code: 666
@app.route('/demo6')
def demo6():
return '状态码为 666', 666
正则匹配路由:
正则匹配路由,限制用户访问的参数。
具体实现步骤为:
- 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
- 自定义转换器:自定义类继承于转换器基类
- 添加转换器到默认的转换器字典中
- 使用自定义转换器实现自定义匹配规则
代码实现
- 1 导入转换器基类
from werkzeug.routing import BaseConverter
- 2.1 自定义转换器
\# 自定义正则转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]
- 2.2 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
app = Flask(__name__)
app.url_map.converters['re'] = RegexConverter
- 3 自定义匹配规则(当前此处定义的规则是:3位数字)
@app.route('/user/\<re("[0-9]{3}"):user_id\>')
def user_info(user_id):
return "user_id 为 %s" % user_id
运行测试:http://127.0.0.1:5000/user/123 ,如果访问的url不符合规则,会提示找不到页面
系统自带转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter, 注意默认和字符串都是UnicodeConverter
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter, }
系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。
PostMan测试工具:
PostMan 模拟网页 HTTP 请求的 Chrome 插件,可以对路由和视图函数进行调试,基本操作就是会使用它。