2016-09-12 12 views
1

데이터베이스에서 항목을 반환하는 API를 개발 중입니다. 나는 Flask-SQLAlchemy, Flask-Marshmallow, Flask-Admin, Docker를 모두 사용하여 패키지하고 있습니다.API를 통해 DB 콘텐츠를 노출하는 Flask-Marshmallow 관련 문제

하나의 파일에서 Packages.py 나는 데이터베이스와 관련하여 다음 코드를 가지고있다. PckagesSchema 클래스는 Flash-Marshmallow 작업을 시도 할 때 추가 한 클래스입니다.

class Packages(db.Model): 
    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    trackingnumber = db.Column(db.String(15)) 
    email = db.Column(db.String(80)) 
    localid = db.Column(db.String(80)) 

class PackagesSchema(ma.ModelSchema): 
    class Meta: 
     model = Packages 

메인 파일에 나는 API GET 요청을 처리 할 부분을 아래로 더 다음 코드

from app.models import Packages, PackagesSchema 
packages_schema = PackagesSchema() 
db.create_all() 

의 조각하고 있습니다.

@app.route('/packages', methods=['GET']) 
def get_packages(): 
    result = packages_schema.dump(Packages).data 
    return jsonify(result) 

는 순간이 반환

{ 
    "email": "Packages.email", 
    "localid": "Packages.localid", 
    "trackingnumber": "Packages.trackingnumber" 
} 

그러나, 확실히 플라스크-관리자 응용 프로그램이 표시 할 때 데이터베이스에 뭔가가있다.

플라스크 마쉬멜로와 함께 일하는 것은 나의 첫날이다. 그래서 나는 그다지 경험이 없으며 어떤 도움도 감사 할 것이다. 나는 https://flask-marshmallow.readthedocs.io/en/latest/ 을 읽었지만 아직도 붙어 있습니다.

+0

이 부분은 result ='packages_schema.dump (Packages) .data'가 괄호 안에있는 쿼리 여야한다고 생각합니다. 그래서 'packages_schema.dump (Packages.query.all()). data'와 같은 것입니다. – GMarsh

+0

BTW. 협약은 테이블 이름이 단수이어야한다는 것입니다. 따라서 모델의 클래스 이름을 패키지에서 패키지로 변경하는 것이 낭비 될 수 있습니다. – GMarsh

답변

0

난 그냥 마시 멜로에 약간의 최대 닦았 :

@app.route('/packages', methods=['GET']) 
def get_packages(): 
    packages = Packages.query.all() 
    result = packages_schema.dump(packages).data 
    return jsonify(result) 

가 당신에게 모든 것을 제공해야합니다. 많은 레코드를 반환하는 경우 packages_schema = PackagesSchema(many=True)을 추가해야합니다.

또한 어떤 버전의 플라스크를 실행 중인지 잘 모르겠지만 최신 릴리스 이전에는 jsonify가 목록에서 호출 할 수 없기 때문에 여기서는 작동하지 않는다고 생각합니다. 머리를 위로 올려라.

+0

조언을 주셔서 대단히 감사합니다. 업데이트 된 코드를 사용하여 작업하고 있습니다. 그것은'packages_schema = PackagesSchema (many = True)'가 매우 중요하다는 것을 알게되었습니다! 나는 테이블 이름도 바꿀 것이다. 다시 한번 감사드립니다. –