开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
之前聊了聊flask基础的渲染部分,那么接下来聊聊基于flask的路由操作,一个不大的细节,但是可以把整个项目串通起来。
路由
路由这个词好多小伙伴们并不陌生,但是这里要聊得不是路由器的那个路由(那个路由是网络层面的指的是分组从源到目的地时,决定端到端路径的网络范围的进程), 我们这里聊的路由是网站上的路由就是URL到函数的映射,确定数据交换和页面展现的目标。
可以把整个后端服务器看作一个公司,用户访问公司的某位员工,首先要知道公司的地址,然后通过地址访问公司,公司会有专门接待的人员,一般来说是前台,前台会根据访问的情况指向处理访问的部门或者员工,然后具体解决访问问题的过程交给前台指向的部门或者个人处理,最后反馈给访客一个答复。
那么同样,用户通过浏览器域名指向服务器的地址来访问到WEB服务器上,服务器上也需要有一个类似前台这样的角色来进行用户访问和处理工作的映射关系,那么就是路由,路由指向处理访问的功能,这种功能被称作视图,然后由视图响应用户的请求。
Flask的路由默认情况下可以采用app.route("路由内容")进行定义,但是这里要有几个点要注意:
1、路由内容可以不以'/'结束,但是必须以 '/'开始,这里的 '/'代表的是当前web访问的根目录,也就是main文件运行的目录。
2、默认路由是装饰器形态,为了全局的路由映射表,装饰函数名称必须唯一,如果不唯一会报错。
案例:
#导入flask
from flask import Flask
#创建应用
app = Flask(__name__)
#应用装饰器指定路由
@app.route("/")
def index():
return "这里是首页"
@app.route("/news")
def news():
return "这里是新闻列表页"
if __name__ == '__main__':
app.run() #启动应用
Flask动态路由
和其他的WEB路由技术一样,Flask也有动态路由,所谓的动态路由就是在路由上定义变量,在视图当中使用,视觉上是不同的路由,但实际上是一个视图函数接收并处理的,比如:
http://mysite/news/1
http://mysite/news/2
flask通过在路由上定义<变量类型:变量>的格式定义变量,在视图函数定义同名的形参来接收变量,以上面的路由为例子
@app.route("/news/<int:new_id>")
def news(new_id):
return "这是第%s篇文章"%new_id
这里@app.route("/news/int:new_id")定义了int类型的new_id变量
然后在定义视图函数news的时候定义同名的new_id参数来接收就好了,这样,访问这个路由就可以
http://mysite/news/1
http://mysite/news/2
1和2都会传递给new_id,这样视图函数就知道用户指定的数据了。
Flask路由使用场景
上面聊了Flask路由定义的方法,接下来聊一下路由在WEB开发当中使用的场景:
1、前端使用路由进行页面跳转
这种需求一般来说是基于前后端不分离技术,直接将路由写道a标签当中,就可以实现视图的访问,视图会返回一个新的页面。
比如:
定义路由:
@app.route("/news/<int:new_id>")
def news(new_id):
return "这是第%s篇文章"%new_id
路由使用
<a href="/news/1">新闻1</a>
注意:这里因为是前后端不分离,所以域名一样,才可以这么写,否则要加上域名:http://mysite/news/1 写完整
2、前端异步请求使用
这种需求一般来说是基于前后端分离技术,或者说是后端不返回页面,返回json的技术,就是异步使用通过路由来指向后端数据地址。
比如:
定义路由:
@app.route("/news/<int:new_id>")
def news(new_id):
return {"id": 1, "title": "如何一秒成为掘金小达人", "summary": "一个掘金大佬的成长之路,嘿嘿嘿...."}
路由使用
$.ajax({
url: "http://mysite/news/1",
.....
})
注意:这里使用的是jq的ajax代码,这种使用场景同样适合 jsonp,axios,js ajax等,但是要注意,凡是前后端分离必须考虑的跨域问题,这个在之后的博客会详细的讲一下。
3、后端跳转使用
这种需求一般出现在比较复杂的后端业务逻辑当中,最常见的就是登录功能,如果登录成功,跳转到首页,没有成功跳转到登录页,那么这种情况下就需要使用路由了。
比如:
#导入flask
from flask import Flask
from flask import redirect
#创建应用
app = Flask(__name__)
#应用装饰器指定路由
@app.route("/index")
def index():
return "这里是首页"
@app.route("/login")
def login():
#如果登录成功
return redirect("/index")
if __name__ == '__main__':
app.run() #启动应用
注意:
1、flask通过redirect进行页面的跳转,在里面指定跳转的路由即可。
2、这里不可以将login路由改成index,毕竟从逻辑上就是如果登录成功就跳转到首页,而不是改成首页。
好了,基本的Flask路由使用技巧就聊到这里,还是请各位大佬多多指点呀。