路由
路由映射有三种方式
- 使用
flask.Flask.route()
装饰器 - 使用
flask.Flask.add_url_rule()
函数 - 直接访问底层 werkzeug 路由系统
flask.Flask.url_map
路径中的变量部分可以使用尖括号(/user/<username>
)指定。默认,URL中的变量部分授受任何没有斜杠的字符串,但是也可以使用不同的转换器 <converter:name>
变量部分作为关键字参数传递给视图函数。
以下转换器可用:
- string 默认类型,接受任何文件,除了
\/
- int
- float
- path 类似string,但是接受
\/
- uuid
- any 可以指定多种路径
@app.route('/<any(article,blog):url_path>/')
接收用户传递的参数
- 第一种: 使用path的形式
- 第二种:使用查询字符串,通过?key=value方式传递,使用request请求上下文获取; 此方式对搜索引擎不友好
Falsk如何处理尾部斜线,即保持每个URL独特,所以适用以下规则:
- 如果 rule 以斜线结尾,并用用户请求没有使用斜线,将自动重定向用户请求到附加斜线的同一页面
- 如果 rule 不以斜线结尾,并用用户请求带有斜线,返回404
传递参数
传递参数的语法是:/<参数名>/
。然后在视图函数中,也要定义同名的参数。
参数数据类型
- 如果没有指定具体的数据类型,那么默认就是使用
string
数据类型。 int
数据类型只能传递int
类型。float
数据类型只能传递float
类型。path
数据类型和string
有点类似,都是可以接收任意的字符串,但是path
可以接收路径,也就是说可以包含斜杠。uuid
数据类型只能接收符合uuid
的字符串。uuid
是一个全宇宙都唯一的字符串,一般可以用来作为表的主键。any
数据类型可以在一个url
中指定多个路径。例如:
@app.route('/<any(blog,article):url_path>/<id>/')
def detail(url_path,id):
if url_path == 'blog':
return '博客详情:%s' % id
else:
return '用户详情:%s' % id
获取参数:
获取方式
- 第一种:获取使用path的形式(将参数嵌入到路径中),就是上面讲的。
- 第二种:获取查询字符串的方式,就是通过
?key=value
的形式传递的。 - 第三中: form data 传递参数的获取
flask 获取参数方式:
request.form.get("key", type=str, defult=None) # 获取表单
request.args.get("key") # 获取 get 请求参数
request.vlaues.get("key") # 获取所有参数
获取 get 请求参数
client 请求时,参数直接显示在请求url上,可以通过以下两种方式获取。
- request.args.get(‘key’)
- request.values.get(‘key’)
获取 post 请求参数
client 在发送 Post 请求时,数据可以使用不同的 Content-Type 来发送,比如(application/json 或者 appolication/x-www-form-urlencode )等方式,
Content-Type | POSTMAN类型 | body 的内容 |
---|---|---|
application/json | raw | {“a”: 10, “b”: 20 } |
appolication/x-www-form-urlencode | x-www-form-urlencode | a=10&b=20 |
multipart/form-data | form-data | |
对于以上不对 conten-type 处理方法不一样:
Content-Type | body 处理方法 |
---|---|
application/json | 获取 jons 参数 request.get_json()[‘content’] request.josn.get(‘content) 获取 json原始参数 request.get_data() -> tyrtes |
|
| appolication/x-www-form-urlencode | request.values.get(‘key’) |
| multipart/form-data | 获取表单参数
requeset.form.get(‘key’)
requet.form[‘key’] |
| | |
页面SEO
如果你的这个页面的想要做SEO
优化,就是被搜索引擎搜索到,那么推荐使用第一种形式(path的形式)。如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。