Здравствуйте! Меня зовут Михаил, и я пишу эту статью специально для начинающих программистов, желающих изучить основы веб-разработки с использованием Flask. Я сам активно занимаюсь разработкой проектов на Flask и хочу поделиться своими знаниями и опытом, чтобы помочь вам начать свой путь в мире веб-разработки.

Flask — это прекрасный выбор для тех, кто уже знаком с основами Python и хочет применить эти знания в создании веб-приложений. Этот микро-фреймворк, написанный на Python, отличается своей простотой и гибкостью, делая его доступным для начинающих, в то же время предлагая мощные возможности для создания сложных приложений.

Требуемые навыки для чтения статьи:

  • Основы Python: понимание основных конструкций языка и способность писать простые программы.

  • Знакомство с HTML: базовое понимание тегов и структуры веб-страниц будет полезно.

Ориентировочное время чтения: Примерно 15-20 минут.


Содержание

  1. Введение

    • Краткое описание Flask и его популярности в мире веб-разработки.

    • Обсуждение ключевых преимуществ Flask:

      • Простота и Минимализм: Flask предоставляет основной набор инструментов для веб-разработки, делая его идеальным для начинающих.

      • Гибкость и Расширяемость: Возможность легко интегрировать с другими библиотеками и сервисами.

      • Подход "Микро-фреймворк": Flask позволяет разработчикам сохранять контроль над своим приложением, выбирая только необходимые инструменты и библиотеки.

      • Большое сообщество и поддержка: Благодаря своей популярности, Flask имеет обширное сообщество и множество доступных ресурсов для обучения и поддержки.

  2. Установка и настройка

    • Инструкция по установке Flask.

    • Создание базового проекта на Flask.

  3. Основы Flask

    • Обзор основных концепций: маршрутизация, представления, шаблоны.

    • Пример простого веб-приложения (например, приложение "Hello, World!").

  4. Работа с данными

    • Объяснение, как обрабатывать входящие запросы.

    • Работа с формами и отправка данных.

  5. Использование шаблонов

    • Введение в шаблонизатор Jinja2, который используется во Flask.

    • Пример создания веб-страницы с использованием шаблонов.

  6. База данных в Flask

    • Обзор интеграции с базами данных (например, SQLite).

    • Пример простого CRUD-приложения (Создание, Чтение, Обновление, Удаление).

  7. Заключение

    • Итоги о том, как Flask может быть использован для создания масштабируемых веб-приложений.

    • Рекомендации по дальнейшему изучению Flask и расширению знаний.


Установка и настройка Flask

Flask - это легкий и мощный веб-фреймворк для Python, который можно легко установить и настроить. В этом разделе мы покажем, как начать работу с Flask на вашем компьютере.

  1. Установка Python

    • Для работы с Flask вам понадобится Python версии 3.6 или выше. Если у вас еще не установлен Python, вы можете скачать его с официального сайта Python python.org.

  2. Установка Flask

    • Flask можно установить с помощью инструмента управления пакетами Python, pip. Откройте терминал или командную строку и введите команду:

      pip install Flask
    • Эта команда установит Flask и все необходимые зависимости.

  3. Создание базового проекта Flask

    • Создайте новую папку для вашего проекта и перейдите в нее в терминале.

    • Внутри папки проекта создайте файл, например, app.py, который будет основным файлом вашего веб-приложения.

    • Откройте app.py в текстовом редакторе и напишите следующий код:

      from flask import Flask
      app = Flask(name)
      
      @app.route('/')
      def hello_world():
        return 'Hello, World!'
      
      if name == 'main':
        app.run(debug=True)
    • Этот код создает базовое веб-приложение, которое отображает "Hello, World!" на главной странице.

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

    • Чтобы запустить приложение, вернитесь в терминал и выполните команду:

      python app.py
    • После этого откройте веб-браузер и перейдите по адресу http://127.0.0.1:5000/. Вы должны увидеть сообщение "Hello, World!".

