# 资源管理器 资源管理器,起着连接器的作用,它连接着数据抽象层、数据层以及其他可选的功能。其内部可以管理资源的各项逻辑。 Flask-REST-JSONAPI提供了三种资源管理器,实现了JSONAPI 1.0规范的默认方法。 - **ResourceList**:提供GET和POST方法,分别用于读取资源列表和创建资源。 - **ResourceDetail**:提供GET、PATCH和DELETE方法,分别用于读取资源详情、更新资源以及删除资源。 - **ResourceRelationship**:提供GET、POST、PATCH和DELETE方法,对关系进行增删改查。 我们能重写任意的默认方法,来定制功能。整个资源管理器是保持解耦的,我们可以在不配置其他属性的情况下,对所有方法重写、对某个方法重写,亦或禁用某个方法。 ## 必选属性 --- 如果我们想使用资源管理器的默认方法实现,我们必须设置两个属性:schema和data_layer。 - **schema**: 逻辑数据抽象层,它必须继承自marshmallow_jsonapi.schema.Schema。 - **data_layer**: 这个属性用于初始化你的数据层。如果想了解更多,请查看数据层文档。 例: ```python from flask_rest_jsonapi import ResourceList from your_project.schemas import PersonSchema from your_project.models import Person from your_project.extensions import db class PersonList(ResourceList): schema = PersonSchema data_layer = {'session': db.session, 'model': Person} ``` ## 可选属性 --- 所有的资源管理器都继承自flask.views.MethodView,所以我们能在资源管理器中,使用Flask的可选属性。 - **methods**: 资源管理器可用的HTTP方法,如果没指定,那么所有方法都可用。 - **decorators**: 针对所有方法的装饰器元组。 另外,我们还能给资源管理器的每个HTTP方法,设定不同schema的参数: - **get_schema_kwargs**: GET方法的schema默认字典参数 - **post_schema_kwargs**: POST方法的schema默认字典参数 - **patch_schema_kwargs**: PATCH方法的schema默认字典参数 - **delete_schema_kwargs**: DELETE方法的schema默认字典参数 同时,每个方法,都有一对前置和后置处理方法。前置处理方法,会将view args和kwarg作为参数;后置处理方法,会将返回的结果作为参数。正是有了这对方法,我们才能对前置和后置做定制化的处理。可以重写的方法如下: - **before_get**: GET的前置处理方法 - **after_get**: GET的后置处理方法 - **before_post**: POST的前置处理方法 - **after_post**: POST的后置处理方法 - **before_patch**: PATCH的前置处理方法 - **after_patch**: PATCH的后置处理方法 - **before_delete**: DELETE的前置处理方法 - **after_delete**: DELETE的后置处理方法 ## ResourceList 资源列表 --- ResourceList 管理器有它特有的可选参数: - **view_kwargs**: 如果你设置了这个参数为True,那么读取列表url时,就会读取view kwargs的值。如果我们配置了如下路由:/persons//computers,那么这个值则必须为True。 例: ```python from flask_rest_jsonapi import ResourceList from your_project.schemas import PersonSchema from your_project.models import Person from your_project.extensions import db class PersonList(ResourceList): schema = PersonSchema data_layer = {'session': db.session, 'model': Person} ``` 以上为最小的ResourceList实现。它提供了GET和POST方法,用于读取对象集合以及创建对象,同时,它实现了分页、排序、稀疏字段、过滤以及包含关联字段的特性。 如果我们的schema包含关系字段,我们也能够创建对象时,同时创建关联对象。具体例子,请查看快速上手章节。 ## ResourceDetail 资源详情 --- 例: ```python from flask_rest_jsonapi import ResourceDetail from your_project.schemas import PersonSchema from your_project.models import Person from your_project.extensions import db class PersonDetail(ResourceDetail): schema = PersonSchema data_layer = {'session': db.session, 'model': Person} ``` 以上为最小的ResourceDetail实现。它提供了GET,PATCH和DELETE方法,用于读取对象详情、更新对象以及删除对象,同时,它实现了所有强大的特性,如稀疏字段和包含关联字段的特性等。 如果我们的schema包含关系字段,我们也能够更新对象时,同时更新关联对象。具体例子,请查看快速上手章节。 ## ResourceRelationship 资源关系 --- 例: ``` python from flask_rest_jsonapi import ResourceRelationship from your_project.schemas import PersonSchema from your_project.models import Person from your_project.extensions import db class PersonRelationship(ResourceRelationship): schema = PersonSchema data_layer = {'session': db.session, 'model': Person} ``` 以上为最小的ResourceRelationship实现。它提供了GET,POST,PATCH和DELETE方法,用于读取、创建关系、更新关系以及删除关系,同时,它实现了所有强大的特性,如稀疏字段和包含关联字段的特性等。