smorest_crud.view module

class smorest_crud.view.CRUDView[source]

Bases: flask.views.MethodView

Base class for collection and resource views.

This works like Flask MethodView; python methods are named after HTTP verbs.

access_checks_enabled: bool = True

Whether or not to apply access checks to models.

Requires CRUD_ACCESS_CHECKS_ENABLED configuration to be enabled.

decorators = [<function jwt_required>]

List of decorators to apply to view functions.

Applies jwt_required by default to required authenticated requests.

model: flask_sqlalchemy.model.Model

SQLAlchemy model we are providing CRUD services for.

query()[source]

Return query for model.

Return type

BaseQuery

query_for_user()[source]

Produce a query for current model, filtered by model.query_for_user(current_user).

Return type

BaseQuery

class smorest_crud.view.CollectionView[source]

Bases: smorest_crud.view.CRUDView

API view that can manage listing items in a collection or creating a new item.

Example:

from flask_smorest import Blueprint
from smorest_crud import CollectionView

pet_blp = Blueprint("pets", "pets", url_prefix="/pet")

@pet_blp.route("")
class PetCollection(CollectionView):
    model = Pet
    prefetch = [Pet.human, (Pet.human, Human.cars)]  # joinedload
    access_checks_enabled = False

    create_enabled = True
    list_enabled = True

    @pet_blp.response(PetSchema(many=True))
    def get(self):
        query = super().get()
        return query.filter_by(name='mischa')

    @pet_blp.arguments(PetSchema)
    @pet_blp.response(PetSchema(many=True))
    def post(self, args):
        return super().post(args)
create_enabled: bool = False

Enable POST.

get()[source]

List collection.

Return type

BaseQuery

Returns

query or iterable of `Model`s.

list_enabled: bool = False

Enable GET.

methods = {'GET', 'POST'}
model: flask_sqlalchemy.model.Model

SQLAlchemy model we are providing CRUD services for.

post(args=None)[source]

Create new model.

Parameters

args – Deserialized schema args.

Returns

Newly-created model.

prefetch: Iterable[sqlalchemy.orm.relationships.RelationshipProperty] = []

List of relationships to prefetch when listing.

class smorest_crud.view.ResourceView[source]

Bases: smorest_crud.view.CRUDView

Operations to perform on an item, identified in the URL route by a key.

GET /pet/42 – Fetch pet 42.

PATCH /pet/42 – Update pet 42.

DELETE /pet/42 – Delete pet 42.

Example:

from flask_smorest import Blueprint
from smorest_crud import ResourceView

pet_blp = Blueprint("pets", "pets", url_prefix="/pet")

@pet_blp.route("/<int:pk>")
class PetResource(ResourceView):
    model = Pet

    access_checks_enabled = True
    get_enabled = True
    update_enabled = True
    delete_enabled = True

    @pet_blp.response(PetSchema)
    def get(self, pk):
        return super().get(pk)

    @pet_blp.arguments(PetSchema)
    @pet_blp.response(PetSchema)
    def patch(self, args, pk):
        return super().patch(args, pk)

    @pet_blp.response(PetSchema)
    def delete(self, pk):
        return super().delete(pk)
delete(pk)[source]

Delete model.

Parameters

pk – Primary key identifier.

Return type

BaseQuery

delete_enabled: bool = False

Enable DELETE.

get(pk)[source]

Retreieve model by primary key.

Parameters

pk – Primary key identifier.

Return type

BaseQuery

get_enabled: bool = False

Enable GET.

methods = {'DELETE', 'GET', 'PATCH'}
model: flask_sqlalchemy.model.Model

SQLAlchemy model we are providing CRUD services for.

patch(args=None, pk=None)[source]

Update model.

Parameters
  • args – Deserialized request model args.

  • pk – Primary key identifier.

Return type

BaseQuery

Returns

Updated model.

update_enabled: bool = False

Enable PATCH.