Краткое руководство. Создание веб-приложения Python с помощью Visual Studio
В этом кратком руководстве вы создадите веб-приложение Python на основе платформы Flask в Visual Studio. Вы создадите проект при помощи дискретных действий, которые помогут ознакомиться с базовыми функциями Visual Studio. Узнайте, как создавать элементы проекта, добавлять код и запускать приложения.
Если вам нужно установить Visual Studio, перейдите на страницу загрузки Visual Studio, чтобы бесплатно установить ее. В установщике выберите рабочую нагрузку разработки Python.
Если вам нужно установить Visual Studio, перейдите на страницу загрузки Visual Studio, чтобы бесплатно установить ее. В Visual Studio Installer выберите рабочую нагрузку Разработка на Python, а в сведениях об установке — Веб-поддержка в Python.
Создание проекта
В следующих шагах создается пустой проект, который служит контейнером для приложения.
- Откройте Visual Studio. На начальном экране выберите Создать новый проект.
- В диалоговом окне «Создание проекта» введите веб-сайт Python в поле поиска. В списке результатов выберите веб-проект и нажмите кнопку «Далее«.



Если вы не видите шаблоны проектов Python, запустите Visual Studio Installer. В установщике выберите «Дополнительно>изменить«, выберите рабочую нагрузку разработки Python и нажмите кнопку «Изменить«.
Если вы не видите шаблоны веб-проекта Python, выберите пункт Средства>Get Tools and Features (Получить средства и компоненты), чтобы запустить Visual Studio Installer. В установщике выберите рабочую нагрузку разработки Python. В разделе «Сведения об установке» выберите веб-службу поддержки Python, а затем выберите » Изменить«.


Новый проект откроется в Обозреватель решений. Имя решения автоматически устанавливается для сопоставления имени проекта. Новый проект пуст, так как он не содержит файлов.


Проекты и решения в Visual Studio
Есть преимущества для создания проекта в Visual Studio для приложения Python. Приложения Python обычно определяются только с помощью папок и файлов, но эта простая структура может стать обременительной по мере увеличения размера приложений. Приложения могут включать автоматически созданные файлы, JavaScript для веб-приложений и другие компоненты. Проект Visual Studio помогает управлять этими сложными моментами.
Проект идентифицируется с pyproj-файлом , который определяет все исходные и контентные файлы, связанные с проектом. PYPROJ-файл содержит сведения о сборке для каждого файла, хранит информацию для интеграции с системами управления версиями и помогает упорядочить ваше приложение в виде логических компонентов.
Решение Visual Studio — это контейнер, который помогает управлять одним или несколькими связанными проектами в качестве группы. Visual Studio отображает свои решения в Обозреватель решений. В решении хранятся параметры конфигурации, которые не относятся к конкретному проекту. Проекты в решении также могут ссылаться друг на друга. Например, при запуске проекта приложения Python может автоматически создаваться второй проект, например расширение C++, используемое приложением Python.
Установка библиотеки Flask
Веб-приложения на Python почти всегда используют одну из множества доступных библиотек Python для обработки низкоуровневых процессов, таких как маршрутизация веб-запросов и формирование ответов. Visual Studio предоставляет множество шаблонов для веб-приложений. В этом кратком руководстве вы создадите проект из одного из этих шаблонов.
А сейчас выполните следующие шаги, чтобы установить библиотеку Flask в глобальном окружении по умолчанию, которое Visual Studio использует для этого проекта.
-
Разверните в проекте узел Окружения Python, чтобы увидеть среду по умолчанию для проекта.


- Если команда Flask отображается под полем поиска, flask уже присутствует в системе. Перейдите к следующему шагу.
- Если команда Flask не отображается под полем поиска, выберите команду Run: pip install flask.




