테스트 사이트 - 개발 중인 베타 버전입니다

Flask로 기본 Hello World 찍기 및 CRUD

· 5년 전 · 2202 · 1

https://youtu.be/PTZiDnuC86g

 

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)

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 1개

5년 전
많은 도움이 됩니다.
감사합니다.

게시글 목록

번호 제목
186
185
183
182
181
180
179
178
177
176
175
174
173
171
170
169
168
167
166
165
164
162
161
160
159
158
157
156
155
154