dpgaspar / Flask-AppBuilder

Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more. Demo (login with guest/welcome) - http://flaskappbuilder.pythonanywhere.com/
BSD 3-Clause "New" or "Revised" License
4.7k stars 1.36k forks source link

Unable to retrive more pages from ModelRestApi #2161

Closed enricosecco closed 1 year ago

enricosecco commented 1 year ago

Environment

Flask-Appbuilder version: 4.3.9

pip freeze output: apispec==6.3.0 attrs==23.1.0 Babel==2.13.1 blinker==1.7.0 certifi==2023.7.22 charset-normalizer==3.3.2 click==8.1.7 colorama==0.4.6 Deprecated==1.2.14 dnspython==2.4.2 email-validator==1.3.1 flask==2.3.3 Flask-AppBuilder==4.3.9 Flask-Babel==2.0.0 Flask-DebugToolbar==0.13.1 Flask-JWT-Extended==4.5.3 Flask-Limiter==3.5.0 Flask-Login==0.6.3 Flask-SQLAlchemy==2.5.1 flask-wtf==1.2.1 greenlet==3.0.1 idna==3.4 importlib-metadata==6.8.0 importlib-resources==6.1.1 itsdangerous==2.1.2 Jinja2==3.1.2 jsonschema==4.19.2 jsonschema-specifications==2023.7.1 limits==3.6.0 markdown-it-py==3.0.0 MarkupSafe==2.1.3 marshmallow==3.20.1 marshmallow-sqlalchemy==0.26.1 mdurl==0.1.2 ordered-set==4.1.0 packaging==23.2 pkgutil-resolve-name==1.3.10 prison==0.2.1 psycopg2==2.9.9 Pygments==2.16.1 PyJWT==2.8.0 pyodbc==5.0.1 python-dateutil==2.8.2 pytz==2023.3.post1 PyYAML==6.0.1 referencing==0.30.2 requests==2.31.0 rich==13.6.0 rpds-py==0.12.0 six==1.16.0 SQLAlchemy==1.4.50 SQLAlchemy-Utils==0.41.1 typing-extensions==4.8.0 urllib3==2.1.0 werkzeug==2.3.8 wrapt==1.16.0 wtforms==3.1.1 zipp==3.17.0

expected results

I need to retrive paginated data from api

In models.py I have:

class Nazione(Model):
    __tablename__ = 'nazione'
    id = Column(Integer, primary_key=True)
    nome = Column(String(255))

    def __repr__(self):
        return self.nome

In views.py I have:

class NazioneApi(ModelRestApi):
    datamodel = SQLAInterface(Nazione)
    list_columns = ['id','nome']

Describe the actual results

When i GET http://127.0.0.1:8000/api/v1/nazioneapi/ I retrieve the first 20 records (there are 248 records in the table) but I am unable to retrieve the next pages. From the ModelRestApi code and from the swagger page it seems that the params (page and page_size) are necessary. But GET http://127.0.0.1:8000/api/v1/nazioneapi/?page=2&page_size=20 or GET http://127.0.0.1:8000/api/v1/nazioneapi/?page=2 or other tempatives retrieve always the first 20 records. I have already implemented a function to retrieve the complete list but I would like to be able to extract the data also by page

dpgaspar commented 1 year ago

Hi,

flask-appbuilder ModelRestApi uses Rison or JSON as query parameters:

use: https://127.0.0.1/api/v1/naziopenapi/?q=(page:0,page_size:25)

docs: https://flask-appbuilder.readthedocs.io/en/latest/rest_api.html#lists-and-queries