Backbone.js と Flask (および Flask-sqlalchemy) を学習しています。私が Flask を選んだのは、RESTful インターフェイスを実装する Backbone と相性が良いと読んだからです。私は現在、このモデルを(多かれ少なかれ)使用するコースに従っています:
class Tasks(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), unique=True)
completed = db.Column(db.Boolean, unique=False, default=False)
def __init__(self, title, completed):
self.title = title
self.completed = completed
def json_dump(self):
return dict(title=self.title, completed=self.completed)
def __repr__(self):
return '<Task %r>' % self.title
json_dump
JSON をブラウザーに送信するには、メソッドを追加する必要がありました。そうしないと、次のようなエラーが発生するobject is not JSON serializable
ため、最初の質問は次のとおりです。
Flask でシリアル化を行うより良い方法はありますか? シリアライズ可能なオブジェクトとそうでないオブジェクトがあるようですが、一般的には、思ったほど簡単ではありません。
しばらくして、各タイプのリクエストを処理するために、次のビューにたどり着きました。
@app.route('/tasks')
def tasks():
tasks = Tasks.query.all()
serialized = json.dumps([c.json_dump() for c in tasks])
return serialized
@app.route('/tasks/<id>', methods=['GET'])
def get_task(id):
tasks = Tasks.query.get(int(id))
serialized = json.dumps(tasks.json_dump())
return serialized
@app.route('/tasks/<id>', methods=['PUT'])
def put_task(id):
task = Tasks.query.get(int(id))
task.title = request.json['title']
task.completed = request.json['completed']
db.session.add(task)
db.session.commit()
serialized = json.dumps(task.json_dump())
return serialized
@app.route('/tasks/<id>', methods=['DELETE'])
def delete_task(id):
task = Tasks.query.get(int(id))
db.session.delete(task)
db.session.commit()
serialized = json.dumps(task.json_dump())
return serialized
@app.route('/tasks', methods=['POST'])
def post_task():
task = Tasks(request.json['title'], request.json['completed'])
db.session.add(task)
db.session.commit()
serialized = json.dumps(task.json_dump())
return serialized
私の意見では、少し冗長に思えます。繰り返しますが、それらを実装する適切な方法は何ですか? Flask で RESTful インターフェイスを提供するいくつかの拡張機能を見てきましたが、それらは非常に複雑に見えます。
ありがとう