Что проще Flask?

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

Для этого подходит микрофреймворк Flask, написанный на Python.

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

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

Создаем Python проект. В IDLE PyCharm можно сразу создать Flask проект.

Если вы используете другую среду разработки, просто создайте новый проект и установите в виртуальное окружение библиотеку Flask.

pip install flask

Flask использует следующую структуру проекта

templates – хранилище HTML шаблонов,

static – хранилище статичных компонентов,

app.py – само веб-приложение.

app.py

from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()

Так выглядит первоначальное Flask приложение. В дальнейшем, будем расширять этот файл новыми функциями. Каждая функция с декоратором “@app.route” будет отвечать за отдельную страницу сайта. В этих функциях будем создавать маршрутизацию между страницами, обрабатывать запросы пользователя.

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

import sqlite3 import csv with open('phn.csv', 'r', encoding="utf-8") as fin: dr = csv.DictReader(fin, delimiter=";") to_db = [(i['abc'], i['start'], i['to'], i['c'],i['operator'],i['region']) for i in dr] connection = sqlite3.connect('database.db') with open('schema.sql') as f: connection.executescript(f.read()) cur = connection.cursor() cur.executemany("INSERT INTO phonenum VALUES (NULL,?,?,?,?,?,?)", to_db) connection.commit() connection.close()

Исходные данные хранились в формате csv. Импортируем модуль csv и прочитаем данные файла.

Импортируем базу данных sqlite3.

Создаем файл базы данных database.db

Прочитаем файл schema.sql, в котором хранится скрипт создания таблицы базы данных, и выполним запрос к database.db.

DROP TABLE IF EXISTS phonenum; CREATE TABLE phonenum ( id INTEGER PRIMARY KEY AUTOINCREMENT, ABC TEXT NOT NULL, start TEXT NOT NULL, finish TEXT NOT NULL, capacity TEXT NOT NULL, operator TEXT NOT NULL, region TEXT NOT NULL );

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

Вернемся к файлу app.py. Создадим функцию, принимающую номер телефона и возвращающую сотовый оператор, к которому относится номер.

def make_request(numb): mess = '' if len(numb) != 10 or numb[0] != '9': mess = 'Неверный формат телефона' first = numb[:3] second = numb[3:] cursor = get_db_connection() cursor.execute('SELECT * FROM phonenum WHERE ABC = ? AND start <= ? AND finish >= ?', (first, second, second)) number = cursor.fetchone() cursor.close() if number is None and mess == '': mess = 'Не найден' return number, mess

Данная функция проверяет формат номера телефона, отправляет SELECT запрос к базе данных и возвращает найденную строчку или сообщение об ошибке.

Создадим функцию index, работающую с шаблоном index.html.

@app.route('/', methods=['POST']) def index(): num = numb = mess = '' if request.method == 'POST': numb = request.form.get('numb') num, mess = make_request(numb) return render_template('index.html', number=numb, num=num, mess=mess)

Данная функция объявляет маршрут index.html и обрабатывает запросы пользователя, полученные методом POST.

Создадим шаблон index.html

<!doctype html> <html> <head> <title>Check Phone</title> </head> <body> <form action="/" method="post"> <p> <label for="numb">Phone number</label> <input type="text" placeholder="Phone number" name="numb"> {% if mess %} <p><label>{{ mess }}</label></p> {% endif %} {% if num %} <p><label>Phone is {{ number }}</label></p> <p><label>Operator is {{ num[5] }}</label></p> <p><label>Region is {{ num[6] }}</label></p> {% endif %} </p> <p> <button type="submit">Отправить!</button> </p> </form> {% for n in nums %} <h2>{{ nums[0] }}</h2> {% endfor %} </body> </html>

Flask позволяет использовать стандартные конструкции ветвления такие как:

· Условные операторы {% if condition %} {% endif %}

· Циклы {% for I in list %} {% end for %}

Также есть возможность использовать переменные, переданные в шаблон {{ data }}.

Наше приложение готово, осталось запустить его следующим кодом.

if __name__ == '__main__': app.run()

Пример работы созданного сайта.

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

0
Комментарии
-3 комментариев
Раскрывать всегда