Вместо установки библиотек в глобальной среде разработчики обычно создают виртуальную среду , в которой необходимо установить библиотеки для определенного проекта. Шаблоны Visual Studio обычно предлагают этот параметр, как описано в кратком руководстве. Создание проекта Python с помощью шаблона.
Дополнительные сведения о других доступных пакетах Python см. в индексе пакетов Python.
Добавление файла кода
Теперь вы готовы добавить код Python для реализации минимального веб-приложения.
- Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите «Добавить>новый элемент«.
- В диалоговом окне «Добавить новый элемент» выберите параметр «Пустой файл Python».
- Введите имя файла app.py и нажмите кнопку «Добавить«. Файл автоматически откроется в редакторе кода Visual Studio.
- Скопируйте следующий код и вставьте его в файл app.py :
from flask import Flask # Create an instance of the Flask class that is the WSGI application. # The first argument is the name of the application module or package, # typically __name__ when using a single module. app = Flask(__name__) # Flask route decorators map / and /hello to the hello function. # To add other resources, create functions that generate the page contents # and add decorators to define the appropriate resource locators for them. @app.route('/') @app.route('/hello') def hello(): # Render the page return "Hello Python!" if __name__ == '__main__': # Run the app server on localhost:4449 app.run('localhost', 4449)
В диалоговом окне «Добавление нового элемента » отображается множество других типов файлов, которые можно добавить в проект Python, например класс Python, пакет Python, модульный тест Python или файлы web.config . Как правило, эти шаблоны элементов прекрасно подходят для быстрого создания файлов при помощи полезного стандартного кода.
Дополнительные сведения о Flask см. в кратком руководстве по Flask.
Выполнение приложения
Выполните следующие действия, чтобы запустить веб-приложение:
-
В Обозреватель решений щелкните правой кнопкой мыши файл app.py и выберите «Задать в качестве файла запуска«. С помощью этой команды файл кода задается как запускаемый в Python при запуске приложения.


Начните с отладки или без нее
Приложение можно запустить с включенной отладкой или без нее. Ниже приведены различия между этими параметрами:
- Команда запуска отладки запускает приложение в контексте отладчика Visual Studio. С помощью отладчика можно устанавливать точки останова, проверять переменные и поэтапно выполнять код строка за строкой. С отладчиком приложения могут работать медленнее, так как для отладки используются различные обработчики.
- Используйте команду Start Без отладки, чтобы запустить приложение непосредственно без контекста отладки, аналогично запуску приложения из командной строки. Эта команда также автоматически запускает браузер и открывает URL-адрес, указанный на вкладке «Свойства>отладки проекта».
Связанный контент
- Краткое руководство. Создание проекта Python на основе шаблона
- Руководство. Начало работы с Python в Visual Studio
- Шаблоны веб-приложений Python в Visual Studio
Пишем приложение на Python для подготовки к собеседованиям по Python
На конец 2023 года язык программирования Python является самым популярным по индексу TIOBE. Что касается работы, то по количеству вакансий в мире язык Python занимает второе место (после JavaScript/TypeScript). Поэтому у соискателей на должность, где требуется Python, возникает потребность подготовки к собеседованиям.

