Рубрики
Без рубрики

Приложение Flask CRUD – Создание, извлечение, обновление и удаление

В этом уроке мы узнаем о CRUD, а затем создадим наше приложение Flask CRUD. Так что давайте начнем !!

Автор оригинала: Pankaj Kumar.

В этом уроке мы узнаем о CRUD, а затем создадим наше приложение Flask CRUD. Так что давайте начнем !!

Что такое CRUD-приложение?

Веб-приложение, которое имеет дело с операциями Создания/извлечения/обновления или удаления , называется CRUD-приложением. Типичным примером приложения CRUD является веб-сайт блога.

Здесь,

  1. Здесь, Здесь,
  2. Здесь, Здесь,

Здесь,

Здесь, Здесь,
Здесь, Здесь,
Здесь, Здесь,
Здесь, Здесь,
Здесь,

Здесь,

Здесь,

Здесь,

  1. Здесь,
  2. См.Список сотрудников.
  3. См.Информацию о конкретном сотруднике.
  4. Обновление информации о сотруднике
  5. Удаление информации о сотруднике

1. Кодирование Models.py

Здесь мы будем использовать Flask_SQLAlchemy и базу данных SQLite.

Сначала установите Flask_SQLAlchemy

pip install flask_sqlalchemy

Теперь создайте models.py файл и добавьте следующий код:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class EmployeeModel(db.Model):
    __tablename__ = "table"

    id = db.Column(db.Integer, primary_key=True)
    employee_id = db.Column(db.Integer(),unique = True)
    name = db.Column(db.String())
    age = db.Column(db.Integer())
    position = db.Column(db.String(80))

    def __init__(self, employee_id,name,age,position):
        self.employee_id = employee_id
        self.name = name
        self.age = age
        self.position = position

    def __repr__(self):
        return f"{self.name}:{self.employee_id}"

Здесь мы просто создаем модель Employee. Проверьте учебник SQLAlchemy , если у вас возникли трудности с пониманием синтаксиса

2. Кодирование основного приложения

Теперь давайте закодируем наш основной файл приложения Flask. Мы начнем с импорта Flask, инициализации приложения flask и настройки сведений о времени выполнения приложения.

from flask import Flask

app = Flask(__name__)

app.run(host='localhost', port=5000)

Теперь нам нужно связать базу данных SQLite с SQLAlchemy. Поэтому добавьте следующий фрагмент кода:

from flask import Flask

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

app.run(host='localhost', port=5000)

Замените <имя_бд> именем, которое вы хотите для своего файла БД.

Кроме того, нам нужно связать экземпляр бд (из models.py ) и создайте файл БД до того, как пользователь обратится к серверу. Так что за это:

from flask import Flask

app =Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

@app.before_first_request
def create_table():
    db.create_all()

app.run(host='localhost', port=5000)

Хорошо, теперь, когда база данных и модели на месте, давайте закодируем наши представления CRUD.

3. Кодирование представления создания

Представление создания должно быть способно выполнять следующие действия:

  • Когда Клиент переходит на эту страницу (метод GET), он должен отобразить форму для получения данных Клиента.
  • При отправке (метод POST) он должен сохранить данные Клиента в базе данных модели сотрудника.

Таким образом, Create View будет:

@app.route('/data/create' , methods = ['GET','POST'])
def create():
    if request.method == 'GET':
        return render_template('createpage.html')

    if request.method == 'POST':
        employee_id = request.form['employee_id']
        name = request.form['name']
        age = request.form['age']
        position = request.form['position']
        employee = EmployeeModel(employee_id=employee_id, name=name, age=age, position = position)
        db.session.add(employee)
        db.session.commit()
        return redirect('/data')

В createpage.html будет содержать HTML – форму:

employee ID

name

age

position

4. Кодирование представлений извлечения

Здесь у нас будет 2 вида:

  • Для отображения списка сотрудников.
  • Для отображения информации об одном сотруднике.

Таким образом, первый Получить список данных представление будет:

@app.route('/data')
def RetrieveDataList():
    employees = EmployeeModel.query.all()
    return render_template('datalist.html',employees = employees)

В datalist.html файл отобразит список сотрудников:

{% for employee in employees %}

{{employee}}


{% endfor %}

Ознакомьтесь с нашим шаблоном колбы, чтобы узнать больше о языке шаблонов.

И второе Получение одного сотрудника Представление будет:

