参数
- 路径参数
- 位置参数
- 关键字参数
- 请求参数
- get参数在路径中? 之后
- post参数在请求体
flask中参数
- 都是关键字参数,没有位置参数
- 默认标识是尖括号
- name需要和对应的视图函数的参数名字保持一致
vi testParams.py
from flask import Flask
app = Flask(__name__)
@app.route("/params/<heh>/")
def params(heh):
print(type(heh))
print(heh)
return "Test Params"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
运行后访问http://127.0.0.1:5000/params/lala/
打印结果为: <class ‘str’> lala
可见传递参数默认为字符串类型
- 参数允许有默认值
- 如果有默认值,那么在路由中,不传输参数也是ok的
- 如果没有默认值,参数在路由中必须传递
@app.route("/params/")
def params(heh="123123"):
print(type(heh))
print(heh)
return "Test Params"
- 默认参数类型是字符串
- 参数语法 <converter: var>
- converter类型
- string 前面所说的默认,会将斜线认为是参数分割符
- int 约束,限制参数的类型
- float
- path 接收到的数据格式是字符串,特性会将斜线认为是一个字符
- uuid 约束,限制参数为uuid类型
- any 任意一个,列出的元组中的任意一个
- 和枚举一个意思
uuid 演示
@app.route("/getuuid/")
def get_uuid():
return str(uuid.uuid4())
@app.route("/get/<uuid:name>/")
def get(name):
print(type(name))
print(name)
return "Test UUID"
访问http://127.0.0.1:5000/getuuid/随机获取一个uuid:53e8fccf-f238-40a6-af25-1966ad2ea73c
再访问http://127.0.0.1:5000/get/53e8fccf-f238-40a6-af25-1966ad2ea73c/可以看到终端输出
any 演示
@app.route("/any/<any(c, d, e):name>/")
def any(name):
print(type(name))
print(name)
return "Test Any"
可访问的地址只有“http://127.0.0.1:5000/any/c/“,“http://127.0.0.1:5000/any/d/“,“http://127.0.0.1:5000/any/e/“
- 请求方法
- 请求方法并不是像django一样,全部支持的
- 是需要自己配置请求方法
- methods=[‘GET’, ‘POST’, ‘DELETE’]
@app.route("/params/<heh>/", methods=['GET']) #只可使用GET请求
- 请求工具(测试使用)
- postman
- httpie
- 反向解析
- url_for 根据endpoint获取到对应的路径
- endpoint默认就是 函数的名字
- 如果有参数 url_for(‘函数名’, key=value, key=value)
- 反向解析在模板中也可以直接使用
from flask import url_for
@app.route("/url/")
def url():
url = url_for("get_uuid")
print(url)
print(type(url))
anyurl = url_for("any", name="c")
print(anyurl)
return "Test UrlFor"
访问http://127.0.0.1:5000/url/
在html模板中可以直接使用
<a href="{{ url_for("get_uuid") }}">get uuid</a>
源码地址:https://github.com/565785929/StudyFlask/tree/master/d04