В этой статье я расскажу о том, как используя Python, можно написать desktop-приложение для ОС Windows, которое поможет быстро, эффективно и абсолютно бесплатно подготовиться к собеседованиям по Python.
Для кого это приложение и какие вопросы будут затронуты
Вы можете подавать резюме на любую профессию, где требуется Python: бекенд-разработчик, аналитик данных, тестировщик, специалист по Data Science или машинному обучению, но в любом случае вы должны обладать необходимой фундаментальной базой. В этом приложении я аккумулировал все возможные вопросы – как вопросы с реальных собеседований (реальные кейсы), так и вопросы, которые, как говорится, вы должны “must know”. Все эти вопросы я разбил на 7 тематических групп:
- Базовый синтаксис Python (217 вопросов)
- Объектно-ориентированное программирование (ООП) (110 вопросов)
- Правила оформления кода (PEP8, PEP257) (27 вопросов)
- Структуры данных на Python (69 вопросов)
- Алгоритмы на Python (39 вопросов)
- Git (64 вопроса)
- Базы данных и SQL запросы (58 вопросов)
В этом приложении нет фреймворков типа Django или специализированных библиотек типа NumPy. Если интервьюер поймет, что у вас нет фундаментальной базы, то он не будет спрашивать про фреймворки, а собеседование очень быстро закончится.
Также в этом приложении нет задач с LeetCode. В последнее время среди кандидатов осуществляется практика заучивать алгоритмы решения задач на LeetCode, поэтому интервьюеры начали придумывать свои задачи (которые позже попадают на опять же LeetCode).
Тем не менее, в приложении есть классические олимпиадные задачи на основные алгоритмы, но их мало. Уметь решать эти задачи – это своего рода правила хорошего тона в программировании.
Актуальность вопросов
При формировании списка вопросов я старался максимально актуализировать их содержание в соответствии с последними изменениями в синтаксисе языка. Например, существует вопрос про конструкцию match/case, которая появилась не так давно — в Python 3.10.
И наоборот, здесь отсутствуют устаревшие конструкции. Например, кто помнит о функции format() при работе со строками? Когда появились f-строки, о функции format() все забыли, поэтому её здесь и нет. А f-строки есть.
Придумываем функционал приложения
Грубо говоря, функционал приложения – это то, что оно умеет делать. А умеет делать оно следующее: создавать пользователей, вести их статистику (на сколько вопросов они ответили верно, сколько времени они провели на собеседованиях), загружать csv-файлы с вопросами, гибко настраивать собеседования, озвучивать вопросы.
Довольно много получается, поэтому оптимальным вариантом будет использовать парадигму объектно-ориентированного программирования (ООП), но помимо классов и экземпляров будет много-много вспомогательных функций.
Для реализации приложения я использовал самую последнюю версию интерпретатора Python на момент написания статьи – Python 3.12.
Создаем графический интерфейс
Не знаю, как другие разработчики, но мне всегда сначала хочется написать графический интерфейс. И начинаю я с блокнота. Не того, что notepad.exe, а с обычного реального блокнота для рисунков. Вот, что я нарисовал на самом раннем этапе разработки:

Теперь надо выбрать библиотеку для Python, в которой можно создать графический интерфейс. В Python есть встроенный модуль tkinter. Но если его использовать, то ваше приложении будет похоже на приложения времен Windows 95. Поэтому мы используем что-то современное – стороннюю библиотеку customtkinter. Но почему же не PyQt? Помните принцип KISS? Keep it simple, stupid! Для простого проекта я буду использовать более простые технологии.
Вот что получилось.

Пользователи, управление пользователями
Из всех возможных способов реализации управления юзерами в приложении самым оптимальным является создание базы данных. Можно использовать стандартную библиотеку Python sqlite3, но тогда будем писать чистые SQL-запросы в базу данных, а я не хочу. Поэтому давайте используем какую-нибудь популярную ORM. Я выбрал SQLAlchemy. Вот так будет выглядеть код для создания базы данных пользователей:
import os from typing import Type from sqlalchemy import create_engine from sqlalchemy import DateTime, Integer, JSON, String from sqlalchemy import MetaData from sqlalchemy.orm import DeclarativeBase from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column from settings import DATABASE_NAME engine = create_engine(f'sqlite:///', echo=False) metadata = MetaData() class Base(DeclarativeBase): pass class User(Base): """A class representing user's data in the app. Attributes: __tablename__ (str): The name of the table in the database. id: The unique identifier of the user. user_name: The name of the user. last_enter_date: The date and time of the user's last login. interviews_duration: The total duration of interviews for the user in seconds. progress: The user's progress data stored in JSON format. """ __tablename__ = 'users' id: Mapped[int] = mapped_column(primary_key=True) user_name: Mapped[str] = mapped_column(String(25)) last_enter_date: Mapped[Type] = mapped_column(DateTime, nullable=True) interviews_duration: Mapped[int] = mapped_column(Integer) progress: Mapped[Type] = mapped_column(JSON) def create_db() -> None: """Creates database as a SQLite-file""" if not _is_db_created(): Base.metadata.create_all(engine) def _is_db_created() -> bool: """Checks DB existence in the root folder.""" return os.path.exists(f'./')
Как видно из кода, у нас есть удобный инструмент для хранения прогресса пользователя – формат JSON, а также инструмент для работы с датами и временем DateTime.
Небольшое замечание: с помощью SQLAlchemy также можно работать с базой данных через чистые SQL-запросы.
В приложении мы будем использовать файловую СУБД SQLite – это, пожалуй, самый лучший, если не единственный вариант в данном случае.
Решаем вопрос со списком вопросов
Особого смысла загружать в базу данных список вопросов я не вижу. А что, если у нас список вопросов будет храниться в каком-нибудь файле, который можно будет очень легко править с помощью Microsoft Excel или Google Таблиц. Существует такой текстовый формат CSV, предназначенный для представления табличных данных. Его мы и будем использовать для хранения вопросов. Хорошей новостью является то, что в Python существует инструмент для работы с CSV – одноименная стандартная библиотека. Мы через менеджера контекста открываем файл и переводим данные CSV-файла в битовый поток, и десериализуем этот поток в список кортежей Python.

