019/Flask-RESTful-Api

/applications/models.py
# Flask-RESTful-Api
A simple flask-restful API application, using SQLAlchemy as ORM, with RESTful API interface

/applications/main.py
from flask import Flask
from flask_restful import Api, Resource, reqparse
from flask_cors import CORS
from applications import models
from applications import config
from applications import db
from applications import api

# Setup the Flask app
app = Flask(__name__)
CORS(app)
app.config['SQLALCHEMY_DATABASE_URI'] = config.DATABASE_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['API_NAME'] = "Flask API"
app.config['API_VERSION'] = "1.0.0"

# Setup the Flask-Restful Api
api = Api(app)

# Setup the database
db = models.init_db(app)

# Setup the api
api.add_resource(api.UserResource, '/api/users', endpoint='users')
api.add_resource(api.UserDetailResource, '/api/users/<int:user_id>', endpoint='user')
api.add_resource(api.NoteResource, '/api/notes', endpoint='notes')
api.add_resource(api.NoteDetailResource, '/api/notes/<int:note_id>', endpoint='note')
api.add_resource(api.LoginResource, '/api/login', endpoint='login')
api.add_resource(api.RegisterResource, '/api/register', endpoint='register')

if __name__ == '__main__':
app.run(debug=True)

/applications/models.py
from flask_restful import Resource
from applications import config
from applications import db
from applications import models
from flask import request
from sqlalchemy import desc
import datetime

class UserResource(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, required=True)
parser.add_argument('password', type=str, required=True)
parser.add_argument('email', type=str, required=True)
args = parser.parse_args()

user = models.User(username=args['username'], password=args['password'], email=args['email'])
db.session.add(user)
db.session.commit()

return {"message": "User created"}, 201

def get(self):
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('email', type=str)
args = parser.parse_args()

if args['username']:
users = models.User.query.filter_by(username=args['username']).all()
elif args['email']:
users = models.User.query.filter_by(email=args['email']).all()

if users:
return {"users": [user.to_dict() for user in users]}, 200
return {"message": "No users found"}, 204

class UserDetailResource(Resource):
def get(self, user_id):
user = models.User.query.get(user_id)
if user:
return {"user": user.to_dict()}, 200
return {"message": "User not found"}, 404

def put(self, user_id):
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('email', type=str)
args = parser.parse_args()

user = models.User.query.get(user_id)
if user:
if args['username']:
user.username = args['username']
if args['email']:
user.email = args['email']
db.session.commit()

return {"message": "User updated"}, 200
return {"message": "User not found"}, 404

def delete(self, user_id):
user = models.User.query.get(user_id)
if user:
db.session.delete(user)
db.session.commit()

return {"message": "User deleted"}, 200
return {"message": "User not found"}, 404

class NoteResource(Resource):
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('user_id', type=int)
parser.add_argument('title', type=str)
parser.add_argument('created', type=str)
args = parser.parse_args()

if args['user_id']:
notes = models.Note.query.filter_by(user_id=args['user_id']).all()
elif args['title']:
notes = models.Note.query.filter_by(title=args['title']).all()
elif args['created']:
notes = models.Note.query.filter_by(created=args['created']).all()

if notes:
return {"notes": [note.to_dict() for note in notes]}, 200
return {"message": "No notes found"}, 204

def post(self):
parser = reqparse.RequestParser()
parser.add_argument('user_id', type=int, required=True)
parser.add_argument('title', type=str, required=True)
parser.add_argument('content', type=str, required=True)
parser.add_argument('created', type=str, required=True)
args = parser.parse_args()

note = models.Note(user_id=args['user_id'], title=args['title'], content=args['content'], created=args['created'])
db.session.add(note)
db.session.commit()

return {"message": "Note created"}, 201

def put(self, note_id):
parser = reqparse.RequestParser()
parser.add_argument('user_id', type=int)
parser.add_argument('title', type=str)
parser.add_argument('content', type=str)
parser.add_argument('created', type=str)
args = parser.parse_args()

note = models.Note.query.get(note_id)
if note:
if args['user_id']:
note.user_id = args['user_id']
if