-
-
Save ekapujiw2002/976bb905e0b2354e3b3d966b2471d24c to your computer and use it in GitHub Desktop.
Python Database Driven REST API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask, request, jsonify | |
from flask_sqlalchemy import SQLAlchemy | |
from flask_marshmallow import Marshmallow | |
from flask_restful import Resource, Api | |
app = Flask(__name__) | |
api = Api(app) | |
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' | |
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False | |
db = SQLAlchemy(app) | |
ma = Marshmallow(app) | |
class User(db.Model): | |
id = db.Column(db.Integer, primary_key=True) | |
username = db.Column(db.String(32), unique=True) | |
password = db.Column(db.String(32)) | |
first_name = db.Column(db.String(32)) | |
last_name = db.Column(db.String(32)) | |
age = db.Column(db.Integer) | |
def __init__(self, username, password, first_name, last_name, age): | |
self.username = username | |
self.password = password | |
self.first_name = first_name | |
self.last_name = last_name | |
self.age = age | |
class UserSchema(ma.Schema): | |
class Meta: | |
fields = ('id', 'username', 'password', 'first_name', 'last_name', 'age') | |
user_schema = UserSchema() | |
users_schema = UserSchema(many=True) | |
class UserManager(Resource): | |
@staticmethod | |
def get(): | |
try: id = request.args['id'] | |
except Exception as _: id = None | |
if not id: | |
users = User.query.all() | |
return jsonify(users_schema.dump(users)) | |
user = User.query.get(id) | |
return jsonify(user_schema.dump(user)) | |
@staticmethod | |
def post(): | |
username = request.json['username'] | |
password = request.json['password'] | |
first_name = request.json['first_name'] | |
last_name = request.json['last_name'] | |
age = request.json['age'] | |
user = User(username, password, first_name, last_name, age) | |
db.session.add(user) | |
db.session.commit() | |
return jsonify({ | |
'Message': f'User {first_name} {last_name} inserted.' | |
}) | |
@staticmethod | |
def put(): | |
try: id = request.args['id'] | |
except Exception as _: id = None | |
if not id: | |
return jsonify({ 'Message': 'Must provide the user ID' }) | |
user = User.query.get(id) | |
username = request.json['username'] | |
password = request.json['password'] | |
first_name = request.json['first_name'] | |
last_name = request.json['last_name'] | |
age = request.json['age'] | |
user.username = username | |
user.password = password | |
user.first_name = first_name | |
user.last_name = last_name | |
user.age = age | |
db.session.commit() | |
return jsonify({ | |
'Message': f'User {first_name} {last_name} altered.' | |
}) | |
@staticmethod | |
def delete(): | |
try: id = request.args['id'] | |
except Exception as _: id = None | |
if not id: | |
return jsonify({ 'Message': 'Must provide the user ID' }) | |
user = User.query.get(id) | |
db.session.delete(user) | |
db.session.commit() | |
return jsonify({ | |
'Message': f'User {str(id)} deleted.' | |
}) | |
api.add_resource(UserManager, '/api/users') | |
if __name__ == '__main__': | |
app.run(debug=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment