summaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2018-03-18 17:53:22 +0200
committerYuval Adam <_@yuv.al>2018-03-18 21:19:25 +0200
commit4fb3c88a9ff67061e4a38f30ca7b6487712913f0 (patch)
tree77da05c54c0ffb95b8b1bc50518ade355a73c59a /app.py
parent6012a0a45c25d1e6ef821bdbf54f463e70dfa41b (diff)
Initial REST support
Diffstat (limited to 'app.py')
-rw-r--r--app.py54
1 files changed, 49 insertions, 5 deletions
diff --git a/app.py b/app.py
index 51a1100..14841aa 100644
--- a/app.py
+++ b/app.py
@@ -1,12 +1,19 @@
import os
from flask import Flask
-from flask import render_template
-from flask.ext.sqlalchemy import SQLAlchemy
+from flask import render_template, request
+from flask_sqlalchemy import SQLAlchemy
+from flask_restful import Resource, Api
+from marshmallow_sqlalchemy import ModelSchema
+
app = Flask(__name__)
-app.config['SQLALCHEMY_DATABASE_URI'] = os.environ['DATABASE_URL']
+app.config.update({
+ 'SQLALCHEMY_DATABASE_URI': os.environ['DATABASE_URL'],
+ 'SQLALCHEMY_TRACK_MODIFICATIONS': False
+})
db = SQLAlchemy(app)
+api = Api(app)
class User(db.Model):
@@ -22,6 +29,40 @@ class User(db.Model):
return '<Name %r>' % self.name
+class UserSchema(ModelSchema):
+ class Meta:
+ model = User
+
+
+class UserResource(Resource):
+ def get(self, user_id):
+ user = User.query.get(user_id)
+ return UserSchema().dump(user)
+
+ def put(self, user_id):
+ user = User.query.get(user_id)
+ UserSchema().load(request.form, instance=user, session=db.session)
+ db.session.commit()
+ return 'updated'
+
+ def delete(self, user_id):
+ user = User.query.get(user_id)
+ db.session.delete(user)
+ db.session.commit()
+
+
+class UserListResource(Resource):
+ def get(self):
+ users = User.query.all()
+ return UserSchema(many=True).dump(users)
+
+ def post(self):
+ user = UserSchema().load(request.form, session=db.session).data
+ db.session.add(user)
+ db.session.commit()
+ return 'created'
+
+
@app.route('/')
def home():
return render_template('index.html')
@@ -33,6 +74,9 @@ def robots():
res.mimetype = 'text/plain'
return res
+api.add_resource(UserListResource, '/users/')
+api.add_resource(UserResource, '/users/<user_id>/')
+
+
if __name__ == '__main__':
- port = int(os.environ.get('PORT', 5000))
- app.run(host='0.0.0.0', port=port, debug=True)
+ app.run(host='0.0.0.0', debug=True)