Flask — это популярный фреймворк для создания веб-приложений на языке Python. Он прост в использовании и идеально подходит для быстрого прототипирования и разработки минимально жизнеспособных продуктов. В этой статье мы расскажем, как развернуть сервер на Flask, создавая простую программу с рендерингом шаблонов и передачей данных в них. Также обсудим распространенные ошибки, с которыми могут столкнуться новички.
Содержание:
Для начала, вам потребуется установить Flask. Это можно сделать с помощью менеджера пакетов Python - pip. Выполните следующую команду в терминале:
pip install Flask
После завершения установки вы можете проверить, что Flask установлен, выполнив:
pip show Flask
Создайте папку для вашего проекта, например, flask_app. Внутри создайте файл app.py, а также папку templates для хранения ваших HTML-шаблонов.
Упрощенная структура для большинства проектов выглядит так:
flask_app/
- app.py
- templates
-- index.html
Гибкая и масштабируемая структура где используется функция-фабрика:
flask_app/
│
├── app/
│ ├── __init__.py
│ ├── views.py
│ ├── models.py
│ ├── static/
│ └── templates/
│ └── index.html
│
├── config.py
└── run.py
Описание структуры:
flask_app/
: Корневая директория проекта.app/
: Пакет приложения, содержащий основные модули и ресурсы.__init__.py
: Инициализирует приложение Flask с помощью функции-фабрики.views.py
: Определяет маршруты и функции представления.models.py
: Содержит модели базы данных.static/
: Директория для статических файлов (CSS, JS, изображения).templates/
: Директория для HTML-шаблонов.index.html
: Главная страница приложения.config.py
: Файл конфигурации приложения.run.py
: Точка входа для запуска приложения.
Пример config.py:
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'your_secret_key'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(os.path.abspath(os.path.dirname(__file__)), 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
Пример app/__init__.py
с функцией-фабрикой:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config
db = SQLAlchemy()
migrate = Migrate()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
db.init_app(app)
migrate.init_app(app, db)
from app import views, models
return app
Пример run.py
:
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
Если вы создаете простое приложение с простой структурой, то код ниж вам подойдет. В другом случае воспользуйтесь примерами выше с "фабрикой".
Теперь откройте файл app.py и добавьте следующий код:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
title = "Привет, Flask!"
message = "Это простое приложение на Flask."
return render_template('index.html', title=title, message=message)
if __name__ == '__main__':
app.run(debug=True)
Что делает return в данном случае:
title
и message
@app.route('/')
- это декоратор. "/" означает что сайт будет доступен по адресу "site.com".
Если вы указываете myapp = Flask(__name__)
то в декораторе будет @myapp.route('/')
Теперь создайте файл index.html внутри папки templates и добавьте следующий HTML-код:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</body>
</html>
Код в этом файле использует синтаксис Jinja2 для отображения переданных данных.
Переменные в шаблоне отображаются - {{ }}
В Jinja2 доступны также:
Чтобы запустить приложение, выполните команду в консоле:
python app.py
Теперь вы можете открыть веб-браузер и перейти по адресу http://127.0.0.1:5000/, чтобы увидеть ваше приложение.
Кроме консоли скрипт можно запустить обычным стартом программы через кнопку "запуск".
При разработке приложений на Flask новички часто допускают ряд распространённых ошибок. Рассмотрим некоторые из них с примерами и способами их предотвращения.
1. Отсутствие виртуального окружения
Ошибка: Установка Flask и других зависимостей глобально, что может привести к конфликтам между пакетами в разных проектах.
Пример:
pip install flask
Решение:
Создавайте и активируйте виртуальное окружение для каждого проекта:
python -m venv env
source env/bin/activate # Для Windows: env\Scripts\activate
2. Игнорирование обработки ошибок
Ошибка: Отсутствие обработки исключений, что может привести к падению приложения при возникновении ошибок.
Пример:
@app.route('/divide')
def divide():
a = int(request.args.get('a'))
b = int(request.args.get('b'))
return str(a / b)
Если b
равен нулю, произойдёт ошибка деления на ноль.
Решение:
Обрабатывайте возможные исключения:
@app.route('/divide')
def divide():
try:
a = int(request.args.get('a'))
b = int(request.args.get('b'))
return str(a / b)
except ZeroDivisionError:
return "Ошибка: деление на ноль запрещено."
3. Хранение конфиденциальных данных в коде
Ошибка: Жёсткое кодирование секретных ключей и паролей в исходном коде.
Пример:
app.config['SECRET_KEY'] = 'mysecretkey'
Решение:
Используйте переменные окружения для хранения конфиденциальных данных:
import os
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
4. Отсутствие защиты от CSRF-атак
Ошибка: Неиспользование токенов CSRF при обработке форм, что делает приложение уязвимым для CSRF-атак.
Решение:
Используйте расширение Flask-WTF, которое автоматически добавляет защиту от CSRF:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
class MyForm(FlaskForm):
name = StringField('Name')
submit = SubmitField('Submit')
5. Неправильная структура проекта
Ошибка: Размещение всего кода в одном файле, что затрудняет поддержку и масштабирование приложения.
Решение:
Организуйте проект с использованием функции-фабрики и модулярной структуры, как описано ранее.
6. Отсутствие обработки статических файлов
Ошибка: Некорректная настройка обработки статических файлов, что приводит к ошибкам при их загрузке.
Решение:
Убедитесь, что статические файлы размещены в папке static
, и Flask настроен на их обслуживание:
app = Flask(__name__, static_folder='static')
7. Использование отладочного режима в продакшене
Ошибка: Запуск приложения с включённым режимом отладки на боевом сервере, что может раскрыть внутреннюю информацию об ошибках.
Решение:
Убедитесь, что режим отладки отключён в продакшене:
if __name__ == '__main__':
app.run(debug=False)
Избегая этих распространённых ошибок, вы сможете создать более надёжное и безопасное приложение на Flask.
Избегая этих распространённых ошибок, вы сможете создать более надёжное и безопасное приложение на Flask.
Создание сервера на Flask — это простой и увлекательный процесс. Надеемся, что это руководство помогло вам освоить базовые принципы работы с Flask, а также рендеринг шаблонов и передачу данных. Ошибки неизбежны, но важно не бояться их, а учиться на каждом шаге. Удачи в разработке!
Автор: Евгений Цветков
Python — это один из самых популярных языков программирования, который используется как новичками, так и профессио...
Flask — это легковесный и мощный веб-фреймворк на языке Python, который позволяет создавать желаемые приложения вс...
Европейская комиссия одобрила без условий приобретение израильского стартапа Run:ai компанией Nvidia за $700 милли...
Rust — это современный язык программирования, который стремительно набирает популярность благодаря своей безопасно...
Облачные платформы для разработки и поддержки ИИ-решений стремительно завоевывают популярность в мире технологий. ...
С каждым днём технологии всё глубже проникают в нашу жизнь, и среди них искусственный интеллект (ИИ) становится вс...