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

Создание приложения CRUD с использованием Flask и Sqlalchemy

Flask – это библиотека Python, которая позволяет создавать динамические веб -приложения с помощью Python. Флота обладает отличными способностями … Tagged с помощью Python, Postgres, Database, Orm.

Flask – это библиотека Python, которая позволяет создавать динамические веб -приложения с помощью Python.

У Флайки есть отличные силы, которые мы будем изучать через минуту.

В этом уроке мы будем создавать простое приложение TODO, используя колбу вместе с SQLite Используя наш ORM, т.е. flask_sqlalchemy и Jinja2 для использования великих способностей внутри HTML.

ORM означает реляционное отображение объекта, означающее, что вы можете взаимодействовать с базой данных, используя свой язык выбора вместо использования запросов SQL.

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

Вам просто нужно изменить URL -адрес базы данных и его сделать (просто -Пези).

Хорошо, начнем с кода.

Прежде всего, что вам нужно сделать, это создать папку с именем вашего приложения например, FlasktodoApp

Внутри папки Создайте новую папку под названием Venv

Мы собираемся создать виртуальную среду, чтобы колба запустила внутри. Откройте свой проект в VSCODE и перейдите к терминалу Тип

python3 -m venv venv

тогда Тип для пользователей Mac

. Venv/bin/active.fish

Для типа пользователей Windows

Venv/bin/Active

и ваша среда будет создана. Теперь создайте еще две папки внутри проекта, но за пределами папки Venv, а именно Шаблоны и статический

Шаблон – это место, где будут сохранены все шаблоны, т.е. HTML CSS -файлы И если у вас есть статический файл, как изображение или что -то, что будет сохранено внутри статической папки. Ваша структура папок должна выглядеть так Теперь создайте файл, а именно app.py и введите этот код внутри этого:-

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():   
    return "

Hello world from flask

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

Если вы внимательно посмотрите, здесь многое происходит

  • Сначала @app.route используется для объявления маршрута для веб -страницы («/» означает страницу индекса, то есть abc.com)
  • Тогда мы говорим приложению работать в режиме отладки (пока Мы создаем приложение полностью, чем мы можем перейти к производству, не подталкивайте это к производству).

Вы можете проверить это приложение, перейдя на терминал и набрав Python app.py

и он покажет вам, где он работает, например http://127.0.0.1:5000/ это дефолт. Отправляйся туда и увидишь магию 🥳.

Большой Итак, мы только что сделали простую веб -страницу, которая показывает P метка внутри. Но что, если мы хотим отобразить целую веб -страницу с некоторыми классными изображениями, текстами, заголовками и всем этим. Вот где встроенный в render_template Флэста вступает в игру.

  • Создайте файл внутри ваших шаблонов, например, home.html
  • Напишите любой HTML, который вы хотели бы показать пользователю
  • Возвращайтесь к своему app.py
  • Внутри этого файла код будет выглядеть так сейчас
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def hello_world():   
    return render_template('home.html')

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

В настоящее время Снова перейдите к URL -адресу, обновите страницу и посмотрите, как происходит волшебство

Если ваша веб -страница работает правильно, это удивительно, поздравляю вас 🥳🥳. Первая часть приложения сделана. Теперь для части базы данных мы будем использовать SQLite для базы данных и FlaskSqlalchemy в качестве ORM, как уже обсуждалось, и для того, чтобы данные показали пользователю, мы будем использовать Jinja2 для этого.

Итак, начнем.

Сначала установить flask_sqlalchemy by PIP установить flask_sqlalchemy и это должно быть установлено для вас.

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

from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db=SQLAlchemy(app)

Введите этот код в одном и том же файле app.py.

в настоящее время Для создания таблицы в базе данных нам нужно использовать классы в Python для создания такой модели

class Todo(db.Model):
    sno=db.Column(db.Integer,primary_key=True)
    title=db.Column(db.String(200),nullable=False)
    description = db.Column(db.String(200), nullable=False)
    def __repr__(self) :
        return "{} is the title and {} is the description".format(self.title,self.description)


Здесь вы можете видеть, что мы создаем класс для таблицы Todo с 3 столбцами:-

  • S.no это будет действовать как основной ключ и будет Авто генерируется базой данных
  • Название Todo
  • Описание Тодо.

Отлично, теперь давайте создадим базу данных в первый раз.

  • Перейти к своему терминалу
  • Тип Python и нажмите Enter
  • Теперь тип из приложения импорт db и нажмите Enter
  • затем введите db.create_all () и ударить войти
  • Вы должны увидеть файл todo.db, созданный в вашем проекте, так как мы дали URL -адрес базы данных в качестве локального файла

Отлично, если все работает отлично, тогда поздравляю, ваша база данных теперь создана.

Ваша база данных создана, ваша таблица создана с столбцами, которые вы хотели иметь. Идеальный.

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

  
Title Description
  • Что здесь важно, вы даете атрибут имени своим входным данным
  • Давайте также создадим таблицу, чтобы продемонстрировать Todos, поступающие из базы данных
 
  • Title
  • Time
  • Description

Мы будем использовать Jinja для Loop здесь, чтобы показать данные, но сначала давайте получим работу C (Create).

Итак, давайте создадим нашу конечную точку для создания данных в нашей базе данных.