Эти шаги демонстрируют, как легко начать работу с Flask. Вы установили Flask, создали простое приложение и успешно запустили его на локальном сервере.

Основы Flask

Flask предлагает гибкий и интуитивно понятный способ создания веб-приложений. Основой Flask является маршрутизация запросов и генерация ответов. В этом разделе мы рассмотрим эти ключевые концепции.

  1. Маршрутизация

    • Маршрутизация в Flask отвечает за соединение функций с конкретными URL-адресами. Это позволяет вашему приложению реагировать на разные URL, например, отображать разные страницы.

    • Пример маршрута:

      @app.route('/about')
      def about():
        return 'This is the about page'
      
    • В этом примере, если пользователь перейдет по адресу http://127.0.0.1:5000/about, он увидит сообщение "This is the about page".

  2. Представления и Функции

    • Представления в Flask – это функции Python, которые обрабатывают запросы и возвращают ответы. Как правило, ответ представляет собой HTML-страницу, но это также может быть текст, JSON или XML.

    • Пример функции представления:

      @app.route('/user/<username>')
      def show_user_profile(username):
        return f'User {username}'
      
    • Эта функция возвращает пользовательское имя, которое передается в URL.

  3. Использование Шаблонов

    • Flask использует систему шаблонов Jinja2, которая позволяет создавать HTML-страницы с динамическим содержимым.

    • Пример использования шаблона:

      from flask import Flask
      from flask import render_template
      
      app = Flask(name)
      
      @app.route('/hello/<name>')
      def hello(name):
        return render_template('hello.html', name=name)
      
      if name == 'main':
        app.run(debug=True) # debug true задаем специально для разработки (в данном случае при обновление/изменение кода приложение автоматически само обновит данные на сайте)
    • Здесь мы передаем переменную name в шаблон hello.html, который может динамически отображать разное содержимое в зависимости от переданного значения.


    • Конечно, давайте добавим пример кода для шаблона hello.html, который будет использоваться в нашем примере с Flask. Этот шаблон будет простым HTML-документом, который динамически отображает имя пользователя, переданное через URL.

      Пример кода для hello.html

      <!DOCTYPE html>
      <html lang="en">
        <head>
         <meta charset="UTF-8">
         <title>Hello Page</title>
        </head>
        <body>
          <h1>Hello, {{ name }}!</h1>
          <p>Welcome to our simple Flask app.</p>
        </body>
      </html>
      

      В этом шаблоне используется Jinja2 синтаксис для вставки переменной name в HTML. Когда Flask обрабатывает этот шаблон, он заменяет {{ name }} на значение, переданное в функцию hello(name).

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

    • Пример структуры проекта

    /your-app
       /static
       /templates
       app.py
    1. app.py: Это основной файл вашего приложения, где вы определяете маршруты, представления и бизнес-логику. В этом файле вы создаете экземпляр приложения Flask и запускаете сервер.

    2. /templates: Это директория, в которой хранятся все HTML-шаблоны. Flask автоматически ищет шаблоны в папке с именем templates. Примеры шаблонов могут включать hello.html, index.html, about.html и так далее.

    3. /static: Эта папка используется для хранения статических файлов, таких как CSS-стили, JavaScript-скрипты, изображения и другие файлы, которые не изменяются в процессе работы приложения. Flask автоматически обрабатывает запросы к этим файлам.

    Эта структура является довольно стандартной для небольших проектов на Flask. Для более сложных приложений вы можете добавить дополнительные папки и файлы, например, для моделей базы данных, утилит, тестов и так далее. Однако даже в сложных проектах обычно сохраняется базовая организация с папками static и templates.

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

Эти основные концепции являются ключевыми для понимания и создания веб-приложений с помощью Flask. Они позволяют вам строить структурированные и масштабируемые веб-приложения.

