flaskflask-sqlalchemyflask-restless

How to init restless as flask blueprint


I do not know how to do properly.

blueprint api:

# coding: utf-8
from flask import Blueprint, render_template
from ..models import User
from flask_restless import APIManager

manager = APIManager()

manager.create_api(User, url_prefix='/api', methods=['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])

bp = Blueprint('api', __name__)

__init__.py:

def register_db(app):
    from .models import db

    db.init_app(app)

def register_api(app):
    from .controllers.api import manager

    manager.init_app(app, flask_sqlalchemy_db=db)

register blueprint's:

def register_routes(app):
    from . import controllers
    from flask.blueprints import Blueprint
for module in _import_submodules_from_package(controllers):
    bp = getattr(module, 'bp')
    if bp and isinstance(bp, Blueprint):
        app.register_blueprint(bp)

I get this error when trying to start:

RuntimeError: application not registered on db instance and no application bound to current context

If I exclude methods=['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], the application is started, but if i try send request http http://0.0.0.0:5000/api/user, obviously, I get the answer:

HTTP/1.0 500 INTERNAL SERVER ERROR
Content-Length: 291
Content-Type: text/html
Date: Thu, 20 Oct 2016 15:33:52 GMT
Server: Werkzeug/0.11.11 Python/3.5.2

Docs does not give an example of solving the problem

Can you please tell where to find the answer


Solution

  • This works:

    blueprint:

    # coding: utf-8
    from flask import Blueprint, render_template
    from flask_restless import APIManager
    from ..models import db
    
    
    bp = Blueprint('api', __name__)
    
    manager = APIManager(flask_sqlalchemy_db=db)
    

    init.py :

    def register_api(app):
        """Register api."""
        from .controllers.api import manager
        from .models import User
    
        manager.init_app(app)
        manager.create_api(User, app=app)
    

    request: http http://0.0.0.0:5000/api/user

    response :

    HTTP/1.0 200 OK
    Content-Length: 72
    Content-Type: application/json
    Content-Type: application/json
    Date: Thu, 20 Oct 2016 18:50:04 GMT
    Link: <http://0.0.0.0:5000/api/user?page=0&results_per_page=10>; rel="last"
    Link: <http://0.0.0.0:5000/api/user?page=0&results_per_page=10>; rel="last"
    Server: Werkzeug/0.11.11 Python/3.5.2
    Vary: Accept
    
    {
      "num_results": 0,
      "objects": [],
      "page": 1,
      "total_pages": 0
    }