1.路由基本定义
- 指定路由地址
# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'
- 给路由传参
# 路由传递参数
@app.route('/user/<user_id>')
def user_info(user_id):
return 'hello %s' % user_id
* 路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):
return 'hello %d' % user_id
- 指定请求方式
@app.route('/demo2', methods=['GET', 'POST'])
def demo2():
# 直接从请求中取到请求方式并返回
return request.method
2.返回JSON
json字符串与字典互转
json_dict = {
"name": "laowang",
"age": 18
}
# 使用json.dumps将字典转化成JSON字符串
result = json.dumps(json_dict)
# 使用json.loads将JSON字符串转成字典
test_dict = json.loads('{"age": 18, "name": "laowang"}')
Flask给客户端返回json数据,直接使用jsonify生成一个json响应
# 返回JSON
@app.route('/demo')
def demo():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
3. 重定向
- 重定向到百度
# 重定向
@app.route('/demo5')
def demo5():
return redirect('http://www.baidu.com')
- 重定向到自己写的视图函数
- 可以填写自己 url 路径
- 可以使用 url_for 生成指定视图函数所对应的 url
@app.route('/demo1')
def demo1():
return 'demo1'
# 重定向
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
- 重定向到带有参数的视图函数
- 在 url_for 函数中传入参数
# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):
return 'hello %d' % user_id
# 重定向
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))
4.自定义状态码
如:返回 999 的状态码
@app.route('/demo6')
def demo6():
return '状态码为 999', 999
5.正则匹配路由
- 自定义转换器
# 导入转换器基类
from werkzeug.routing import BaseConverter
# 自定义正则转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]
# 添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters['re'] = RegexConverter
# 使用转换器去实现自定义匹配规则
@app.route('/user/<re("[0-9]{3}"):user_id>')
def user_info(user_id):
return "user_id 为 %s" % user_id
- to_python
- 该函数参数中的 value 值代表匹配到的值,可输出进行查看
- 匹配完成之后,对匹配到的参数作最后一步处理再返回,比如:转成 int 类型的值再返回
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]
def to_python(self, value):
return int(value)
- to_url
- 在使用 url_for 去获取视图函数所对应的 url 的时候,会调用此方法对 url_for 后面传入的视图函数参数做进一步处理
class ListConverter(BaseConverter):
"""自己定义转换器"""
regex = "(\\d+,?)+\\d$"
"""当匹配到参数之后,对参数做进一步处理之后,再返回给视图函数"""
def to_python(self, value):
return value.split(',')
"""使用url_for的时候,对视图函数传的参数进行处理,处理完毕之后以便能够进行路由匹配"""
def to_url(self, value):
return ','.join(str(v) for v in value)
---------------------------------------------------END-----------------------------------------------
---------------------------------------------------END-----------------------------------------------