持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
9. 请求
9.1 url路径参数
从路径中获取参数是Restful接口的常用做法
示例:
@user_bp.route('/profile/<user_id>')
def get_user_profile(user_id):
return "user_profile,{}".format(user_id)
使用<>包裹参数即可,函数的参数要与路径的参数保持一致
效果:
也可以通过指定参数的类型来转换参数
@user_bp.route('/profile/<int:user_id>')
def get_user_profile(user_id):
print(type(user_id))
return "user_profile,{}".format(user_id)
通过int:参数名 的方式指定参数是一个int类型,这样函数中的参数就会被转换为int
效果:
9.2 转换器
上面的int:参数名 就是一种转换器,可以将路径中的参数转换为对应的类型
Flask提供了一部分默认的转换器
其实都是继承了BaseConverter类,这个类由Werkzeug.routing提供.
Flask默认使用的是UnicodeConverter,也就是将参数转换为str
除了上面Flask提供的默认转换器,我们也可以自定义转换器,只需要继承BaseConverter,然后再重写正则表达式即可
- 继承BaseConverter,重写正则表达式
- 注册BaseConverter
- 使用BaseConverter
示例:
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 自定义转换器类
class MobileConverter(BaseConverter):
"""
自定义手机号转换器
"""
regex = r'1[3-9]\d{9}'
# 注册mobile转换器
app.url_map.converters['mobile'] = MobileConverter
# 使用mobile转换器,注意此处使用的moible转换器名应与注册时的名字保持一致
@app.route("/user/<mobile:mobile>")
def get_user_mobile(mobile):
print(type(mobile))
return "mobile: {}".format(mobile)
效果
输入正确格式的手机号才能正常访问
同时可以看到参数的格式:
9.3 其他参数
除了路径的参数外,我们还有很多其他参数
比如url后?的参数,post请求的请求体,form等
可以通过request获取这些参数
from flask import Flask, request
app = Flask(__name__)
@app.route("/request")
def get_request_param():
print(request.data)
print(request.args.get("a"))
print(request.headers)
print(request.cookies)
print(request.files)
print(request.form)
return "ok"
从flask中导入request全局变量
在视图中可以使用request对象来获取各种参数.