Работа с данными в Flask

  1. Обработка входящих запросов

    • Flask обеспечивает простой способ обработки входящих запросов, будь то GET или POST запросы. Это делается через маршрутизацию и функции представлений.

    • Пример обработки GET запроса:

      @app.route('/greet/<name>')
      def greet(name):
        return f'Hello, {name}!'

      В этом примере, Flask обрабатывает запрос к URL /greet/<name> и возвращает приветствие с именем пользователя.

    • Пример обработки POST запроса:

      from flask import request
      
      @app.route('/submit', methods=['POST'])
      def submit():
        name = request.form['name']
        return f'Hello, {name}'

      Здесь мы обрабатываем POST запрос и извлекаем данные из формы.

  2. Работа с формами

    • Для работы с формами в Flask часто используется объект request, который позволяет получить доступ к данным, отправленным пользователем.

    • Пример HTML-формы:

      <form method="post" action="/submit">
        <input type="text" name="name">
        <input type="submit" value="Submit">
      </form>
      

      Эта форма отправляет данные на маршрут /submit, который мы обрабатываем в нашем Flask приложении.

  3. Отправка данных

    • Flask позволяет не только принимать данные, но и отправлять их обратно пользователю. Это может быть в виде HTML, JSON, XML и других форматов.

    • Пример отправки JSON:

      from flask import jsonify
      
      @app.route('/data')
      def data():
        return jsonify({'key': 'value'})
      

      Этот маршрут возвращает данные в формате JSON.

Эти примеры демонстрируют основные способы работы с данными в Flask. От обработки простых GET запросов до более сложных операций с формами и отправки данных, Flask предлагает гибкий и мощный инструментарий для веб-разработчиков.

Интеграция с базами данных в Flask

  1. Выбор базы данных

    • Flask поддерживает интеграцию с множеством различных баз данных, включая SQL и NoSQL. Выбор базы д

    • анных зависит от нужд вашего приложения. Для простых приложений популярным выбором является SQLite из-за его легкости и неприхотливости в настройке.

  2. Использование SQLAlchemy

    • SQLAlchemy - это ORM (Object-Relational Mapping) библиотека для Python, которая облегчает работу с базами данных SQL. В Flask ее можно использовать для упрощения операций с базой данных.

    • Пример подключения к базе данных с использованием SQLAlchemy:

      from flask import Flask
      from flask_sqlalchemy import SQLAlchemy
      
      app = Flask(name)
      
      # подключение базы данных
      app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
      db = SQLAlchemy(app)
      

      Здесь мы конфигурируем подключение к SQLite базе данных.

  3. Создание моделей

    • Модели в SQLAlchemy представляют таблицы баз данных. Они позволяют взаимодействовать с данными на более высоком уровне абстракции.

    • Пример создания модели:

      class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
      
        def __repr__(self):
              return f'<User {self.username}>'
  4. Операции CRUD

    • CRUD означает Создание (Create), Чтение (Read), Обновление (Update), Удаление (Delete). SQLAlchemy упрощает выполнение этих операций.

    • Пример создания нового пользователя:

      new_user = User(username='newuser', email='email@example.com')
      db.session.add(new_user)
      db.session.commit()
    • Пример чтения пользователя:

      User.query.filter_by(username='newuser').first()
  5. Миграции

    • Для управления изменениями в структуре базы данных можно использовать расширение Flask-Migrate. Оно облегчает процесс создания и применения миграций.

Этот раздел статьи дает представление о том, как начать работу с базами данных в Flask. Использование ORM, такого как SQLAlchemy, может значительно упростить разработку и поддержку ваших веб-приложений.

Заключение

В этой статье мы рассмотрели основные аспекты работы с Flask, включая

  • установку,

  • основы маршрутизации и представлений,

  • работу с шаблонами,

  • обработку данных и интеграцию с базами данных.

Flask демонстрирует свою силу как легкий, но мощный инструмент для создания веб-приложений на Python. Его простота и гибкость делают его отличным выбором как для начинающих, так и для опытных разработчиков.


Если у вас остались или появились какие-то вопросы готов помочь разобраться начинающим программистам по работе с Flask

Спасибо за ваше уделенное время и поддержку!

