19|路由定义和视图常用逻辑:路由定义和视图的核心是什么?
初识路由
- 深入了解
- 翻译
- 解释
- 总结
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归属地:北京