DevGang
Авторизоваться

Создание веб-приложения Flask todo с нуля

Добро пожаловать 👋 в этот блог. Если вы хотите создать веб-приложение todo с помощью Flask, то вы находитесь в правильном блоге. В этом руководстве мы создадим веб-приложение Todo Flask полностью с нуля. Приступим к созданию веб-приложения. Еще одна вещь, в конце вы также получите ссылку на репозиторий GitHub, чтобы вы могли сосредоточиться только на концепциях.

Структура проекта

  • Давайте создадим новую папку с названием todo-app(что угодно).
  • Структура файла должна выглядеть следующим образом.
/flask-todos
    app.py
    /static
        *.css
        *.js
        *.png
        all static files
    /templates
        index.html
        *.html
        your HTML files

Здесь static папка будет содержать статические файлы (CSS, js, изображения и т. д.), шаблоны будут содержать все файлы HTML, а app.py — это внутренний файл Flask, который обрабатывает запрос от клиента, а также взаимодействует с базой данных.

Клиент-серверная архитектура

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

index.html

Это исходный код файла index.html. Этот код содержит базовую структуру веб-страницы. Я использую Бутстрап.

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
    <link rel="stylesheet" href="/static/index.css">
  </head>
  <body>
    <div class="container mt-5 mb-5">
        <h3 class="mt-5 mb-5">Todo Web Application</h3>
        <form action="/" method="POST">
            <div class="row">
                <div class="col">
                    <div class="mb-3">
                        <label for="title" class="form-label">Title</label>
                        <input type="text" class="form-control" name="title" id="title">
                    </div>
                </div>
                <div class="col">
                    <div class="mb-3">
                        <label for="content" class="form-label">Content</label>
                        <input type="text" class="form-control" name="content" id="content">
                    </div>
                </div>
            </div>
            <button type="submit" class="btn btn-warning">Submit</button>
          </form>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
  </body>
</html>

index.css

Этот файл не содержит CSS для этого проекта. Но не стесняйтесь добавлять свой собственный CSS по вашему выбору.

app.py

Это очень важный файл для нашего проекта. Это помогает нам подключаться к базам данных SQL, а также обслуживать запросы клиентов.

Разбивка кода файла.

  • Изначально импортируем все необходимые библиотеки. (например, Flask, sql_alchemy и т. д.)
  • Затем нам нужно подключить приложение, то есть инициализированное приложение/объект/, к базе данных.
...
db.init_app(app)
...
  • Создание подписи модели к подписи таблицы. Вы можете понимать свою базу данных как таблицу, в которой вы можете хранить свои данные в строках. Подпись таблицы относится к «первой строке».
...
class Blog(db.Model):
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    content: Mapped[str]
...
  • Настройка маршрутов для обслуживания запроса со стороны клиента. Давайте обсудим один маршрут, остальные маршруты такие же, как этот.
...
@app.route("/")   <-- python decorator
def index():      <-- function signature
    return render_template("index.html")    
...

Он отображает шаблон index.html, предоставляющий основной контент домашней страницы веб-приложения. Мы также можем добавить в функцию код SQLalchemy, чтобы обеспечить ее подключение к базам данных.

Вот полный код:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy import Integer, String
from sqlalchemy.orm import Mapped, mapped_column

class Base(DeclarativeBase):
  pass

db = SQLAlchemy(model_class=Base)

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
db.init_app(app)

class Blog(db.Model):
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    content: Mapped[str]


@app.route("/", methods=["GET"])
def index():
    print(Blog.query.all())
    return render_template("index.html", blogs = Blog.query.all())


@app.route("/", methods=["POST"])
def submit():
    title = request.form.get('title')
    content = request.form.get('content')
    blog = Blog(title=title, content=content)
    db.session.add(blog)
    db.session.commit()

    return render_template("index.html", blogs = Blog.query.all())

if __name__ == "__main__":
    with app.app_context():
        db.create_all()
    app.run(debug=True)

Установка библиотек

Нам нужно установить Flask и SQL_alchemy.

pip install Flask
pip install SQLAlchemy

Итерация блогов в HTML с помощью синтаксиса jinja

Jinja — это шаблонизатор для Python. Подробнее о джиндзе можно прочитать здесь.

С помощью синтаксиса jinga мы можем выполнять итерацию на стороне клиента. Нам нужно добавить эти строки кода /перед/ последним закрывающим тегом <div/>.

{% for blog in blogs %}
        <div class="card mt-5">
            <div class="card-body">
                <h5 class="card-title">{{ blog.title }}</h5>
                <p class="card-text">{{ blog.content }}</p>
            </div>
        </div>
{% endfor %}

Запуск приложения

Откройте встроенный терминал редактора кода и запустите команду python app.py, чтобы запустить проект. Теперь вы можете зайти в свой веб-браузер и перейти по адресу http://127.0.0.1:5000/.

Тада ;) 😄😄😄

Ваше веб-приложение запущено. :)

Для вашего удобства я также создал репозиторий GitHub.

Используемая технология

  • python3
  • Flask — веб-фреймворк Python.
  • SQL как база данных
  • SQLAlchemy — библиотека объектно-реляционного сопоставления (ORM) для Python.

Наймите меня: ankursingh91002@gmail.com

Источник:

#Flask #Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу