Web-разработка на Python.Что проще 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 позволяет без особых усилий создавать масштабируемые приложения. Используя готовые расширения, можно создавать полноценные сайты с системами авторизации, субд и адаптивной версткой.
https://t.me/python_job_interview