路由定义的基本方式
请求方式限定
使用methods参数指定可接受的请求方式,可以是多种
@app.route('/', methods=["GET", "POST"])
def hello_world():
return 'Hello World!'
给请求做判断
@app.route("/", methods=["GET", "POST"])
def hello_world():
if request.method == "GET":
return ""
elif request.method == "POST":
return ""
else:
return ""
给路由传参示例
有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的订单信息。
路由传递的参数默认当做string处理
# 使用同一个视图函数,来显示不同用户的订单信息
# <> 定义路由的参数,<>内需要起一个名字
@app.route("/orders/<order_id>")
def get_order_id(order_id):
# 需要在视图函数的()内填入参数名,那么后面的代码才能去使用
# 参数类型默认是字符串,unicode
print(type(order_id))
return "order_id %s" % order_id
# 使用同一个视图函数,来显示不同用户的订单信息
# <> 定义路由的参数,<>内需要起一个名字
# 给参数做限定为int类型
@app.route("/orders/<int:order_id>")
def get_order_id(order_id):
# 需要在视图函数的()内填入参数名,那么后面的代码才能去使用
# 参数类型为int
print(type(order_id))
return "order_id %s" % order_id
自定义转换器
如果遇到需要匹配提取 /sms_codes/18512345678 中的手机号数据, Flask内置的转换器
此时需要自定义转换器。
自定义转换器主要做3步
1 创建转换器类,保存匹配时的正则表达式
from werkzeug.routing import BaseConverter
class MobileConverter(BaseConverter):
"""手机号格式"""
regex = r'1[3-9]\d{9}'
注意 regex 名字固定
2 将自定义的转换器告知FLASK 应用
app = Flask(__name__)
#将自定义转换器添加到转换器字典中,并指定转换器使用时的名字为:mobile
app.url_map.converters["mobile"] = MobileConverter
3 在使用转换器的地方定义使用
@app.route('/sms_codes/<mobile:mob_num>')
def send_sms_code(mob_num):
return "send sms code to {}".format(mob_num)