@@ -102,8 +102,8 @@ app.register_blueprint(auth_bp)
102102from flask import Flask
103103
104104def create_app ():
105- app = Flask(__name__ )
106- return app
105+ app = Flask(__name__ ) # 创建程序实例
106+ return app # 返回程序实例
107107```
108108
109109> ** 提示** 按照惯例,工厂函数一般会被命名为 create_app 或 make_app。
@@ -259,16 +259,17 @@ $ touch blueprints/auth.py blueprints/main.py # 创建蓝本模块
259259
260260我们把这个包称为程序包,包里目前包含的模块和作用如下表所示:
261261
262- | 模块 | 作用 |
263- | ------------------ | -------------- |
264- | \_\_ init\_\_ .py | 包构造文件,包含工厂函数定义 |
265- | settings.py | 程序配置 |
266- | errors.py | 错误处理函数 |
267- | models.py | 模型类 |
268- | commands.py | 命令函数 |
269- | extensions.py | 扩展相关代码 |
270- | blueprints/main.py | main 蓝本和相关视图函数 |
271- | blueprints/auth.py | auth 蓝本和相关视图函数 |
262+ | 模块 | 作用 |
263+ | -------------------------- | -------------- |
264+ | \_\_ init\_\_ .py | 包构造文件,包含工厂函数定义 |
265+ | settings.py | 程序配置 |
266+ | errors.py | 错误处理函数 |
267+ | models.py | 模型类 |
268+ | commands.py | 命令函数 |
269+ | extensions.py | 扩展相关代码 |
270+ | blueprints/\_\_ init\_\_ .py | 蓝本子包的构造文件,内容为空 |
271+ | blueprints/main.py | main 蓝本和相关视图函数 |
272+ | blueprints/auth.py | auth 蓝本和相关视图函数 |
272273
273274> ** 提示** 除了包构造文件外,其他的模块文件名你可以自由修改,比如 settings.py 也可以叫 config.py。
274275
@@ -334,6 +335,8 @@ def load_user(user_id):
334335 from watchlist.models import User
335336 user = db.session.get(User, int (user_id))
336337 return user
338+
339+ login_manager.login_view = ' login'
337340```
338341
339342因为 models.py 模块需要导入存放在 extensions.py 中的 db 对象,为了避免循环依赖,` load_user() ` 函数中使用的 User 模型类在函数内进行导入。
@@ -377,7 +380,7 @@ def create_app(config_name='development'):
377380 return app
378381```
379382
380- 我们为两个蓝本在 blueprints 子目录下分别创建了对应的模块 。以认证蓝本为例,我们把 auth 蓝本的定义和相关视图函数放到了 auth.py 模块下。
383+ 我们为两个蓝本在 blueprints 子包下分别创建了对应的模块(记得为 blueprints 子包创建一个构造文件 ` __init__.py ` ) 。以认证蓝本为例,我们把 auth 蓝本的定义和相关视图函数放到了 auth.py 模块下。
381384
382385* watchlist/blueprints/auth.py:认证蓝本*
383386
@@ -397,10 +400,10 @@ def logout():
397400 ...
398401```
399402
400- 其他代码则按照分类分别放到各自的模块中,这里不再给出代码,具体可参考[ 源码仓库] ( https://github.com/helloflask/watchlist ) 。在移动代码之后,注意添加并更新导入语句,比如使用下面的导入语句来导入程序实例 :
403+ 其他代码则按照分类分别放到各自的模块中,这里不再给出代码,具体可参考[ 源码仓库] ( https://github.com/helloflask/watchlist ) 。在移动代码之后,注意添加并更新导入语句,比如使用下面的导入语句来导入工厂函数 :
401404
402405``` python
403- from watchlist import app
406+ from watchlist import create_app
404407```
405408
406409使用下面的导入语句来导入扩展对象模型类和扩展对象:
@@ -452,11 +455,20 @@ def bad_request(e):
452455FLASK_APP=watchlist
453456```
454457
458+ 为了更直观,我们也可以在项目根目录创建一个程序入口脚本,将其命名为 app.py:
459+
460+ ``` python
461+ from watchlist import create_app
462+
463+ app = create_app(config_name = ' development' )
464+ ```
465+
455466最终的项目文件结构如下所示:
456467
457468```
458469watchlist
459470├── .flaskenv
471+ ├── app.py # 可选的入口脚本
460472└── watchlist # 程序包
461473 ├── __init__.py
462474 ├── commands.py
@@ -465,6 +477,7 @@ watchlist
465477 ├── settings.py
466478 ├── extensions.py
467479 ├── blueprints
480+ │ ├── __main__.py
468481 │ ├── main.py
469482 │ └── auth.py
470483 ├── static
0 commit comments