【二】Flask 中的路由

保留传统,先插入封面

前情回顾
上次我们着手写了第一个flask的应用.运行它之后当我们访问http://127.0.0.1:5000/
时就会出现我们对应的信息

这个地址后面所带的路径是/
也就是我们的跟路径,但是在我们的平时上网时所看到的绝大多数站点都是由许许多多的页面所组成.
比如bilibili的视频播放页面和专栏的页面就是两个独立的路径
这个地址后面所带的路径是/
也就是我们的跟路径,但是在我们的平时上网时所看到的绝大多数站点都是由许许多多的页面所组成.
比如bilibili的视频播放页面和专栏的页面就是两个独立的路径


假如说我们现在有一个网站,它非常简单由首页和用户页面来构成
我们改如何实现它呢?
简单路由
我们回过头来看我们的helloword程序是怎么样来实现一个页面的
@app.route("/")
def hello_world()
: return "hello"
首先第一行是app.route("/")
装饰器,这也是我们一个页面的核心
route是路由的意思,加入我们想让http://127.0.0.1:5000/hello
可以被访问到,我们只需要把/
改成/hello
即可
@app.route("/hello")
def hello_world():
return "hello"
这时候我们再去访问/
的话就访问不到了
但是hello确实可以访问到的

route("/hello")中
.app.route()
的意思就是为下面的函数来注册一个URL
可以来执行这个函数地下的内容,这个函数被称为视图函数
,这个函数的返回值就是我们在页面上看到的结果
Q:能不能实现一个视图函数绑定多个url
?
A:是可以的
尝试一下
回到上面举的"栗子",有一个页面有主页
和用户
页面来构成
我们应该怎么来实现呢?
首先来注册主页
@app.route("/index")
def index():
return "这里是主页"
然后下面就是有几个页面就写几个这样的视图函数了
@app.route("/user")
def user():
return "这里是用户页面"
来访问一下试试(记得重启服务器)


可能你会说,哪有主页不是一点就进去的呢?
我想访问'/'也能访问到主页应该怎么做呢.这就要用到一个视图函数绑定多个URL
的方式了
直接在视图函数上面写装饰器即可
@app.route("/")
@app.route("/index")
def index():
return "这里是主页"

这样访问的时候就不需要输入/index
了
携带参数
你也许发现了,在刚刚的bilibili页面中视频播放页面的url后面带了av号作为参数
这样我们的应用才知道用户想要播放哪个视频节目
同样的,这就要用到了路由参数的功能,毕竟我们不能把每个用户都写一个视图函数吧
比如说下面这个函数就会根据不同用户传入的用户名来将用户名返回到页面上
@app.route("/user/<username>")
def me(username):
return "欢迎" + username + "莅临指导!"

你也可以一下子传入多个值,但是你得把他们表示清楚
@app.route("/user/<username>/<msg>")
def me(username, msg):
return username+"说:" + msg
参数中间的/
是必须的,因为如果没有两个字符串就会当做一个来看,服务器永远不会找得到你这个页面

获取到的参数也可以在代码中直接使用,因为它是已函数的形式变量的方式传入的
比如:
@app.route("/user/<username>/<msg>")
def me(username, msg):
print("%s说:%s" % (username, msg))
return username+"说:" + msg

规定参数的类型:
默认情况下,这里的参数以字符串的方式进行读取,也就是说你可以在这里传入任何字符串
Q:那我能不能只规定数字能被读取
A:当然是可以的
你可以使用<类型:变量>
这样的方式进行规定
@app.route("/user/<int:usernum>")
def user(usernum):
print(type(usernum))
return "编号: " + str(usernum)

可以在控制台看到类型是int
型

这些规定都是由flask自己已经定义好的一些标识符,但是你也可以自己通过正则表达式来定义一个属于自己的格式路由,相关的内容可以自行百度解决
最后一点
也许你也正在遭受每次修改代码都要重启服务器的苦恼,那就来试试Flask的debug模式吧,打开debug之后当你保存文件后flask会自动重启
当你在视图函数遇到错误的时候常常看到的是这样的错误信息
比如说这是因为没有类型转换而造成的无法将int与str进行连接的错误
@app.route("/user/<int:usernum>")
def user(usernum):
print(type(usernum))
return "编号: " + usernum # 错误在这里 应该改为str(usernum)
这时服务器将会返回一个500错误

开启debug模式后

将会直接出现错误信息
如何开启这个DEBUG?
1 app.run()
中直接传入
if __name__ == '__main__':
app.run(debug=True)
2 在app.config
中设置
app.config
是一个全局的app配置信息,他是一个字典,我们以后将会经常用到它的
from flask import Flask
app = Flask(__name__)
app.config["DEBUG"] = True
3 命令行中使用debugger
需要设置如下环境变量
FLASK_ENV=development
小结一下
这一次我们主要是演示了怎么样在flask中注册不同的页面以及如何使用路由传递参数.
今天第二项内容就是我们演示了怎么样在flask启动调试模式
这些内容都非常简单,如果你想快速入门flask我建议你去阅读一本叫做《Flask Web 入门开发实战》(这不是广告)

下一节我们来一起看看怎么样展示出一个漂亮的网页