@app.route('/data/')
def RetrieveSingleEmployee(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if employee:
        return render_template('data.html', employee = employee)
    return f"Employee with id ={id} Doenst exist"

Модель сотрудника.query.filter_by(employee_id).first() вернет первого Сотрудника с Employee в БД или вернет None , если Сотрудник с этим идентификатором не существует.

В data.html отображает информацию о сотруднике:

Id

{{employee.employee_id}}


Name

{{employee.name}}


Age

{{employee.age}}


Position

{{employee.position}}


5. Кодирование представления обновления

Представление обновления обновит сведения о сотруднике в базе данных с помощью нового, представленного пользователем.

Следовательно, представление обновления будет:

@app.route('/data//update',methods = ['GET','POST'])
def update(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if request.method == 'POST':
        if employee:
            db.session.delete(employee)
            db.session.commit()

            name = request.form['name']
            age = request.form['age']
            position = request.form['position']
            employee = EmployeeModel(employee_id=id, name=name, age=age, position = position)

            db.session.add(employee)
            db.session.commit()
            return redirect(f'/data/{id}')
        return f"Employee with id = {id} Does nit exist"

    return render_template('update.html', employee = employee)

Пользователь отправит новые данные через Форму. Здесь мы сначала удаляем старую информацию, присутствующую в БД, а затем добавляем новую информацию

В update.html отображает форму для отправки новых сведений:

name

age

position

6. Кодирование представления удаления

Представление “Удалить” просто удалит информацию о сотруднике из файла базы данных.

Вид удаления будет:

@app.route('/data//delete', methods=['GET','POST'])
def delete(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if request.method == 'POST':
        if employee:
            db.session.delete(employee)
            db.session.commit()
            return redirect('/data')
        abort(404)

    return render_template('delete.html')

В delete.html просто повторно подтверждает удаление:

Click YES to confirm Cancel

Если пользователь нажимает Да , то Сотрудник удаляется. Иначе его заберут обратно.

Полный код для приложения CRUD

В models.py :

from flask_sqlalchemy import SQLAlchemy

db =SQLAlchemy()

class EmployeeModel(db.Model):
    __tablename__ = "table"

    id = db.Column(db.Integer, primary_key=True)
    employee_id = db.Column(db.Integer(),unique = True)
    name = db.Column(db.String())
    age = db.Column(db.Integer())
    position = db.Column(db.String(80))

    def __init__(self, employee_id,name,age,position):
        self.employee_id = employee_id
        self.name = name
        self.age = age
        self.position = position

    def __repr__(self):
        return f"{self.name}:{self.employee_id}"

Основное применение колбы:

from flask import Flask,render_template,request,redirect
from models import db,EmployeeModel

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

@app.before_first_request
def create_table():
    db.create_all()

@app.route('/data/create' , methods = ['GET','POST'])
def create():
    if request.method == 'GET':
        return render_template('createpage.html')

    if request.method == 'POST':
        employee_id = request.form['employee_id']
        name = request.form['name']
        age = request.form['age']
        position = request.form['position']
        employee = EmployeeModel(employee_id=employee_id, name=name, age=age, position = position)
        db.session.add(employee)
        db.session.commit()
        return redirect('/data')


@app.route('/data')
def RetrieveList():
    employees = EmployeeModel.query.all()
    return render_template('datalist.html',employees = employees)


@app.route('/data/')
def RetrieveEmployee(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if employee:
        return render_template('data.html', employee = employee)
    return f"Employee with id ={id} Doenst exist"


@app.route('/data//update',methods = ['GET','POST'])
def update(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if request.method == 'POST':
        if employee:
            db.session.delete(employee)
            db.session.commit()
            name = request.form['name']
            age = request.form['age']
            position = request.form['position']
            employee = EmployeeModel(employee_id=id, name=name, age=age, position = position)
            db.session.add(employee)
            db.session.commit()
            return redirect(f'/data/{id}')
        return f"Employee with id = {id} Does nit exist"

    return render_template('update.html', employee = employee)


@app.route('/data//delete', methods=['GET','POST'])
def delete(id):
    employee = EmployeeModel.query.filter_by(employee_id=id).first()
    if request.method == 'POST':
        if employee:
            db.session.delete(employee)
            db.session.commit()
            return redirect('/data')
        abort(404)

    return render_template('delete.html')

app.run(host='localhost', port=5000)

Реализация приложения Flask CRUD

Запустите сервер и перейдите в раздел ” /данные/создать

Создавать

Теперь введите данные и нажмите Отправить . Точно так же я добавил еще несколько. Перейдите в раздел ” /данные

Список данных

Давайте проверим Первый. Перейдите в раздел ” /данные/1

Данные

Теперь давайте перейдем к ” /data/1/update ” и обновим некоторые детали

Обновление

Подробности теперь обновлены. Давайте теперь удалим этого сотрудника. Перейдите в раздел ” /данные/1/удалить

Удалить

Нажмите ” Да ” и вуаля! Сотрудник удаляется

Вывод

Вот и все, ребята !! Все дело было в ГРЯЗНЫХ операциях в колбе. Ознакомьтесь с нашим учебником по API Flask REST, который является приложением CRUD в рамках Flask REST.

Увидимся в следующей статье !!