路由

路由映射有三种方式

  1. 使用flask.Flask.route()装饰器
  2. 使用flask.Flask.add_url_rule()函数
  3. 直接访问底层 werkzeug 路由系统flask.Flask.url_map

路径中的变量部分可以使用尖括号(/user/<username>)指定。默认,URL中的变量部分授受任何没有斜杠的字符串,但是也可以使用不同的转换器 <converter:name>

变量部分作为关键字参数传递给视图函数。

以下转换器可用:

  • string 默认类型,接受任何文件,除了\/
  • int
  • float
  • path 类似string,但是接受\/
  • uuid
  • any 可以指定多种路径

@app.route('/<any(article,blog):url_path>/')

接收用户传递的参数

  1. 第一种: 使用path的形式
  2. 第二种:使用查询字符串,通过?key=value方式传递,使用request请求上下文获取; 此方式对搜索引擎不友好

Falsk如何处理尾部斜线,即保持每个URL独特,所以适用以下规则:

  1. 如果 rule 以斜线结尾,并用用户请求没有使用斜线,将自动重定向用户请求到附加斜线的同一页面
  2. 如果 rule 不以斜线结尾,并用用户请求带有斜线,返回404

传递参数

传递参数的语法是:/<参数名>/。然后在视图函数中,也要定义同名的参数。

参数数据类型

  1. 如果没有指定具体的数据类型,那么默认就是使用string数据类型。
  2. int数据类型只能传递int类型。
  3. float数据类型只能传递float类型。
  4. path数据类型和string有点类似,都是可以接收任意的字符串,但是path可以接收路径,也就是说可以包含斜杠。
  5. uuid数据类型只能接收符合uuid的字符串。uuid是一个全宇宙都唯一的字符串,一般可以用来作为表的主键。
  6. any数据类型可以在一个url中指定多个路径。例如:
  1. @app.route('/<any(blog,article):url_path>/<id>/')
  2. def detail(url_path,id):
  3. if url_path == 'blog':
  4. return '博客详情:%s' % id
  5. else:
  6. return '用户详情:%s' % id

获取参数:

获取方式

  1. 第一种:获取使用path的形式(将参数嵌入到路径中),就是上面讲的。
  2. 第二种:获取查询字符串的方式,就是通过?key=value的形式传递的。
  3. 第三中: form data 传递参数的获取

flask 获取参数方式:

  1. request.form.get("key", type=str, defult=None) # 获取表单
  2. request.args.get("key") # 获取 get 请求参数
  3. 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的形式)。如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。

参考

https://blog.csdn.net/ling620/article/details/107562294