Имитируем голос интервьюера
Наше приложение может воспроизводить голосом задаваемые вопросы. Эта технология называется TTS (text-to-speech). В Python существует сторонняя библиотека pyttsx3. Проблема в том, что при выполнении чтения текста у нас приложение будет «заморожено» на время воспроизведения. Поэтому давайте переложим выполнение чтения текста на другой поток центрального процессора. Для этого использует стандартную библиотеку threading.
Логика приложения
На данный момент не существует технологии, когда люди что-то наговаривают в микрофон, а нейросеть оценивает, насколько правильно и развернуто они ответили. Тот, кто реализует такую возможность станет миллиардером.
В нашем случае приложение вам задает вопрос, а вы будете, во-первых, учиться слушать вопрос, а, во-вторых учиться отвечать на него, после чего нажмете кнопки «Я правильно ответил на вопрос» и «Я не знаю, следующий вопрос». Но, что если у вас есть сомнений относительно правильности ответа?
Для этого существует третья кнопка – «Посмотреть ответ на вопрос». Нажав на нее, у вас в новом окне появится ответ на вопрос и вы можете посмотреть правильно ли вы ответили или нет.

Что можно было сделать лучше
В первую очередь я жалею, что не стал вести разработку через тестирование (англ. test-driven development, TDD). Когда я добавлял новые функции, меня не покидало ощущение, что все ранее созданное сломалось, а запустить pytest или unittest я не могу.
Я также не стал писать «стильный, модный и молодежный» код с использованием библиотеки dataclasses и тамошними декораторами. Поэтому я написал самый обычный код по старинке.
Ну и еще один момент: вы помните, что классы должны быть закрыты для модификации (Open-Closed Principle). Надо было бы сделать все атрибуты приватными и тонко настроить их поведение через геттеры и сеттеры, создав объекты-свойства с помощью декоратора @property. А еще определить коллекцию __slots__ для каждого класса.
Что в итоге получилось
Там же вы найдете ссылки на скачивание EXE-версии программы.
А можно на видео показать, как пользоваться приложением
Покажу и расскажу. Вот видео на YouTube. Всем спасибо, всем пока.
Как сделать Android приложение на Python + HTML5?
Ищи фреймворки или библиотеки, которые максимально упростят разработку Android приложения на Python. Идеально если сразу будет ios поддержка, но необязательно.
Поиск говорит, что писать Android-приложения на Python нужно с помощью kivy, но реализация GUI там, как я понял не очень гибкая и сложно стилизуемая. Уже есть веб приложение со своими стилями и хотелось бы, чтобы приложение было в одном стиле, поэтому идеально было бы вообще взять html + css готовые и сделать на их основе приложение.
Очень хочется Python или близкий к нему язык, чтобы долго не разбираться.
Есть ли какое-то «готовое» решение?
В гугле ничего толкового не нашел.
- Вопрос задан более трёх лет назад
- 2385 просмотров
1 комментарий
Средний 1 комментарий
Пишем десктоп-приложение на Python с помощью Tkinter
Знакомимся с библиотекой Tkinter — пишем на Python кросс-платформенный калькулятор, который рассчитывает вес человека.


