URL与函数的映射
从之前的helloworld.py⽂件中,我们已经看到,⼀个URL要与执⾏函数进⾏映
射,使⽤的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则
来进⾏更加详细的映射,⽐如现在要映射⼀个⽂章详情的URL,⽂章详情的URL
是/article/id/,id有可能为1、2、3…,那么可以通过以下⽅式
from flask import Flask
app = Flask(__name__)
@app.route('/article/<id>/')
def article(id):
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/
@app.route(‘/
如果不想定制⼦路径来传递参数,也可以通过传统的?=的形式来传递参数,例 <br />如:/article?id=xxx,这种情况下,可以通过request.args.get('id')来获取id的 <br />值。如果是post⽅法,则可以通过request.form.get('id')来进⾏获取。
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/article/')
def article():
print(request.args.get('id'))
return '%s article detail' % str(id)
构造URL
进行反转,把函数名字转成URL
url_for("函数名字", 参数1, 参数2)
如果参数2,在函数中不存在 会以?形式当做参数
from flask import Flask, url_for
app = Flask(__name__)
@app.route("/")
def index():
# /article/2/ 只传一个aid
# 根据函数的名字,进行反转 得到函数对应的路由 重定向
# /article/1000/?page=2&t=123
print(url_for("article_list", aid=1000, page=2, t=123))
return "hello world"
# http://127.0.0.1:5000/article/2/
@app.route("/article/<aid>/")
def article_list(aid):
return "article list {}".format(aid)
@app.route("/detail/<did>/")
def article_detail(did):
print(url_for("index"))
# /?next=%2F
# print(url_for("index", next="/"))
return "article detail {}".format(did)