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