Иллюстрация: Merry Mary для Skillbox Media

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.
Десктопные приложения пишут на разных языках программирования: C++, C#, C, Python и других. Начинающим разработчикам проще всего использовать Python и его библиотеки для работы над графическими интерфейсами.
Одна из таких библиотек — Tkinter. Она входит в стандартный пакет Python и позволяет создавать приложения для Windows, mac OS и Linux. Давайте разберёмся, как устроена эта библиотека, и напишем десктопный калькулятор, помогающий рассчитать вес человека.
Что такое GUI и как с ним работать в Python
GUI (Graphical User Interface) — это графический интерфейс пользователя, оболочка программы, с которой мы взаимодействуем с помощью клавиатуры и мыши. На современных операционных системах почти все программы работают с графическим интерфейсом, и мы каждый день сталкиваемся с GUI: читаем статьи в браузере, набираем текст в редакторе или играем в игры.
Противоположность графическому интерфейсу — командная строка, позволяющая управлять приложением с помощью текстовых команд. Такой интерфейс реализован в терминале macOS и командной строке Windows.
Для работы с GUI в Python есть четыре библиотеки:
Мы выбрали Tkinter, потому что она не требует дополнительной установки и позволяет быстро создавать приложения с простым графическим интерфейсом.
Знакомимся с Tkinter
Tkinter — это удобный интерфейс для работы со средствами Tk. Приложения, созданные на основе этой библиотеки, кросс-платформенные, то есть могут запускаться на разных операционных системах.
Схематично работу с Tkinter можно представить в виде четырёх шагов:

Что здесь происходит:
- Мы подключаем библиотеку Tkinter с помощью директивы import.
- Создаём главное окно приложения, в котором будут размещаться все графические элементы.
- Добавляем виджеты — визуальные элементы, выполняющие определённые действия.
- Создаём главный цикл событий — он включает в себя все события, происходящие при взаимодействии пользователя с интерфейсом.
Ключевые объекты в работе с Tkinter — виджеты. Это аналоги тегов из HTML, которые позволяют создавать интерактивные и неинтерактивные элементы, например надписи или кнопки. Всего их 18, но чаще всего используют следующие:
- Button — кнопки;
- Canvas — «холст», на котором рисуют графические фигуры;
- Entry — виджет для создания полей ввода;
- Label — контейнер для размещения текста или изображения;
- Menu — виджет для создания пунктов меню.
Понять работу с виджетами легче всего на практике. Но прежде чем к ней приступить, обсудим идею нашего первого десктопного приложения.
Создаём калькулятор для расчёта индекса массы тела
Мы напишем калькулятор индекса массы тела. ИМТ — это важный медицинский показатель, который позволяет оценить, есть ли у человека избыточный вес или ожирение. Он рассчитывается по следующей формуле:
ИМТ = вес (в кг) / рост 2 (в метрах)
Результаты расчётов оценивают с помощью специальной таблицы. У врачей она имеет много градаций, мы же воспользуемся упрощённой версией:

Шаг 1
Запускаем Python и импортируем Tkinter
Писать код на Python лучше всего в специальной IDE, например в PyCharm или Visual Studio Code. Они подсвечивают синтаксис и предлагают продолжение кода — это сильно упрощает работу программиста. Весь код из этой статьи мы писали в Visual Studio Code.
Библиотека Tkinter предустановлена в Python. Поэтому её нужно только импортировать:
Шаг 2
Делаем эскиз интерфейса и продумываем логику приложения
Прежде чем писать код, необходимо ответить на несколько вопросов:
- Какие данные мы хотим получить от пользователя и в каком виде?
- Какое событие будет запускать расчёт ИМТ: нажатие кнопки, получение приложением всех необходимых данных или что-то другое?
- Как будем показывать результат?
В нашем случае необходимо получить от пользователя вес и рост в виде целых чисел. При этом вес должен быть введён в килограммах, а рост — в сантиметрах. ИМТ будет рассчитываться по нажатии кнопки, а результат — выводиться во всплывающем окне в виде значения ИМТ и категории, к которой он относится.
Схематично графический интерфейс нашего калькулятора будет выглядеть так:

