SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

新创建项目 

python flask学习第2天 URL中两种方式传参 Python 第1张

 自己写个url映射到自定义的视图函数

python flask学习第2天 URL中两种方式传参 Python 第2张

 

 python flask学习第2天 URL中两种方式传参 Python 第3张

 

python flask学习第2天 URL中两种方式传参 Python 第4张

 

 

在url中传递参数

app.py

 

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'

#自定义访问返回结果
@app.route('/list/')
def article_list():
    return 'article list'

#带参数传递
@app.route('/article/<id>/')
def article(id):
    return '%s article' % id

if __name__ == '__main__':
    app.run()

 

 运行访问

python flask学习第2天 URL中两种方式传参 Python 第5张

其中<id>,尖括号是固定写法,语法为<variable>variable默认的数据类型是字符串。如果需要指定类型,

则要写成<converter:variable>,其中converter就是类型名称,可以有以下几种:

  • string: 默认的数据类型,接受没有任何斜杠/的字符串。
  • int: 整形
  • float: 浮点型。
  • path: 和string类似,但是可以传递斜杠/
  • uuid: uuid类型的字符串。
  • any:可以指定多种路径,这个通过一个例子来进行说明:

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

    以上例子中,item这个函数可以接受两个URL,一个是/article/,另一个是/blog/。并且,一定要传url_path参数,当然这个url_path的名称可以随便。

如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get('id')来获取id的值。如果是post方法,则可以通过request.form.get('id')来进行获取。

 

构造URL(url_for):

一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。

通过构建URL的方式而选择直接在代码中拼URL的原因有两点:

  1. 将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
  2. url_for()函数会转义一些特殊字符和unicode字符串,这些事情url_for会自动的帮我们搞定。

python flask学习第2天 URL中两种方式传参 Python 第6张

 

from flask import Flask,url_for

app = Flask(__name__)


@app.route('/')
def hello_world():
    #将my_list函数名以字符串方式传到url_for里面
    print(url_for('my_list'))
    return 'Hello World!'

@app.route('/list/')
def my_list():
    return 'my_list'
if __name__ == '__main__':
    app.run()

 运行,访问浏览器查看结果

python flask学习第2天 URL中两种方式传参 Python 第7张

在控制台打印出了如下结果:

python flask学习第2天 URL中两种方式传参 Python 第8张

 

 在url_for添加参数,会自动添加到url后面

python flask学习第2天 URL中两种方式传参 Python 第9张

 以后不管你原来的url如何修改,我都能通过url_for返回你修改过的正确url

 

# url_for笔记:

 

### `url_for`的基本使用:
`url_for`第一个参数,应该是视图函数的名字的字符串。后面的参数就是传递给`url`。
如果传递的参数之前在`url`中已经定义了,那么这个参数就会被当成`path`的形式给
`url`。如果这个参数之前没有在`url`中定义,那么将变成查询字符串的形式放到`url`中。
```python
@app.route('/post/list/<page>/')
def my_list(page):
return 'my list'

 

print(url_for('my_list',page=1,count=2))
# 构建出来的url:/my_list/1/?count=2
```

 

### 为什么需要`url_for`:
1. 将来如果修改了`URL`,但没有修改该URL对应的函数名,就不用到处去替换URL了。
2. `url_for`会自动的处理那些特殊的字符,不需要手动去处理。
```python
url = url_for('login',next='/')
# 会自动的将/编码,不需要手动去处理。
# url=/login/?next=%2F
```

 

### 强烈建议以后在使用url的时候,使用`url_for`来反转url。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