Как сделать кнопку flask

Обновлено: 08.07.2024

На моей главной странице есть кнопка с надписью "Enter".

Я бы хотел, чтобы при нажатии на эту кнопку она направлялась на "домашнюю" страницу

Как это может быть сделано? Благодарность

1 ответ

Это работа якорного тега.

Jinja2 (компонент отрисовки шаблонов в Flask) позволяет использовать url_for функция для динамического создания URL-адреса для данной функции просмотра.

С вашим кодом это будет отображаться в браузере как:

Даже если вы измените конечную точку в app.route функция декоратора, которая будет отображаться с правильным URL-адресом.

Чтобы придать этому виду кнопку, я бы предложил использовать библиотеку Bootstrap. Его можно включить из CDN, добавив следующее в head вашего HTML-шаблона:

Затем назначить стиль кнопки так же просто, как добавить class атрибут вашего тега привязки:

Разрабатываю небольшое API. Мне требуется после нажатия кнопки считать данные из input'a , произвести с ними некоторые действия и выввести на экран, если это возможно (Что-то вроде месседжбокса).

Пробовал временно обойтись без кнопки, прописав инпуту следующую конструкцию:

и старался забрать переменную q :

Но, мягко говоря, все тщетно.

Абсолютно не понимаю как по кнопке выполнить определенную функцию.

Разобрался. Если вдруг у кого возникнет подобный вопрос, то вот код и скрины.

Вывод

Ответы (1 шт):

Вам нужна форма а не просто поле и кнопка.

При этом вам надо тип кнопки сделать submit а вместо /url указать ваш урл роутинга которая перехватывается вашей функцией some_sum .

Ну и вашей функции some_sum указать декоратор вашего урла. Для моего примера должно быть так:

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

Работа с формами – непростой метод

Сперва давайте создадим шаблон login.html , в котором будет содержаться следующий код.

А после функции представления books необходимо добавить этот код.

Учтите, что аргумент methods был передан декоратору route().

Объект класса request позволяет получить данные о текущем веб-запросе. Данные, полученные с использованием формы, находятся в атрибуте form объекта request . Это словарь, который нельзя редактировать и имеющий название ImmutableMutiDict .

Далее, для получения доступа к странице будет использоваться метод GET . Следовательно, код, находящийся внутри if- блока функции login() не будет учитываться в ходе исполнения приложения.

Работа с формами во Flask

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

Работа с формами во Flask

Если использовать правильное имя пользователя и пароль при заполнении формы и нажать Enter , то тогда появится соответствующее уведомление над формой.

Вот, как осуществляется работа с формами во Flask . Но также необходимо обратить внимание на пакет WTForms .

Что такое WTForms?

Это специальная библиотека, которая может использоваться как в совокупности с фреймворками, так и без связи с ними. Она умеет создавать формы, осуществлять их проверку и заполнять их определенными данными. Также в ее функционал входит ряд других возможностей. Помимо этого, библиотека позволяет реализовать защиту от CSRF.

Чтобы установить ее, используется Flask-WTF – специальное расширение, которое делает совместимым Flask и WTForms . В функционал также входят такие функции, как загрузка файлов, ввод каптчи, интернационализация, и так далее.

Чтобы осуществить инсталляцию библиотеки, используется такая инструкция.

Как создать класс Form?

Для начала необходимо определить формы в виде классов Python. Каждая из форм должна расширять класс FlaskForm , который находится в пакете flask_wtf . FlaskForm – это обертка, которая позволяет использовать набор полезных методов для класса wtform.Form .

Внутри класса, определение полей осуществляется в формате переменных класса и происходит путем создания объекта, который ассоциируется с типом поля.

Пакет wtform предлагает набор классов, которые представляют собой такие поля: StringField , PasswordField, SelectField, TextAreaField, SubmitField и ряд других.

Сперва необходимо создать файл с названием forms.py внутри flask_app , и в него интегрировать такой код.

