设为首页 加入收藏

TOP

python flask学习第2天 URL中两种方式传参
2018-12-06 16:09:28 】 浏览:9
Tags:python flask 学习 URL 方式

 

 

新创建项目 

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

 

 

 

 

 

在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()

 

 运行访问

其中<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会自动的帮我们搞定。

 

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()

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

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

 

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

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


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇对函数的初步了解 下一篇python pycharm2018开启debug模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }