企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 第2章 Flask的基本原理与核心知识 ### 视图函数 视图函数其实只是一个函数,只不过因为它是控制 MVC 里 View 视图的,所以 flask 将其称为视图函数。 ### 基于类的视图 除了视图函数这一种视图的控制写法之外,flask 还提供了一种基于类的视图(即插视图) \#### 优势 相比于视图函数,类视图可以继承,增加了复用性!(函数不可以继承) ### flask 如何兼容带`/`和不带`/`访问的? ![](https://ws1.sinaimg.cn/large/006tNbRwgy1fxh6s0ijm5j314l0u0b29.jpg) > 经典面试问题(经常出现在 Python Web面试中,需要带入具体的环境回答作用) > > 在如入口文件中加 if 判断有什么作用? > > ~~~ >  if __name__ == "__main__": >   app.run(host='0.0.0.0', port=5000, debug=app.config['DEBUG'], threaded=True) > ~~~ > > 在开发环境下启动搞的 web 服务器是flask 自带的一个非常简单的服务器,但把项目部署到生产环境的时候我们通常不会使用 flask 自带的服务器。生产环境部署的时候通常使用 `nginx + uwsgi` 组合来部署项目,`nginx` 作为前置服务器用来接收浏览器发来的请求,然后把请求转发给 `uwsgi`。生产环境中 flask 项目的启动并不是使用 `python fisher.py`手动启动服务器,而是用 `uwsgi`加载`fisher.py`模块来启动 flask 的相关代码,那么生产环境中的`fisher.py`就不再是入口文件了,它只是一个被 `uwsgi` 加载的模块文件,所以生产环境中`app.run()`是根本不会执行的. > > 反过来想一下,如果没有了这个`if __name__ == "__main__"`判断,生产环境中一旦加载了`fisher.py`之后`app.run()`就会执行,我们已经有了 `uwsgi`作为 web 服务器,又启动了 flask 内置的服务器,两个服务器同时启动是不可以的,肯定是会出问题的。