Browse Source

Backend Boilerplate

master
Eddie 2 years ago
parent
commit
2539a301e6
  1. 0
      __init__.py
  2. 13
      app.py
  3. 40
      config.py
  4. 10
      models.py
  5. 18
      rebuild_db.py
  6. 25
      schemes.py
  7. 46
      services.py
  8. 5
      wsgi.py

0
__init__.py

13
app.py

@ -0,0 +1,13 @@
from services import (UserService, UserListService)
from config import app, api, docs, CORS
#*______________ Service Registration ______________
api.add_resource(UserService, '/api/user/<user_id>')
docs.register(UserService)
api.add_resource(UserListService, '/api/list/user')
docs.register(UserListService)
#*______________ Application Creation ______________
if __name__ == '__main__':
app.run(debug=True)

40
config.py

@ -0,0 +1,40 @@
from flask import Flask
from flask_restful import Api
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
from flask_apispec.extension import FlaskApiSpec
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
#!______________ App Setup _____________ _
app = Flask(__name__, static_url_path='/static')
api_v1_cors_config = {
"origins": ["http://localhost:5000"]
}
#!______________ CORS Setup _____________ _
CORS(app, resources={"/api/*": api_v1_cors_config})
#!______________ DB Setup ______________
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///markdown.db'
app.config['SECRET_KEY'] = 'InputSecretKeyHere'
db = SQLAlchemy(app)
#!______________ Marshmallow Setup ______________
ma = Marshmallow(app)
#!______________ API & Swagger Setup ______________
api = Api(app)
app.config.update({
'APISPEC_SPEC': APISpec(
title='Markdown Presenter',
version='v0.0.1',
plugins=[MarshmallowPlugin()],
openapi_version='2.0.0'
),
'APISPEC_SWAGGER_URL': '/swagger/',
'APISPEC_SWAGGER_UI_URL': '/swagger-ui/'
})
#!______________ Docs Setup ______________
docs = FlaskApiSpec(app)

10
models.py

@ -0,0 +1,10 @@
from config import db
#!______________ DB Models ______________
class User(db.Model):
__tablename__ = "User"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
image = db.Column(db.String())
description = db.Column(db.String())

18
rebuild_db.py

@ -0,0 +1,18 @@
import os
from config import db
from termcolor import colored
from config import app
def RebuildDatabase():
if os.path.exists('acceth.db'):
print(colored('Removing existing DB', 'blue'))
os.remove('acceth.db')
with app.app_context():
db.create_all()
db.session.commit()
print(colored('New DB created.', 'green'))
if __name__ == '__main__':
RebuildDatabase()

25
schemes.py

@ -0,0 +1,25 @@
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from config import db
from models import User
from marshmallow import fields
#*______________ Base Schema ______________
class BaseScheme(SQLAlchemyAutoSchema):
def __str__(self):
return str(self.__class__) + ": " + str(self.__dict__)
class Meta:
ordered = True
sqla_session = db.session
include_fk = True
load_instance = True
#*______________ User Schemes ______________
class UserSchema(BaseScheme):
class Meta(BaseScheme.Meta):
model = User
id = fields.Int()
name = fields.Str()
class UserInsertSchema(UserSchema):
user_id = fields.Int()
class UserResponseSchema(UserSchema):
name = fields.Str()

46
services.py

@ -0,0 +1,46 @@
from flask_apispec import marshal_with, doc, use_kwargs
from flask_apispec.views import MethodResource
from flask_restful import Resource
from schemes import (UserSchema, UserResponseSchema)
from config import db
from models import User
#!______________ User ______________
class UserService(MethodResource, Resource):
@doc(description='Get User by User_id', tags=['User'])
@marshal_with(UserResponseSchema)
def get(self, user_id):
quser = db.session.query(User).get(user_id)
return UserSchema().dump(quser)
@doc(description='Add new User', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def post(self, user, user_id):
db.session.add(user)
db.session.commit()
return UserSchema().dump(user)
@doc(description='Update User with PUT', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def put(self, user, user_id):
db.session.add(user)
db.session.commit()
return UserSchema().dump(user)
@doc(description='Delete existing User', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def delete(self, user, user_id):
user = db.session.query(User).get(user_id)
db.session.delete(user)
db.session.commit()
return UserSchema().dump(user)
class UserListService(MethodResource, Resource):
@doc(description='Get a List of all User', tags=['List'])
@marshal_with(UserResponseSchema(many=True))
def get(self):
users = db.session.query(User).all()
return UserSchema(many=True).dump(users)

5
wsgi.py

@ -0,0 +1,5 @@
from config import app
if __name__ == "__main__":
app.run()
Loading…
Cancel
Save