Flask中传递参数详解: 项目名称:url_view_demo
### 传递参数: 传递参数的语法是:`/<参数名>/`。然后在视图函数中,也要定义同名的参数。例如: @app.route('/article/<string:test>/') # 传递的参数名是test,因此就需要在函数的形参中定义同名的参数test def test_article(test): return 'test_article:{}'.format(test) ### 参数的数据类型: 1. 如果没有指定具体的数据类型,那么默认就是使用`string`数据类型。 2. `int`数据类型只能传递`int`类型。 限制参数:<int:article_id>,如果在浏览器中访问:http://127.0.0.1:5000/p/11111.0/
那就找不到报not found错误,因为我限制了是整形,你现在是浮点型,同理,如果你是浮点型,我使用 整形访问,那就又访问不到了 3. `float`数据类型只能传递`float`类型。 4. `path`数据类型和`string`有点类似,都是可以接收任意的字符串, 但是`path`可以接收路径,也就是说可以包含斜杠。 5. `uuid`数据类型只能接收符合`uuid`的字符串。`uuid`是一个全宇宙都唯一的字符串, 一般可以用来作为表的主键。
关于path数据类型,在主文件中定义如下的代码:
@app.route('/article/<path:test>/') path数据类型 def test_article(test): return 'test_article:{}'.format(test)
前端访问:这种情况类似于string类型
我们在地址中加入/,看结果如何:
由上面的结果可知:path类型支持在URL地址中带斜杠/,他不会报错!
如果是string数据类型,那会直接报错,如下:
接下来我们通过查询字符串的形式来传递参数,就是通过`?key=value`的形式传递的。
# 通过问号的形式传递参数,例如百度:http://127.0.0.1:5000/d/?wd=%E7%AE%80%E4%B9%A6&pn=20
@app.route('/d/') def d(): wd = request.args.get("wd") page_number = request.args.get("pn") return "通过字符串查询的关键字为:{}, 页码为:{}".format(wd, page_number)
针对这种情况,服务端使用reqeust.args来获取问号形式的查询字符串中参数的值。
针对uuid的形式,我们先生成一个uuid:
import uuid
print(uuid.uuid4())
代码如下:
@app.route('/u/<uuid:user_id>') def user_detail(user_id): return "用户个人中心页面:{}".format(user_id)
uuid:9b1deee5-4035-4398-b5f9-54ba28c94566
然后在浏览器中访问:
【05】最后来看看any类型:
6. `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
我们来总结下:
### 接收用户传递的参数: 1. 第一种:使用path的形式(将参数嵌入到路径中),就是上面讲的。 2. 第二种:使用查询字符串的方式,就是通过`?key=value`的形式传递的。 ```python @app.route('/d/') def d(): wd = request.args.get('wd') return '您通过查询字符串的方式传递的参数是:%s' % wd ``` 3. 如果你的这个页面的想要做`SEO`优化,就是被搜索引擎搜索到,那么推荐使用第一种形式(path的形式)。 如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。 例如CMS系统是内部人员使用,所以使用?传递参数的方式即可。例如简书的地址: https://www.jianshu.com/p/e6fd2fc757d6