Flask farmwork curd

Flask farmwork curd

Sau đây mình sẽ hướng dẫn các bạn thực hiện crud đối với flask farmwork

Đầu tiên chúng ta cần tạo môi trường ảo : venv cho project 

python -m venv .venv

Tiếp theo chúng ta cài đặt flask 

pip install Flask

Ở đây mình dùng mysql là database , đồng thời chúng ta sử dụng Sqlalchemy làm ORM backend cho python đồng thời sử dụng Flask-Migrate để sử dụng để xử lý việc di chuyển cơ sở dữ liệu SQLAlchemy cho các ứng dụng Flask bằng Alembic.

Oke vậy là tiếp theo chúng ta sẽ bắt đầu viết api 

file flask5/rules.py để tạo schema chứa quy tắc dữ liệu nhập vào

from marshmallow import fields, Schema
from config import app


class UserSchema(Schema):
    name = fields.Str()
    description = fields.Str()
    content = fields.Str()

    class Meta:
        strict = True

trong phần model flask5/models.py :

from config import *


class User(db.Model):
    id = db.Column(Integer, primary_key=True)
    name = db.Column(String(128))


class Address(db.Model):
    id = db.Column(Integer, primary_key=True)
    name = db.Column(String(128))
    user_id = db.Column(Integer, ForeignKey('user.id'))

    def __init__(self, name, user_id):
        self.name = name
        self.user_id = user_id


class Category(db.Model):
    id = db.Column(Integer, primary_key=True)
    name = db.Column(String(128))
    description = db.Column(String(128))
    content = db.Column(Text)

    def __init__(self, name, description, content):
        self.name = name
        self.description = description
        self.content = content


class Post(db.Model):
    id = db.Column(Integer, primary_key=True)
    name = db.Column(String(128))
    category_id = db.Column(Integer, ForeignKey('category.id'))
    description = db.Column(String(128))
    content = db.Column(Text)
    view = db.Column(Integer, default=0)

    def __init__(self, name, category_id, description, content, view):
        self.name = name
        self.category_id = category_id
        self.description = description
        self.view = view
        self.content = content

file flask5/config.py

from flask import Flask, render_template, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_caching import Cache
from flask_migrate import Migrate
from sqlalchemy import Column, ForeignKey, Integer, String, Text

config = {
    "DEBUG": True,          # some Flask specific configs
    "CACHE_TYPE": "SimpleCache",  # Flask-Caching related configs
    "CACHE_DEFAULT_TIMEOUT": 300
}

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:Ahiendam123@localhost:6603/database1'
db = SQLAlchemy(app)
app.config.from_mapping(config)
cache = Cache(app)
cache.init_app(app)

file flask5/index.py

from models import *
from rules import *
from flask_marshmallow import Marshmallow
import json
from flask_migrate import Migrate
from flask import request

migrate = Migrate(app, db)


@app.route('/', methods=['GET'])
# @cache.cached(timeout=300, key_prefix=request.form.get('page'))
def index():
    page = request.args.get('page', 1, type=int)
    per_page = request.args.get('per_page', 10, type=int)
    data_return = []
    try:
        # Retrieve the categories from the database
        datas = Category.query.order_by('id').paginate(page=page, per_page=per_page, error_out=False)
        # Convert the categories to JSON format using the UserSchema
        schema = UserSchema()
        response = {
            'data': [schema.dump(data) for data in datas.items],
            'next_page': datas.next_num if datas.has_next else None,
            'prev_page': datas.prev_num if datas.has_prev else None,
            'total': datas.total
        }
        return jsonify(response)
    except Exception as error:
        print(f"Error occurred while fetching categories: {error}")
        return jsonify({'message': 'An error occurred while retrieving categories.'}), 500


@app.route('/', methods=['POST'])
def nhap():
    in_data = {}
    result = Category(name=request.form["name"], description=request.form["description"],
                      content=request.form["content"])
    db.session.add(result)
    db.session.commit()
    return jsonify(result.id)


@app.route("/category/<id>")
def categoryget(id):
    category = Category.query.get(id)
    schema = UserSchema()
    json_data = schema.dump(category)
    return json_data


@app.route("/category/delete/<int:id>", methods=['DELETE'])
def categorydelete(id):
    category = Category.query.get(id)
    db.session.delete(category)
    db.session.commit()
    schema = UserSchema()
    return schema.dump(category)


@app.route('/user', methods=['GET'])
def user():
    data_return = []
    data = User.query.all()
    schema = UserSchema(many=True)
    json_data = schema.dumps(data)
    return json_data


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

Lưu ý :

Trong phần flask migrate bạn cần thực hiện lệnh command như sau : flask --app index.py db init 

Link demo : https://github.com/shang9x123/Flask/tree/main/flask5_crud