Здесь определяется класс формы ContactForm , в котором есть четыре поля: name, email, message, submit . Эти переменные нужны, чтобы осуществить рендеринг полей формы, а также получения данных, которые в них находятся. Помимо этого, через них можно изменять содержимое этих форм.

При создании этой формы использовались два StringField, TextAreaField, SubmitField .

Каждый раз, при создании поля, функции-конструктору, используемой для этого, передаются определенные аргументы:

  1. Строка, содержащая метку, отображаемую внутри тега в момент рендеринга поля.
  2. Список валидаторов (элементов для проверки полей формы), передача которых осуществляется в виде аргументов-ключевых слов. Под валидаторами подразумеваются функции или классы, определяющие, правильно ли введены данные в поле.
    Для каждого поля возможно применение нескольких валидаторов, которые разделяются запятыми.

Что касается валидаторов, то их можно создать самостоятельно или воспользоваться уже предустановленными в wtforms.validators . Так, в этой форме мы использовали два из них:

  1. DataRequired. Проверяет, была ли хоть какая-то информация введена в это поле.
  2. Email. Выполняет проверку, является ли содержимое конкретного поля действующим электронным адресом.

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

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

Установка SECRET_KEY

Во Flask_WTF имеется встроенная поддержка возможности предотвращения CSFR- атак. Более того, это данный компонент делает по умолчанию. Как это делается? Путем встраивания в элемент внутри формы специального токена.

Затем он проверяет, насколько подлинный запрос. Еще до генерации csrf-токена необходимо добавить секретный ключ в файл main2.py . Для этого используются следующие строки.

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

Секретный ключ должен соответствовать следующим требованиям:

  1. Относиться к строковому типу данных.
  2. Желательно, чтобы он был длинным.
  3. Подбираться должен таким образом, чтобы его было трудно разгадать.

Впрочем, секретный ключ используется не только для генерации CSFR-токенов, но и в других расширениях Flask.

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

Формы в консоли

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

Она будет запущена внутри контекста приложения.

Далее импортируется класс ContactForm и создается экземпляр объекта новой формы. Для этого передаются ее данные таким образом.

Необходимо учесть, что передача данных осуществляется в виде объекта MultiDict , так как функция-конструктор класса wtfroms.Form принимает аргумент соответствующего типа.

Если определения данных формы при генерации объекта формы не происходит, а при ее отправке использовался POST-запрос, wtforms.Form использует данные, находящиеся в атрибуте request.form . Учтите, что request.form возвращает объект, относящийся к типу ImmutableMultiDict .

Отличие этих типов в том, что ImmutableMultiDict хранит данные такого же типа, только их нельзя изменять.

А валидация формы осуществляется с использованием метода validate() , который возвращает True в случае успешности проверки.

В данном случае проверка формы оказалась неудачной, поскольку в ходе создания объекта не была передана никакая информация. Чтобы получить более подробную информацию об ошибке и обработать ее, необходимо использовать атрибут errors объекта формы.

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

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

Введение в Python Flask

Flask - это фреймворк Python для создания веб-приложений. С официального сайта,

Когда мы думаем о Python, первое, что приходит нам в голову, - это Django framework. Но с точки зрения новичка в Python, начинать с Flask легче, чем с Django.

Установка Flask

Установить Flask легко и просто. С менеджером пакетов pip нужно сделать только:

Когда вы закончите установку Flask, создайте папку FlaskApp . Перейдите в папку FlaskApp и создайте файл с именем app.py . Импортируйте модуль flask и создайте приложение с помощью Flask, как показано ниже:

Теперь определим основной путь / и соответствующий ему обработчик запросов:

Затем проверьте, является ли исполняемый файл главной программой и запустите приложение:

Сохраните изменения и выполните app.py :

Создание домашней страницы

