Flask
Flask — это микрофреймворк для создания веб-приложений на языке Python. Он называется «микро», потому что предоставляет только базовые возможности для работы с HTTP-запросами, маршрутизацией и шаблонами, но при этом остается гибким и расширяемым. Flask не навязывает структуру проекта, что делает его популярным для небольших приложений, прототипирования и даже для создания API.
Основные возможности Flask:
- Маршрутизация URL.
- Поддержка шаблонов (через Jinja2).
- Встроенный сервер для разработки.
- Поддержка сессий и cookies.
- Легкая интеграция с базами данных и другими библиотеками.
- Расширяемость через плагины (например, Flask-SQLAlchemy, Flask-WTF и др.).
Примеры использования Flask
1. Простое веб-приложение
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Привет, мир!"
@app.route('/about')
def about():
return "Это страница 'О нас'."
if __name__ == '__main__':
app.run(debug=True)
- Запустите этот код, и Flask запустит сервер на
http://127.0.0.1:5000/
. - Перейдите по адресу
http://127.0.0.1:5000/
, чтобы увидеть «Привет, мир!». - Перейдите по адресу
http://127.0.0.1:5000/about
, чтобы увидеть «Это страница ‘О нас’.».
2. Использование шаблонов (Jinja2)
Создайте папку templates
и добавьте файл index.html
:
<!DOCTYPE html>
<html>
<head>
<title>Главная страница</title>
</head>
<body>
<h1>Привет, {{ name }}!</h1>
</body>
</html>
Обновите код Flask:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name="Пользователь")
if __name__ == '__main__':
app.run(debug=True)
- Flask автоматически найдет шаблон
index.html
и подставит значение переменнойname
.
3. Обработка POST-запросов и форм
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
name = request.form.get('name')
return f"Привет, {name}!"
return render_template('form.html')
if __name__ == '__main__':
app.run(debug=True)
Создайте файл form.html
в папке templates
:
<!DOCTYPE html>
<html>
<head>
<title>Форма</title>
</head>
<body>
<form method="POST">
<label for="name">Введите ваше имя:</label>
<input type="text" id="name" name="name">
<button type="submit">Отправить</button>
</form>
</body>
</html>
- При отправке формы Flask обработает POST-запрос и вернет приветствие.
4. Создание REST API
Flask часто используется для создания API. Пример простого API:
from flask import Flask, jsonify, request
app = Flask(__name__)
data = []
@app.route('/api/data', methods=['GET'])
def get_data():
return jsonify(data)
@app.route('/api/data', methods=['POST'])
def add_data():
new_item = request.json
data.append(new_item)
return jsonify({"message": "Данные добавлены"}), 201
if __name__ == '__main__':
app.run(debug=True)
- Используйте инструменты вроде Postman или
curl
для тестирования: - GET-запрос на
/api/data
вернет пустой список. - POST-запрос на
/api/data
с JSON-телом (например,{"name": "Test"}
) добавит данные.
5. Работа с базой данных (Flask-SQLAlchemy)
Установите Flask-SQLAlchemy:
pip install flask-sqlalchemy
Пример использования:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
@app.route('/users')
def get_users():
users = User.query.all()
return ", ".join([user.username for user in users])
if __name__ == '__main__':
with app.app_context():
db.create_all() # Создает таблицу, если она не существует
app.run(debug=True)
- Этот код создает базу данных SQLite и таблицу
User
, а также маршрут для получения списка пользователей.
Когда использовать Flask?
- Для небольших проектов или прототипов.
- Для создания REST API.
- Когда нужна гибкость и минимализм.
- Для обучения веб-разработке на Python.
Для более сложных проектов можно рассмотреть Django, который предоставляет больше встроенных возможностей (админка, ORM, аутентификация и т.д.).