Теперь попробуем реализовать интерфейс и работу калькулятора с помощью Python и Tkinter.
Шаг 3
Создаём основное окно и указываем название приложения
После импорта библиотеки в Python загрузим её методы:

Мы не указали размер окна, поэтому название приложения не помещается в него полностью. Исправим это с помощью метода geometry:

Шаг 4
Создаём виджет Frame для контроля за расположением элементов
В окне приложения необходимо разместить несколько элементов с нашего эскиза: два поля ввода информации с подписями и одну кнопку. Важно, чтобы поля не накладывались друг на друга и не уходили за пределы окна. В Tkinter для этого есть несколько методов:
- pack — используется, когда мы работаем с контейнерами для элементов. Позволяет позиционировать кнопки, надписи или другие элементы внутри контейнеров.
- place — позволяет позиционировать элементы, указывая точные координаты.
- grid — размещает элементы по ячейкам условной сетки, разделяющей окно приложения.
Мы воспользуемся комбинацией методов pack и grid. Для начала создадим виджет Frame для размещения надписей, полей ввода и кнопок. Подробное описание работы виджета есть в документации. Мы же используем только два свойства: padx и pady.
Обозначим отступы по вертикали и горизонтали в 10 пикселей для элементов, которые будут расположены внутри Frame:

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

Теперь добавим поля для ввода пользовательской информации, используя виджет Entry:

Всё получилось. Остаётся по аналогии добавить поле ввода веса:

Теперь добавим кнопку, которая будет запускать расчёт ИМТ. Сделаем это с помощью виджета Button:

Теперь в приложении есть все графические элементы. Остаётся лишь написать код, который будет получать информацию из виджетов Entry и рассчитывать индекс массы тела.
Шаг 6
Получаем информацию из виджетов Entry и рассчитываем индекс массы тела
Напишем простую функцию и разберём её построчно:
Всё работает. Функция получает данные из полей ввода и рассчитывает индекс массы тела, показывая результат на экране.
Приведём код полностью без комментариев
from tkinter import * from tkinter import messagebox def calculate_bmi(): kg = int(weight_tf.get()) m = int(height_tf.get())/100 bmi = kg/(m*m) bmi = round(bmi, 1) if bmi < 18.5: messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует недостаточному весу') elif (bmi > 18.5) and (bmi < 24.9): messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует нормальному весу') elif (bmi > 24.9) and (bmi < 29.9): messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует избыточному весу') else: messagebox.showinfo('bmi-pythonguides', f'ИМТ = соответствует ожирению') window = Tk() window.title('Калькулятор индекса массы тела (ИМТ)') window.geometry('400x300') frame = Frame( window, padx=10, pady=10 ) frame.pack(expand=True) height_lb = Label( frame, text="Введите свой рост (в см) " ) height_lb.grid(row=3, column=1) weight_lb = Label( frame, text="Введите свой вес (в кг) ", ) weight_lb.grid(row=4, column=1) height_tf = Entry( frame, ) height_tf.grid(row=3, column=2, pady=5) weight_tf = Entry( frame, ) weight_tf.grid(row=4, column=2, pady=5) cal_btn = Button( frame, text='Рассчитать ИМТ', command=calculate_bmi ) cal_btn.grid(row=5, column=2) window.mainloop()
Что дальше?
Узнать о возможностях Tkinter и особенностях работы с виджетами можно в официальной документации. А если хотите найти больше реальных примеров для практики, советуем две книги:
- Python GUI Programming with Tkinter. Develop responsive and powerful GUI applications with Tkinter, Алан Мур.
- Tkinter GUI Programming by Example, Дэвид Лав.
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!