Во-первых, при запуске приложения мы должны показать домашнюю страницу с последними элементами списка дел, добавленными пользователями. Итак, добавим нашу домашнюю страницу в папку приложения.

Flask ищет файлы шаблонов внутри папки templates . Перейдите в папку PythonApp и создайте папку под названием templates . Внутри templates создайте файл index.html . Откройте index.html и пропишите следующий HTML:

Откройте app.py и импортируйте render_template , который мы будем использовать для рендеринга файлов шаблонов.

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

Bucket List App home page
Bucket List App home page
Bucket List App home page

Создание страницы регистрации

Шаг 1. Настройка базы данных

Мы будем использовать MySQL в качестве сервера. Войдите в MySQL из командной строки или, если вы предпочитаете GUI, например, MySQL work bench, тоже можете пользоваться. Сначала создайте базу данных BucketList . Из командной строки:

Введите требуемый пароль и при входе в систему выполните следующую команду для создания базы данных:

Как только база данных будет создана, создайте таблицу tbl_user , как показано ниже:

Мы будем использовать Stored procedures в приложении Python для взаимодействия с базой данных MySQL. Поскольку таблица tbl_user была создана, создайте процедуру сохранения под названием sp_createUser , чтобы зарегистрировать пользователя.

При создании этой процедуры в таблице tbl_user сначала нужно проверить, не существует ли пользователь с тем же именем username . Если существует, нам нужно выдать ошибку, иначе мы создадим пользователя в таблице user. Вот как должна выглядеть процедура sp_createUser :

Шаг 2. Создание интерфейса регистрации

Перейдите в каталог PythonApp/templates и создайте файл HTML с именем signup.html . Добавьте следующий код HTML в signup.html :

Добавьте такой CSS как signup.css в постоянную папку внутри PythonApp .

В app.py добавьте метод showSignUp для отображения страницы регистрации после поступления запроса в /showSignUp :

Sign Up user page
Sign Up user page
Sign Up user page

Шаг 3. Внедрение метода регистрации

Затем нам нужен server-side метод для UI взаимодействия с базой данных MySQL. Перейдите в PythonApp и откройте app.py . Создайте новый метод signUp , а также добавьте /signUp . Так это выглядит:

Мы будем использовать jQuery AJAX для публикации данных регистрации в методе signUp , поэтому укажем метод в определении маршрута.

Чтобы прочитать опубликованные значения, нам нужно импортировать request из Flask.

С помощью request мы прочитаем значения, как показано ниже:

Импортируйте json из Flask, так как мы используем его для возвращения данных json .

Шаг 4. Создание запроса на регистрацию

Мы будем использовать jQuery AJAX для отправки запроса на регистрацию в метод Python. Загрузите jQuery , разместите его внутри PythonApp/static/js и добавьте ссылку на него со страницы регистрации. Как только jQuery будет включен, мы добавим запрос POST JQuery при нажатии кнопки Sign Up .

Итак, давайте присоединим событие нажатия кнопки, как показано:

Шаг 5: вызов хранимой процедуры MySQL

У нас есть name , email address и password , мы вызываем процедуру MySQL для создания нового пользователя.

Чтобы соединиться с MySQL, мы будем использовать Flask-MySQL, который является расширением Flask. Чтобы начать работу с Flask-MySQL , установите его с помощью менеджера пакетов pip :

Импортируйте MySQL внутрь app.py :

Ранее мы определили наше приложение:

Наряду с этим, включая следующие конфигурации MySQL:

Сначала давайте создадим соединение MySQL:

Когда соединение установлено, нам понадобится cursor для запроса stored процедуры. Через conn соединение создаём курсор.

Перед вызовом stored процедуры, давайте сделаем надёжный пароль с помощником от Werkzeug. Импортируйте модуль в app.py :

Используйте модуль для создания хэшированного пароля.

Теперь вызываем процедуру sp_createUser :

Подводя итоги

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

Читайте также: