路由
路由映射有三种方式
- 使用
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' % idelse: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的形式)。如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。
