Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. from flask import Flask
  4. from flask_cors import CORS
  5. from flask_rest_jsonapi import Api, ResourceDetail, ResourceList, ResourceRelationship
  6. from flask_sqlalchemy import SQLAlchemy
  7. from marshmallow_jsonapi.flask import Schema, Relationship
  8. from marshmallow_jsonapi import fields
  9.  
  10. import os
  11. basedir = os.path.abspath(os.path.dirname(__file__))
  12.  
  13. # Create the Flask application
  14. app = Flask(__name__)
  15. cors = CORS(app)
  16. app.config['DEBUG'] = True
  17. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'app.db')
  18.  
  19. db = SQLAlchemy(app)
  20.  
  21. class Band(db.Model):
  22. id = db.Column(db.Integer, primary_key=True)
  23. name = db.Column(db.String)
  24. description = db.Column(db.String)
  25. songs = db.relationship('Song')
  26.  
  27. class Song(db.Model):
  28. id = db.Column(db.Integer, primary_key=True)
  29. name = db.Column(db.String)
  30. rating = db.Column(db.Integer)
  31. bands_id = db.Column(db.Integer, db.ForeignKey('band.id'))
  32. bands = db.relationship('Band', backref=db.backref('song'))
  33.  
  34. db.create_all()
  35.  
  36. class BandSchema(Schema):
  37. class Meta:
  38. type_ = 'bands'
  39. self_view = 'band_one'
  40. self_view_kwargs = {'id': '<id>'}
  41. self_view_many = 'band_many'
  42.  
  43. id = fields.Integer(as_string=True, dump_only=True)
  44. name = fields.Str(required=True)
  45. description = fields.Str()
  46. songs = Relationship(
  47. self_view='band_songs',
  48. self_view_kwargs={'id': '<id>'},
  49. many=True,
  50. include_resource_linkage=True,
  51. schema='SongSchema',
  52. type_="songs",)
  53.  
  54. class SongSchema(Schema):
  55. class Meta:
  56. type_ = 'songs'
  57. self_view = 'song_one'
  58. self_view_kwargs = {'id':'<id>'}
  59. self_view_many = 'song_many'
  60.  
  61. id = fields.Integer(as_string=True, dump_only=True)
  62. name = fields.Str(required=True)
  63. rating = fields.Integer()
  64. bands = Relationship(
  65. schema='BandSchema', type_= 'bands')
  66.  
  67.  
  68. # Create resource managers
  69. class BandMany(ResourceList):
  70. schema = BandSchema
  71. data_layer = {'session': db.session,
  72. 'model': Band}
  73. class BandOne(ResourceDetail):
  74. schema = BandSchema
  75. data_layer = {'session': db.session,
  76. 'model': Band}
  77.  
  78. class SongMany(ResourceList):
  79. schema = SongSchema
  80. data_layer = {'session': db.session,
  81. 'model': Song}
  82. class SongOne(ResourceDetail):
  83. schema = SongSchema
  84. data_layer = {'session': db.session,
  85. 'model': Song}
  86.  
  87. class BandSong(ResourceRelationship):
  88. schema = BandSchema
  89. data_layer = {'session': db.session,
  90. 'model': Band}
  91.  
  92. # Create en
  93. api = Api(app)
  94.  
  95. api.route(BandMany, 'band_many', '/bands')
  96. api.route(BandOne, 'band_one', '/bands/<int:id>')
  97. api.route(SongMany, 'song_many', '/songs')
  98. api.route(SongOne, 'song_one', '/songs/<int:id>')
  99.  
  100. api.route(BandSong,'band_songs', '/bands/<int:id>/relationships/songs' )
  101.  
  102. if __name__ == '__main__':
  103. # Start application
  104. app.run(debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement