3

MongoDB を使用して SPA (Angular) の Python バックエンドを構築しています。

ここに私が使用するものがあります: Python 3.4MongoDB 3Flaskflask-mongoengineおよびflask-restful

これで、バックエンドから次の JSON を受け取ります。

[
    {
        "_id": {
            "$oid": "55c737029380f82fbf52eec3"
        },
        "created_at": {
            "$date": 1439129906376
        },
        "desc": "Description.....",
        "title": "This is title"
    },
    etc...
]

そして、私はそのようなものを受け取りたい:

[
    {
        "_id": "55c737029380f82fbf52eec3",
        "created_at": 1439129906376,
        "desc": "Description.....",
        "title": "This is title"
    },
    etc...
]

今のところ私のコード:

from flask import json
from vinnie import app
from flask_restful import Resource, Api
from vinnie.models.movie import Movie

api = Api(app)

class Movies(Resource):
    def get(self):
        movies = json.loads(Movie.objects().all().to_json())
        return movies

api.add_resource(Movies, '/movies')

モデル:

import datetime
from vinnie import db

class Movie(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    desc = db.StringField(required=True)

    def __unicode__(self):
        return self.title

フロントエンド用に便利な JSON をフォーマットする最良の方法は何ですか?

4

2 に答える 2

1

flask-restful私が使用している拡張機能の問題に対する適切な解決策を見つけました。

モジュールを提供しfieldsます。

Flask-RESTful は、応答で実際にレンダリングするデータを制御する簡単な方法を提供します。fields モジュールを使用すると、リソースで必要なオブジェクト (ORM モデル/カスタム クラスなど) を使用できます。fields を使用すると、応答をフォーマットおよびフィルター処理できるため、内部データ構造の公開について心配する必要がありません。

また、コードを見ると、どのデータがレンダリングされ、どのようにフォーマットされるかが非常に明確です。

例:

from flask_restful import Resource, fields, marshal_with

resource_fields = {
    'name': fields.String,
    'address': fields.String,
    'date_updated': fields.DateTime(dt_format='rfc822'),
}

class Todo(Resource):
    @marshal_with(resource_fields, envelope='resource')
    def get(self, **kwargs):
        return db_get_todo()  # Some function that queries the db

Flask-RESTful 出力フィールドのドキュメント

于 2015-08-22T07:44:44.740 に答える