##Flask 学习小组
###**Flask项目结构**
![](https://box.kancloud.cn/f8106438dc36255a5208fca6aed8d748_612x620.png)
> 看完网上的这张图大家可能并不明白各个Python文件的联系,接下来就为大家逐一介绍。
* **_____init_____.py**
> 控制着包的导入行为,__init__.py 文件会在导入时被执行。
import 方便了我们导入其他 Python 文件中的函数,但一个一个的导入 Python 文件是很复杂的,我们就引入了包的概念,可以批量的导入包中的多个Python文件。那么如何定义包呢,这就是 __init__.py 的用途。同时,当我们导入包时也会执行 __init__.py 的内容。
在 import 导入的过程中,import * 导入了包中的所有元素。其原因就在与 __init__.py 中,定义了 __all__=「‘module1’,‘module2’」,* 导入包时,是受 __init__.py 的限制,只会导入 __all__ 中定义的包。
* **工厂函数**
> 构造程序,但不进行实例化的函数
* **蓝本**
> 处于休眠状态的程序
* **migrations**
> Flask中的扩展 Flask-Migrate 可以实现数据库的迁移
数据库为什么要迁移?
当数据模型发生变动时,数据库表需要更新,Flask-SQLAlchemy 比较死性,只有数据库表不存在时才会根据模型创建。
所以我们要像重新根据模型创建表,只能删除旧表重新创建,但问题是这样会导致原有表中数据丢失。
所以要使用Flask-Migrate进行表的更新。
* **requirements.txt**
包含所有flask依赖包,方便重新创建与开发者相同的虚拟环境
requirements的生成:
(venv)$ pip freeze >requirements.txt
依照requirements 安装所有依赖包:
在新创建的虚拟环境中:
(venv) $ pip install -r requirements.txt
* **_____name_____ 和 _____main_____**
_____name_____:
> Modules…
Predefined (writable) attributes: __name__ is the module’s name;
Classes…
Special attributes: __name__ is the class name;
如果是放在Modules模块中,就表示是模块的名字;
如果是放在Classs类中,就表示类的名字;
_____main_____:
Python 自己运行自己的代码时:__name__=__main__
我们通过import导入模块时:__name__=使用该模块的xxx.py文件
实验:
**a.py:**
![](https://box.kancloud.cn/51cc53dc3540876966b72aa46259069b_316x100.png)
**b.py:**
![](https://box.kancloud.cn/31fc8abccf4d14edbf0834859e77bd70_370x107.png)
**结果:**
![](https://box.kancloud.cn/3b72d5e9f7d94d14857bdb65df710697_293x129.png)
##**最后放大招(全网最全梳理图)**
![](https://box.kancloud.cn/ac54a7e760f8d8a794d5276679f0275a_1280x720.jpg)
* * * * *
本人微信:sunyutong0725
欢迎交流