首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
编写你的第一个Flask程序
Flask路由(Route)、环境配置
Flask中的response响应对象及request对象
Flask重定向(redirect)、url_for
Flask模板复用(继承、包含、宏)
Flask蓝图、flask-script
Flask数据库配置及迁移同步
Flask数据库操作(增删改查)
Flask模型关系(1对多)
Flask模型关系(多对多)
Flask Session与Cookie
flask-caching缓存
Flask消息闪现
Flask表单数据验证、CSRF保护
Flask文件上传、验证码
Flask-Mail邮件
Flask基于类视图
Flask项目可安装化
Flask应用错误处理
当前位置:
首页>>
技术小册>>
Flask框架零基础入门与实战开发
小册名称:Flask框架零基础入门与实战开发
在上篇文章我们成功运行了Flask框架——第一个Flask程序,这篇文章我们学习Flask框架——路由(Route)。 上篇文章运行了Flask应用程序,访问http://127.0.0.1:5000/ 网页后,网页显示内容是Hello World!字符,那么为什么不是显示其他字符呢? 我们从源代码和终端运行结果分析,如下图所示: ![](/uploads/images/20230706/7e4626c0b45c37742d075c322a4695cc.png) 我们发现网址最后的/和源代码中的@app.route('/')路由装饰器是对应的,其访问逻辑如下图所示: ![](/uploads/images/20230706/e328765b31e5fc242c3806e1a58963f4.png) 客户端访问服务器中的http://127.0.0.1:5000/ ,服务器接收到请求后,先去查找有没有http://127.0.0.1:5000/ ,有则响应调用@app.route('/')路由装饰器中的视图函数,否则返回404。所以这里就打印出了Hello World! 所以控制什么URL显示什么内容的是路由及其视图函数。 ###路由(Route) 在Web应用程序都通过路由技术使用URL链接来控制网页显示的内容,只要知道URL链接,即使没有主页导航也可以直接访问所需网页。 在Flask框架中使用route()路由装饰器将URL绑定到视图函数中,示例代码如下所示: ``` from flask import Flask app=Flask(__name__) @app.route('/hello') #路由装饰器 def hello_world(): #视图函数 return 'hello world' if __name__ == '__main__': app.run() ``` 这里的将URL链接为http://127.0.0.1:5000/hello的网页绑定在hello_world()函数中,这样,当用户访问该URL链接时,就会调动hello_world()视图函数,这个视图函数执行结果是返回hello world,所以在浏览器中显示内容为hello world。 除了使用@app.route()路由装饰器将URL链接与视图函数绑定,我们还可以使用add_url_rule()方法将URL链接与视图函数绑定,add_url_rule()方法语法结构为: ``` app.add_url_rule(rule='',endpoint=None,view_func=None,options='') ``` 其中: rule:函数对应的url规则,满足条件和app.route()的第一个参数一样,必须以'/'开始; endpoint:站点,就是在使用url_for()进行反转的时候,这个里面传入的第一个参数就是这个endpoint对应的值。这个值也可以不指定,那么默认就会使用函数的名字作为endpoint的值; view_func:对应的函数; options:该路由规则的方法(get或post)。 示例代码如下所示: ``` from flask import Flask app=Flask(__name__) def hello_world(): return "Hello World!" app.add_url_rule('/hello',view_func=hello_world) if __name__ == '__main__': app.run() ``` 使用add_url_rule()方法与使用@app.route()路由装饰器将URL链接与函数绑定的效果一样,但我们推荐使用@app.route()路由装饰器来绑定。 ###路由规则 为了给URL链接增加变量,我们可以定义路由规则,把变量部分用特定的字段标记成<varable_name>,其作为关键字参数传递给规则所关联的视图函数。 示例代码如下所示: ``` from flask import Flask app=Flask(__name__) data={'a':'北京','b':'上海','c':'深圳'} @app.route('/getcity/<city>') def get_city(city): return data.get(city) if __name__ == '__main__': app.run() ``` 运行Flask程序后,我们访问http://127.0.0.1:8080/getcity/a时,网页就会显示北京。 当然我们还可以通过转换器来指定规则,转换器有: string:接收字符串; int:接收整数; float:接收浮点数; path:接收字符串路径; uuid:接收uuid字符串。 示例代码如下所示: ``` from flask import Flask app=Flask(__name__) #整型 @app.route('/getnum/<int:num>') def get_num(num): return str(num) #路径 @app.route('/path/<path:p>') def get_path(p): return p #唯一标识 @app.route('/uuid/<uuid:uid>') def get_uuid(uid): return str(uid) if __name__ == '__main__': app.run() ``` 运行Flask程序后,我们分别访问下面几个URL链接: http://127.0.0.1:8080/getnum/10 http://127.0.0.1:8080/path/first/1 http://127.0.0.1:8080/uuid/dac401f1-8622-4a03-b850-6f3049d30d35 网页就会分别显示以下内容: 10 first/1 dac401f1-8622-4a03-b850-6f3049d30d35 这里需要注意的是: 函数的返回类型默认是字符串类型; 函数返回类型必须是字符串、dict、tuple、响应实例或WSGI可调用; ``` <varable_name>字段必须要和函数传入的参数名一致。 ``` ###环境配置 运行了上面的示例代码中,是不是觉得很不方便,每次修改Flask程序的代码就要在终端停止Flask程序的运行,再启动Flask程序才能测试修改后的运行结果,而且在终端中老是有个WARNING警告。 这时我们可以通过如下代码进行环境配置: ``` app.config['配置参数']='参数值' ``` 我们可以配置debug调试模式使服务器自动加载修改后的代码,示例代码如下所示: ``` from flask import Flask app=Flask(__name__) print(app.config) #打印app配置 app.config['DEBUG']=True @app.route('/') def index(): return "第一个Flask" if __name__ == '__main__': app.run() ``` 调试模式,当debug=True时,只要代码改变,服务器就会自动加载最新的代码,只要刷新网页就呈现最新的网页,适用于开发环境,默认为Flase,适用于产品环境; 为了满足我们的开发需求,只是配置debug远远不够的,运行上面的Flask程序,如下图所示: ![](/uploads/images/20230706/f4aa54fe25c301121680788c34cbcba0.png) 可以发现有那么多配置,随着Flask项目的开发,需要的配置会越来越多,配置都通过app.config['配置参数']='参数值'来配置,这显然是不可取的,不可能在启动文件中编写配置的代码,而且启动文件越简单越好,那么我们可以创建一个setting.py文件来存放配置。 settings.py示例代码如下: ``` #配置文件 ENV='development' DEBUG='True' ``` 写好配置文件后,我们可以使用app.config.from_object()来加载我们的配置,示例代码如下所示: ``` #配置文件 ENV='development' DEBUG='True' ``` 运行结果如下图所示: ![](/uploads/images/20230706/f0c005834086c0d90cef1de541aab1ce.png) 这样我们就成功修改了配置。
上一篇:
编写你的第一个Flask程序
下一篇:
Flask中的response响应对象及request对象
该分类下的相关小册推荐:
Flask框架入门指南