Flask로 기본 Hello World 찍기 및 CRUD 정보
Flask로 기본 Hello World 찍기 및 CRUD
본문
Flask https://www.palletsprojects.com/p/flask/
SQLAlchemy https://www.sqlalchemy.org/
Flask-Marshmallow https://flask-marshmallow.readthedocs.io/en/latest/
Postman https://www.getpostman.com/
버츄얼환경 구축
먼저 Python 3.8 설치 https://www.python.org/
https://sir.kr/so_python/155 참조
pipenv설치
pip install pipenv
버츄얼 환경으로 들어가기
pipenv shell
버츄얼 환경에서 필요한 패키지 설치하기
pipenv install flask flask-sqlalchemy flask-marshmallow marshmallow-sqlalchemy
시작 파일 만들기
touch app.py
app.py에
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os
# Init app
app = Flask(__name__)
@app.route('/', methods=['GET'])
def get():
return jsonify({ 'msg': 'Hello World'})
# Run Server
if __name__ == "__main__":
app.run(debug=True)
입력한 후에
버츄얼 환경내에서
python app.py를 실행시키고.
localhost:5000으로 접속하면
{
"msg": "Hello World"
}
가 나옵니다.
postman을 사용해서 접속해 보세요.. 앞으로 post, put, delete등을 테스트 해 볼려면
꼭 필요합니다.
다음으로 GET, POST, PUT, DELETE를 구현해 본 코드입니다. (버전업 되면서 strict가 없어졌네요)
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os
# Init app
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
# Database
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Init db
db = SQLAlchemy(app)
# Init ma
ma = Marshmallow(app)
# Product Class/Model
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
description = db.Column(db.String(200))
price = db.Column(db.Float)
qty = db.Column(db.Integer)
def __init__(self, name, description, price, qty):
self.name = name
self.description = description
self.price = price
self.qty = qty
# Product Schema
class ProductSchema(ma.Schema):
class Meta:
fields = ('id', 'name', 'description', 'price', 'qty')
# Init schema
product_schema = ProductSchema()
products_schema = ProductSchema(many=True)
# Create a Product
@app.route('/product', methods=['POST'])
def add_product():
name = request.json['name']
description = request.json['description']
price = request.json['price']
qty = request.json['qty']
new_product = Product(name, description, price, qty)
db.session.add(new_product)
db.session.commit()
return product_schema.jsonify(new_product)
# Get All Products
@app.route('/product', methods=['GET'])
def get_products():
all_products = Product.query.all()
result = products_schema.dump(all_products)
return jsonify(result)
# Get Single Products
@app.route('/product/<id>', methods=['GET'])
def get_product(id):
product = Product.query.get(id)
return product_schema.jsonify(product)
# Update a Product
@app.route('/product/<id>', methods=['PUT'])
def update_product(id):
product = Product.query.get(id)
name = request.json['name']
description = request.json['description']
price = request.json['price']
qty = request.json['qty']
product.name = name
product.description = description
product.price = price
product.qty = qty
db.session.commit()
return product_schema.jsonify(product)
# Delete Product
@app.route('/product/<id>', methods=['DELETE'])
def delete_product(id):
product = Product.query.get(id)
db.session.delete(product)
db.session.commit()
return product_schema.jsonify(product)
# Run Server
if __name__ == "__main__":
app.run(debug=True)
0
댓글 1개

감사합니다.