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

источник

Ответить