擅长:python、mysql、java
<p>以下是通常对我来说足够的:</p>
<p>我创建了一个用于模型的序列化mixin。序列化函数基本上获取SQLAlchemy检查器公开的任何属性并将其放入dict中</p>
<pre><code>from sqlalchemy.inspection import inspect
class Serializer(object):
def serialize(self):
return {c: getattr(self, c) for c in inspect(self).attrs.keys()}
@staticmethod
def serialize_list(l):
return [m.serialize() for m in l]
</code></pre>
<p>现在需要做的就是用<code>Serializer</code>mixin类扩展SQLAlchemy模型。</p>
<p>如果有不希望公开的字段或需要特殊格式的字段,只需重写模型子类中的<code>serialize()</code>函数。</p>
<pre><code>class User(db.Model, Serializer):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
password = db.Column(db.String)
# ...
def serialize(self):
d = Serializer.serialize(self)
del d['password']
return d
</code></pre>
<p>在控制器中,您只需调用结果上的<code>serialize()</code>函数(如果查询结果为列表,则调用<code>serialize_list(l)</code>):</p>
<pre><code>def get_user(id):
user = User.query.get(id)
return json.dumps(user.serialize())
def get_users():
users = User.query.all()
return json.dumps(User.serialize_list(users))
</code></pre>