URL与函数的映射

从之前的helloworld.py⽂件中,我们已经看到,⼀个URL要与执⾏函数进⾏映
射,使⽤的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则
来进⾏更加详细的映射,⽐如现在要映射⼀个⽂章详情的URL,⽂章详情的URL
是/article/id/,id有可能为1、2、3…,那么可以通过以下⽅式

  1. from flask import Flask
  2. app = Flask(__name__)
  3. @app.route('/article/<id>/')
  4. def article(id):
  5. return '%s article detail' % id

其中,尖括号是固定写法,语法为,variable默认的数据类型是字符串。如果需
要指定类型,则要写成converter:variable,其中converter就是类型名称,可以
有以下⼏种 :

  • string: 默认的数据类型,接受没有任何斜杠/的字符串。
  • int: 整形
  • float: 浮点型。
  • path: 和string类似,但是可以传递斜杠/。
  • uuid: uuid类型的字符串。
  • any:可以指定多种路径 ```python from flask import Flask app = Flask(name)

@app.route(‘/article//‘) def article(id): print(type(id)) # int return ‘%s article detail’ % id

@app.route(‘//‘) def item(url_path): return url_path

  1. 如果不想定制⼦路径来传递参数,也可以通过传统的?=的形式来传递参数,例 <br />如:/article?id=xxx,这种情况下,可以通过request.args.get('id')来获取id <br />值。如果是post⽅法,则可以通过request.form.get('id')来进⾏获取。
  2. ```python
  3. from flask import Flask, request
  4. app = Flask(__name__)
  5. @app.route('/article/')
  6. def article():
  7. print(request.args.get('id'))
  8. return '%s article detail' % str(id)

构造URL

进行反转,把函数名字转成URL

  1. url_for("函数名字", 参数1, 参数2)
  2. 如果参数2,在函数中不存在 会以?形式当做参数
  1. from flask import Flask, url_for
  2. app = Flask(__name__)
  3. @app.route("/")
  4. def index():
  5. # /article/2/ 只传一个aid
  6. # 根据函数的名字,进行反转 得到函数对应的路由 重定向
  7. # /article/1000/?page=2&t=123
  8. print(url_for("article_list", aid=1000, page=2, t=123))
  9. return "hello world"
  10. # http://127.0.0.1:5000/article/2/
  11. @app.route("/article/<aid>/")
  12. def article_list(aid):
  13. return "article list {}".format(aid)
  14. @app.route("/detail/<did>/")
  15. def article_detail(did):
  16. print(url_for("index"))
  17. # /?next=%2F
  18. # print(url_for("index", next="/"))
  19. return "article detail {}".format(did)