Комментарии (30)


  1. icya
    27.12.2023 15:09
    +3

    Установка Flask

    pip install Flask

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

    Миграции

    Для новичков было бы неплохо расписать как работать с миграциями (хотя бы на уровне вызова основных команд)


    1. metro6
      27.12.2023 15:09

      Совет начинающему программисту: "Смотри на все как в Википедии - если чёт не знаешь, тыкай и ищи об этом".

      И дело не в том, что начинающий программист не нашел в статье понятия об инструменте работы с пакетами или о чем-то ещё. Дело в том, что начинающий программист должен взять маленький кусочек о Flask, попробовать понятие такое создать, фрагмент памяти. Потом в другой статье он про бд почитает, про пакетный менеджер, про гит.

      Если в одной статье пытаться уместить ещё что-то, то у начинающего программиста просто не хватит памяти эффективно хоть что-нибудь запомнить


  1. amateur80lvl
    27.12.2023 15:09
    +5

    Он ещё живой?

    Ничего хуже, наверное, придумать уже нельзя, но для широких масс чем хуже - тем лучше.

    Новичкам точно не рекомендую.


    1. Iscander_Che
      27.12.2023 15:09
      -1

      Ну не Django же.


      1. amateur80lvl
        27.12.2023 15:09
        +1

        Упаси.

        Но Django как референс - вполне годная кодовая база. Сверяться с owasp тоже обязательно.


        1. Iscander_Che
          27.12.2023 15:09

          Django, с одной стороны, хорош как многофункциональный комбайн. И я некоторые идеи оттуда реализовал в песочнице на Flask. Но с другой, по причине той же "комбайнутости", вряд ли бы рекомендовал его для новичков. Даже не смотря (и вообще не смотря, если честно) на наличие руководств "Джанго для девочек".

          Вопрос в том, почему "ничего хуже". Разверните, пожалуйста, если не трудно.


          1. amateur80lvl
            27.12.2023 15:09

            Вопрос в том, почему "ничего хуже".

            Это моё субъективное мнение подкреплённое практическим опытом. Мы регулярно пытались переползти на какой-нибудь фреймворк, чтобы избавиться от поддержки своих кастомных примочек, и Flask был наихудшим вариантом. Pyramid выглядел лучше всех, но до него дело так и не дошло.

            Разверните, пожалуйста, если не трудно.

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

            Вообще выбор фреймворка - та ещё тема.


            1. Iscander_Che
              27.12.2023 15:09

              Спасибо за вполне развёрнутый ответ. Pyramid - будем посмотреть.


              1. amateur80lvl
                27.12.2023 15:09

                Для простых вещей советую глянуть на hypercorn. Голый ASGI весьма притягателен, а если чего не хватает - так можно из starlette, например, понадёргать нужного. Хотя starlette вполне себе ничего, но у меня бзык на минимализм.


                1. Iscander_Che
                  27.12.2023 15:09

                  Я тоже люблю минимализм. Так что изучу ваши предложения с удовольствием.


      1. kit_oz
        27.12.2023 15:09

        Зря вы так. Прекрасный инструмент, прекрасно выполняющий свою работу. Вкупе с DRF достаточно прозрачно и быстро собирается api для фронта


    1. plustilino
      27.12.2023 15:09

      Он ещё живой?

      Если погуглить, то flask по использованию вдруг оказывается даже немного популярнее django. Так что фраза престранная.


    1. srrymom
      27.12.2023 15:09

      Почему? По-моему, это идеальный вариант для новичков. Из-за того что он очень простой, даже при полном отсутствии опыта можно быстро накидать веб-приложение. А из‑за того что он очень популярный, по нему есть куча материалов, в т.ч. на русском.Есть какая-то альтернатива?


    1. zaelcovsky
      27.12.2023 15:09

      а какой фреймворк сгодится для новичка?


  1. chilic
    27.12.2023 15:09
    +1

    Вот тут, много лет назад и довольно хорошо было написанно:
    https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world


    1. Iscander_Che
      27.12.2023 15:09
      +1

      Более того, там готов мега туториал 2024, в котором обсуждаются новые фичи в Flask 3 и новые же фичи нового релиза (версию не помню) Flask-SQLAlchemy.


  1. lair
    27.12.2023 15:09

    (del)


  1. lair
    27.12.2023 15:09
    +5

    Weird.

    Вот, значит, смотрим в эту статью:

    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(name)
    
    # подключение базы данных
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
    db = SQLAlchemy(app)
    

    class User(db.Model):
      id = db.Column(db.Integer, primary_key=True)
      username = db.Column(db.String(80), unique=True, nullable=False)
      email = db.Column(db.String(120), unique=True, nullable=False)
    

    Смотрим во вчерашнюю статью:

    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # Конфигурация базы данных (SQLite)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
    db = SQLAlchemy(app)
    
    # Модель для таблицы "users"
    class User(db.Model):
      id = db.Column(db.Integer, primary_key=True)
      name = db.Column(db.String(50), nullable=False)
      age = db.Column(db.Integer, nullable=False)
    

    Это у людей настолько фантазия одинаково работает?


    1. select26
      27.12.2023 15:09
      +1

      Примеры просто из туториала с незначительными изменениями.
      Что можно изобрести для Hello World?


      1. m_nikitin_dev Автор
        27.12.2023 15:09

        для начинающих всегда Hello World для знакомства как установить
        дальше уже идея описать как и что можно создать и описать доп решения и идеи


      1. lair
        27.12.2023 15:09
        +1

        Я и говорю: фантазия не работает дальше "взять пример из туториала". Непонятно только, в чем смысл статьи тогда, если можно просто туториал взять.


  1. DessDaz1996
    27.12.2023 15:09
    -1

    Мой первый Hello World был как раз написан через Flask. Из плюсов он достаточно лёгкий и гибкий. Django в этом отношении проигрывает. Он более тяжёлый.


  1. krote
    27.12.2023 15:09
    +4

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


    1. m_nikitin_dev Автор
      27.12.2023 15:09

      согласен с вами
      в первой статье хотел описать как начать работать
      и завести фреймворк чтобы он начал работать

      дальше уже в планах описать дополнительные идеи как и что настраивать и описать

      спасибо за ваш комментарий
      учту дополнительную структуру шаг за шагом для сл статьи


  1. AndrewBond
    27.12.2023 15:09
    +1

    На мой субъективный взгляд, проблема "статей про flask" в том, что полно hello world и чертовски мало чего-то более сложного. Или чего-то несложного, но прикольного (какие-то интересные частные случаи). Или то же самое про SQLAlchemy.


  1. gromyko21
    27.12.2023 15:09
    +1

    Начинающие питонисты, смотрите лучше на FastApi. Не нужен вам этот flask))


    1. m_nikitin_dev Автор
      27.12.2023 15:09

      Fast Api подходит больше для уже дальнейшего развертывания фронта отдельно
      и back на fast api

      Flask больше дает возможности совместить фронт и бэк сразу
      для тех кто только начинает думаю что фляск поможет быстрее развернуть сайт


  1. A-V-tor
    27.12.2023 15:09
    +2

    Слушайте, конечно спасибо, но какой толк копировать страничку "quick start" и выдавать ее новичкам? В сети куча нормальных подобных инструкций и гайдов... Если Вы действительно работали и хотите чем то поделиться, так напишите о чем то действительно полезном и уникальном. Или это лучшие практики из вашего опыта?


    1. m_nikitin_dev Автор
      27.12.2023 15:09

      quick start взял чтобы описать первую статью
      дальше чтобы показать уже какие-то идеи и описать шаг за шагом что можно сделать как проект


  1. Mimik_fc7
    27.12.2023 15:09

    Исправьте пожалуйста заголовок на : Вы новичок в вебе, хотите освоить, не трогайте и на милю не подходите к этому го..ну, возьмите нормальный фреймворк.