Flaskで簡単にAPIのページャ機能を作りました〜
とりあえずコードはこんな感じ
from flask import Flask from flask.json import jsonify from flask.globals import request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@localhost/pager' db = SQLAlchemy(app) """ データベースの作成手順は、 1.まず python コンソールで from app import db でインポートして 2.one-to-manyのデータベースを作成する(直接mySqlで作るか、seqel proなどを使用すると楽です ) 3.作成し終わったら、再びpython コンソールで db.create_all() を叩いて完成! """ class Data(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) def to_dict(self): return { 'id': self.id, 'name': self.name } @app.route('/') def index(): """ offset は刻み offset=5であれば5刻みでリクエストを処理 一度にリクエストすると、サーバーに負荷がかかり過ぎてしまうので、 1度目のリクエストは offset=0 2度目のリクエストは offset=5 3度目のリクエストは offset=10 のようにリクエストしていけば、APIのページャとして機能する limitは文字通り上限を設けること """ # request のクエリパラムスからoffset部分を取得する offset = request.args.get('offset', type=int) # request のクエリパラムスからlimit部分を取得する limit = request.args.get('limit', type=int) response = [Data.to_dict(n) for n in Data.query.offset(offset).limit(limit)] return jsonify({'response': response}) if __name__ == '__main__': app.run()
コメントとして結構書いてあるので、こんな感じで使えますよーという例をいくつか提示します
何もしない場合
url -> http://localhost:5000/ # 帰ってくるデータ { "response": [ { "id": 1, "name": "太郎" }, { "id": 2, "name": "一郎" }, { "id": 3, "name": "二郎" }, { "id": 4, "name": "三郎" }, { "id": 5, "name": "金太郎" }, { "id": 6, "name": "武蔵" }, { "id": 7, "name": "john" }, { "id": 8, "name": "david" }, { "id": 9, "name": "matt" }, { "id": 10, "name": "joy" } ] }
offsetとlimitをつける場合
url -> http://localhost:5000/?offset=0&limit=5 { "response": [ { "id": 1, "name": "太郎" }, { "id": 2, "name": "一郎" }, { "id": 3, "name": "二郎" }, { "id": 4, "name": "三郎" }, { "id": 5, "name": "金太郎" } ] } # 次の5件をリクエストするには url - > url -> http://localhost:5000/?offset=5&limit=5 { "response": [ { "id": 6, "name": "武蔵" }, { "id": 7, "name": "john" }, { "id": 8, "name": "david" }, { "id": 9, "name": "matt" }, { "id": 10, "name": "joy" } ] }
offsetとlimitだけでもリクエスト処理やユーザビリティが改善します
簡単なので、是非使うことも検討してみてください!
コメントを残す