@app.route("/",methods=['POST'])
def main_page():
    if request.method=='POST':
        title=request.form['title']
        description=request.form['description']
        todo=Todo(title=title ,description=description)
        db.session.add(todo)
        db.session.commit()
    alltodos=Todo.query.all()
    return render_template('index.html',todos=alltodos)

  • Для добавления значений в вашу базу данных команда db.session.add (your_data_object_here)
  • Он не будет сохранен, если вы не совершаете его, так что db.session.commit ()
  • Идеальный
  • Здесь вы можете видеть, что мы проверяем, что, если представлен запрос, является запросом POST, получите данные из входов и создайте объект TODO с деталями, которые вы хотите сохранить, а затем добавьте в базу данных.
  • Если запрос не является запросом по почте, получите все тодо, которые сохраняются в базе данных, и отправьте их на веб -страницу с помощью Jinja. (Здесь мы назвали его Todos, который будем использовать на веб -странице).
  • В настоящее время Перейдите на свою веб -страницу и сделайте следующие изменения
 {% for user in todos %}
     
  • {{loop.index}}
  • {{user.title}}
  • {{user.description}}
  • {% endfor %}
    • Это для цикла, которая дается нам Джинджа, и мы можем его использовать.
    • Мы также поместили кнопки для удаления и обновления TODO, но давайте пока не игнорируем это.
    • Таким образом, вы можете видеть, что мы извлекли название и описание из нашего массива Todos, который мы получаем.
    • Loop.index – это индекс, так же, как у нас есть индекс в любом цикле на любом языке, это просто используется для того, чтобы дать число TODO.

    ОК 👍 Большая часть тяжелой работы сделана.

    Давайте посмотрим на некоторые команды SQLalchemy, которые мы можем использовать

    Мы уже видели

    • db.session.add ()
    • db.commit ()

    У нас также есть

    • db.session.filter_by (критерии к фильтру, например) Это используется для фильтрации базы данных на основе критериев, которые мы предоставляем, например, отфильтруйте базу данных, и получить только эту строку, где у нас есть, и это даст вам. Теперь, если база данных имеет более 1 с теми же критериями, она даст вам все это, поэтому мы сможем подготовить ее с .first () Чтобы получить только первый экземпляр.

    Тогда у нас также есть db.session.delete (todo_to_delete)

    Ok ! Так что до сейчас, если вы запустите код, вы сможете просмотреть все тодо, которые там есть, а также сохранить новые TODO в базе данных.

    Теперь давайте удалим их. Для удаления любого, чтобы сделать что -то уникальное только для него, например, Здесь у нас есть SNO, который является основным ключом, и это будет уникальным для каждого TODO. ОК, давайте создадим конечную точку для удаления.

    @app.route("/delete/")
    def delete(sno):
        deletetodo = Todo.query.filter_by(sno=sno).first()
        db.session.delete(deletetodo)
        db.session.commit()
        return redirect("/")
    

    Легко, верно

    • Итак, здесь вы можете видеть, что конечная точка нуждается в SNO, который будет целочисленным значением, а затем мы передаем это функции
    • То, что мы тогда делаем, запрашиваем базу данных, а затем отфильтровывают точный TODO из базы данных
    • Затем передайте это Todo функции Delete
    • Затем мы совершаем изменения
    • Большой ! Как только все изменения будут сохранены, мы перенаправляем пользователя обратно на страницу индекса, используя перенаправление модуль импортируется из колбы

    Сладкий ! Теперь вы сможете также удалить свой Todos. Теперь мы можем

    • Создайте Todo
    • Удалить тодо
    • И просмотреть все тодос

    Теперь, чтобы обновить TODO, это тоже очень просто Позвольте мне сломать это до очков для вас

    • Сначала создайте конечную точку для обновления, где мы получим снег, чтобы сделать (так же, как мы сделали для удаления)
    • Затем создайте новую веб -страницу для формы обновления TODO
    • Отправьте Todo, который мы доберемся с конечной точки на эту страницу так же, как и в конечной точке зрения для всех Todos.
    • Затем, как только вы получите данные там, как только пользователь нажимает на обновление, отправьте запрос в ту же конечную точку, но используя Пост запрос .
    • И в конечной точке мы проверим, что если запрос является обновлением запроса сообщения TODO, а затем перенаправить пользователя обратно на страницу индекса.

    Давайте кодируем это.

    • У нас уже есть кнопка для обновления todo .so Давайте создадим конечную точку.
    @app.route("/updatetodo/",methods=['POST'])
    def update_todo(sno):
    
         if request.method == 'POST':
            updatetodo = Todo.query.filter_by(sno=sno).first()
            title = request.form['title']
            description = request.form['description']
            todo = Todo(title=title, description=description)
            updatetodo.title=title
            updatetodo.description=description
            db.session.commit()
            return redirect("/")
        updatetodo = Todo.query.filter_by(sno=sno).first()
        return render_template('update.html',
    updatetodo=updatetodo)
    

    Хорошо, так что конечная точка создается.

    • Давайте создадим новый файл, а именно update.html для обновления TODO и поместим этот код внутрь (вместе с пластиной для котла для HTML, очевидно), очевидно)
    Title Description

    Ок, отлично

    • Так что теперь, когда вы нажимаете на кнопку обновления, пользователь будет доставлен на эту страницу с помощью полей, уже заполненных существующими данными.
    • И при нажатии на отправку запроса сообщения будет отправлен в конечную точку, а данные, т. Е. Название и описание будут изменены на новые данные.

    * * Если вы добрались до этого момента, поздравляю ✨✨✨. * * * Есть много, что можно сделать потом, но я оставлю вас, ребята, к этому. Я надеюсь, что вы, ребята, найдете это полезным. Большое спасибо . Продолжать кодировать

    Хочу побудить меня создать такие посты, больше купи мне кофе

    Оригинал: “https://dev.to/__junaidshah/creating-a-crud-app-using-flask-and-sqlalchemy-2m5k”