Python 实战 · 从 0 到 1 搭建直播视频平台
Barry
某上市公司技术研发总监
3724 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
Python 实战 · 从 0 到 1 搭建直播视频平台
15
15
1.0x
00:00/00:00
登录|注册

19|路由定义和视图常用逻辑:路由定义和视图的核心是什么?

你好,我是 Barry。
上节课我们完成了 Flask 框架搭建,同时我们也提到了路由。虽然我们都知道路由是处理 URL 和视图函数之间关系的程序,但在项目中究竟为什么要使用路由,我们又该如何使用,这些问题我们仍然没有解决。
这节课,我们重点学习静态路由还有视图函数的常用逻辑,了解了这些,你就能能够编写和处理复杂的视图函数,掌握从路由请求中提取有用的信息,并能够生成动态响应做一些接口的开发。

初识路由

路由是 Flask 框架中非常重要的组成部分。为什么说它非常重要呢?因为路由的作用是将 HTTP 请求的 URL 路径映射到相应的函数处理程序。这样我们在开发过程中,就能将不同的 URL 路径与相应的函数处理程序关联起来,从而实现对 Web 应用的灵活控制。
路由可以分为静态路由和动态路由。两者主要是在形式上有一些区别,通常静态路由使用 @app.route(‘/’) 这样的装饰器形式。
而动态路由会使用变量名 <name>,形式通常为 @app.route(‘/’, <name>)。当然,其中还可以传入其他类型的参数,如整型、浮点型,甚至 Path 路径等。现在你先知道它们有什么区别就可以,动态路由这部分我会在下一节课重点去讲解,这节课我们重点学习静态路由。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flask框架中的路由定义和视图函数是本文的核心内容。文章首先介绍了路由的重要性和作用,包括静态路由和动态路由的区别,以及静态路由的装饰器形式@app.route('/')和其工作机制。接着深入探讨了装饰器函数中的重要参数methods、endpoint、url_for、redirect_to的具体用途。此外,还介绍了Flask中的视图函数的作用,以及与视图函数相关的函数和对象,如render_template函数和request对象。render_template函数主要用于将视图函数中的数据传递给模板,并在模板中使用这些数据来生成HTML响应。而request对象则包含了客户端与服务器之间的所有请求和响应数据,可以用来获取请求的URL、请求方法、请求头、请求体等信息。此外,还介绍了request对象的两个核心属性request.form和request.method的应用场景和使用方法。通过本文的总结,读者可以快速了解Flask框架中路由定义和视图函数的核心概念,以及相关参数和函数的具体用法,为进一步深入学习和应用Flask框架提供了基础知识。文章还通过案例实战“哨兵检查口令”展示了路由和视图函数的实际应用,加深了读者对这些概念的理解。文章总结了静态路由的重要参数和视图函数的关键作用,为读者提供了清晰的学习路径和实践方向。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 实战 · 从 0 到 1 搭建直播视频平台》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • Aegean Sea
    最后那个failure函数少了装饰器

    作者回复: 你在源码库中可看到完整的实现。

    2023-10-24归属地:广西
  • 蜡笔小新爱看书
    纠错:name = request.form.get('name','') age = request.form.get('age',''),不是中括号[]

    作者回复: 感谢指正,字典的键应该用括号括起来,而不是用方括号,因为这个是单独案例,书写疏忽了,但是项目中的实现代码不会有这样的情况,稍后就会更新,到时再来看文稿。

    2023-08-14归属地:广东
  • 浩仔是程序员
    endpoint这个感觉确实不是很有必要,@app.route下面跟着就是处理函数,一个路由对应一个函数,如果想多个路由复用同一个函数,抽象出来一个方法复用就可以了,一对一的映射比较清晰点,而且通常多个路由都是同一个处理函数的场景比较少吧

    作者回复: 方法复用确实是一个不错的做法,这样可以将一些公共逻辑提取出来,避免代码冗余,这个在使用上还是有选择性的,非必需使用。当然它也有优势的地方,例如endpoint可以用于在蓝图中管理路由,这个我们后边课有讲。我们可以使用endpoint将路由与蓝图关联起来,这样会让路由的管理和维护更加方便和可复用,也是一种优化的选择。

    2023-06-15归属地:广东
    2
  • peter
    请教老师几个问题: Q1:怎么判断endpoint是字符串还是函数? 文中的例子,函数是def hello_world()。endpoint='hello_world',这里的hello_world是字符串还是函数? Q2:“如果在 Flask 应用程序中有多个路由,但是它们使用相同的 endpoint 参数,那么这些路由将共享同一个视图函数”,怎么理解?能否举例说明。 路由装饰器都是加在函数名称前面的,多个路由就是多个函数啊。 Q3:request的数据只有表单和json两种吗?如果是其他种类会怎么处理? Q4:render_template函数中的第一个参数,就是文件名,这个文件必须在目录templates下面吗? Q5:url_for的例子代码是怎么执行的? 我的理解:程序运行后,1 最下面的“if __name__ == '__main__'”会执行,即执行“url = url_for(hello)”和“print(url)”; 2 “def hello():”这个函数不会执行,只有用户通过浏览器发请求的时候才执行。 是这样吗? Q6:url_for(hello)中的“hello”是指“def hello():”中的hello吗? 还是指@app.route('/hello')中的“hello”? “/hello 路由的返回值是一个字符串 ‘World’”,为什么会返回字符串world? /hello对应函数hello,而函数hello返回的是一个网页啊(render_template)

    作者回复: 1、hello_world 是一个字符串,它被用作端点名称。端点是一个标识符,用于在 Flask 应用中引用一组视图函数。在这个例子中,hello_world 端点只包含一个视图函数 hello_world。 2、当在 Flask 应用程序中有多个路由使用相同的 endpoint 参数时,它们将共享同一个视图函数。这意味着,无论你通过哪个路由访问该端点,都将调用相同的视图函数来处理请求。是这样的关系。下面我给你写个案例,你看案例就能看清他们的关系: @app.route('/') @app.route('/home') @app.route('/index', endpoint='home') def home(): return render_template('home.html') 3、在HTTP请求中,数据可以以多种格式进行传输,包括表单数据、JSON数据、XML数据等。在Flask中,可以通过请求对象的data属性来获取请求的数据。 对于其他格式的数据,例如XML数据,则可以通过Flask提供的request.get_data()方法来获取整个请求体数据,然后使用相应的库来解析XML数据。这个根据类型去选择就可以 4、是的,Flask默认会将模板文件放在templates目录下。当使用render_template函数时,需要传入文件名作为第一个参数,如果该文件在templates目录下,可以只传入文件名;如果文件不在templates目录下,需要指定文件的完整路径 5、1、是的,理解是正确的 2、在 if __name__ == '__main__': 代码块中,调用 Flask 提供的 url_for() 函数,传入 hello() 函数作为参数。这将返回 /hello 路由对应的 URL。然后,将 URL 打印到控制台。这个对待吗问题统一解释,你就明白核心逻辑了。继续加油,多多实践。 因此,这段代码会在以下情况下执行: 当你运行这个 Flask 应用程序时,它将执行 if __name__ == '__main__': 代码块中的代码。 当用户访问 /hello 路由时,Flask 将调用 hello() 函数,执行其中的代码。

    2023-06-05归属地:北京
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部