Сайты, на которых вы смотрите видео, читаете новости или просто общаетесь, реализуют клиент-серверную архитектуру. Клиент, например браузер, отправляет запрос серверу, а тот, исходя от полученного запроса, отправляет клиенту ответ, обычно html-документ.
Если взглянуть «под капот» сайтов, то окажется, что программная реализация работы с запросами подвержена одной общей логике:
Фреймворк — это один из инструментов разработчика для реализации логики приложения.
Flask — это микрофреймворк для создания сайтов на языке Python. Приставка «микро» означает, что это небольшой фреймворк с ограниченным количеством базовых инструментов, которых, тем не менее, достаточно для реализации большинства сайтов. Flask отлично подойдет для реализации API или сайта на облачном сервере. В этой статье мы создадим приложение Flask и расскажем о базовых аспектах обработки входящих данных.
Мы будем использовать PyCharm + pipenv на Windows 10. В интернете достаточно руководств для установки такого комплекта на другие операционные системы. А здесь расскажем, как установить его на Win 10.
Установите Python:
Переходим на официальный сайт www.python.org/downloads/, выбираем версию Python под нашу операционную систему, скачиваем и устанавливаем, следуя всем инструкциям инсталлятора.
Установите pipenv:
Pipenv — это пакет управления виртуальным окружением python. Для того, чтобы скачать его открываем командную строку Windows и выполняем вот эту команду:
py -m pip install pipenv
Установите PyCharm
PyCharm — это среда разработки для языка программирования Python. Чтобы её установить, заходим на официальный сайт www.jetbrains.com/ru-ru/pycharm/, выбираем версию Community (или Professional, если вы готовы оформить подписку), скачиваем и устанавливаем, также следуя инструкциям установщика.
Создание проекта
В левом верхнем углу нажимаем «File» -> «New Project»:
После того, как настроили и указали все необходимые параметры, нажимаем «Create».
Важно! Необходимо, чтобы в путях не было каталогов с названиями на кириллице — это может привести к ошибке.
Установите Flask
После создания проекта нажимаем на кнопку “Terminal” в нижней части среды разработки и выполняем эту команду:
pip install flask
Если вы выполнили правильно все шаги до этого момента, то начнется загрузка Flask.
При возникновении ошибки «Выполнение сценариев в этой системе отключено» необходимо запустить терминал PowerShell от имени администратора и выполнить в нём команду
Set-ExecutionPolicy RemoteSigned
. После чего ввести[A]
.
После установки необходимых компонентов можно перейти к непосредственному с взаимодействию с фреймворком. Сначала импортируйте Flask:
from flask import Flask
Напишем небольшое приложение Flask, на основе которого продемонстрируем работу с URL запросами:
from flask import Flask
app = Flask(__name__)
@app.route("/timeweb")
def timeweb():
return "Это страница /timeweb"
@app.route("/blog")
def blog():
return "Это страница /blog"
@app.route("/cloud")
def cloud():
return "Это страница /cloud"
if __name__ == "__main__":
app.run()
Прокомментируем подробнее, что делает этот код:
Теперь запустим его. В консоли мы можем найти адрес нашего локального сайта:
Перейдем по нему и… ничего не получим:
Такой результат мы получили из-за того, что не описали декоратор для URL-запроса, содержащего только корневой путь «/». Теперь попробуем перейти по другим URL-адресам, для которых описали необходимые декораторы и функции:
Также при каждом подключении в консоль выводится информация о нём:
В этом случае мы использовали и обрабатывали GET-запрос — получали информацию из URL. Но обработка данных входящих запросов в Flask этим не ограничивается. Теперь попробуем получить из URL-запроса перечень различной информации.
cloud
С помощью URL-запроса можно передавать серверу различные аргументы (они же query-параметры). Наверняка вам приходилось видеть в запросах знак вопроса. Знак вопроса в URL-запросе означает, что после него идут аргументы. Предположим, у нас есть такой запрос:
timeweb.com/blog?framework=flask&language=python&version=3.10
В этом запросе переданы пары ключ-значение через амперсанд. Если разобрать этот запрос на части, то мы получим такие пары:
framework=flask
language=python
version=3.10
Напишем функцию get_example(), которая произведет извлечение данных из запроса в Flask Python, а в качестве ответа будет ответа сообщение с полученным данными:
from flask import request
@app.route("/get_example")
def get_example():
framework = request.args.get('framework')
language = request.args.get('language')
version = request.args.get('version')
return "language = {};framework = {}; version = {} ".format(language, framework, version)
Что делает этот код:
Теперь перейдем по этому адресу http://127.0.0.1:5000/get_example?language=python&framework=flask&version=3.10
:
Как видим, код правильно обработал запрос.
По умолчанию .route() обрабатывает только GET-запросы. В flask можно обрабатывать и POST-запросы. Добавим в наше приложение flask формы авторизации логин-пароль:
@app.route('/authorization', methods=['GET', 'POST'])
def authorization():
if request.method == 'POST':
Login = request.form.get('Login')
Password = request.form.get('Password')
if Login=="admin" and Password=="admin":
return "Correct"
else:
return "Incorrect"
return '''
<form method="POST">
<div><label>Login: <input type="text" name="Login"></label></div>
<div><label>Password: <input type="text" name="Password"></label></div>
<input type="submit" value="Enter">
</form>'''
Подробно распишем работу этого декоратора в приложении на Flask:
Перейдем по 127.0.0.1:5000/authorization
и проверим работу декоратора:
При корректных данных:
И при неправильных:
Вот полный код нашего приложения:
from flask import Flask
app = Flask(__name__)
@app.route("/timeweb")
def timeweb():
return "Это страница /timeweb"
@app.route("/blog")
def blog():
return "Это страница /blog"
@app.route("/cloud")
def cloud():
return "Это страница /cloud"
from flask import request
@app.route("/get_example")
def get_example():
framework = request.args.get('framework')
language = request.args.get('language')
version = request.args.get('version')
return "language = {};framework = {}; version = {} ".format(language, framework, version)
@app.route('/authorization', methods=['GET', 'POST'])
def authorization():
if request.method == 'POST':
Login = request.form.get('Login')
Password = request.form.get('Password')
if Login=="admin" and Password=="admin":
return "Correct"
else:
return "Incorrect"
return '''
<form method="POST">
<div><label>Login: <input type="text" name="Login"></label></div>
<div><label>Password: <input type="text" name="Password"></label></div>
<input type="submit" value="Enter">
</form>'''
if __name__ == "__main__":
app.run()
Размещайте свои Flask-приложения<br>в облаке Timeweb Cloud
В этой статье мы рассмотрели способы обработки информации, поступающей на сервер от клиента, с помощью микрофреймворка Flask: как в виде запросов GET, так и POST. Но, необходимо помнить, что мы не рассмотрели важный аспект обработки — безопасность сервера. При работе с данными от клиента нужно всегда их проверять на наличие ошибок или вредоносных элементов. Профилактика — это лучший способ уберечь сервер от нежелательных последствий.