Flask в действии: веб-фреймворк для Python

Раздел: Веб-разработка -> Веб-фреймворки

Основы работы с Flask

Flask это микрофреймворк для создания веб-приложений на Python. Наиболее эффективный способ начать установить Flask через pip и создать минимальное приложение в одном файле.


from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Привет, мир!'

if __name__ == '__main__':
    app.run(debug=True)
  

Django разработка веб приложений на python (разработка веб-приложений на django)

Запуск приложения осуществляется командой python app.py. После запуска сервер будет доступен по адресу http://127.0.0.1:5000. Параметр debug=True включает автоматическую перезагрузку при изменениях кода и отображение подробных ошибок.

Типичная проблема: если при запуске возникает ошибка ModuleNotFoundError: No module named 'flask', значит, Flask не установлен. Решение выполнить pip install flask в терминале.

Другая частая ошибка использование имени файла flask.py, которое конфликтует с именем модуля. Файл следует называть иначе, например app.py.

Как добавить несколько маршрутов с разными HTTP методами?

Flask позволяет определять маршруты с помощью декоратора @app.route. Можно указать метод через параметр methods.


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'Получен POST запрос'
    else:
        return 'Форма входа'
  

Fast api python (fastapi для python)

Типичная ошибка: забыть импортировать request - from flask import request. Иначе возникнет NameError.

Как передать переменные из Python в HTML шаблон?

Используется функция render_template, которая принимает имя шаблона и именованные параметры.

from flask import render_template

@app.route('/user/<name>')
def user(name):
    return render_template('user.html', username=name)

веб библиотека python (веб-библиотека python (фреймворк))

В шаблоне user.html переменная выводится через {{ username }}.

Типичная проблема: шаблон не найден, если папка templates отсутствует в корне проекта или в неправильном месте. Необходимо создать папку templates и поместить туда HTML файлы.

Как обработать данные из формы, отправленной методом POST?

Данные формы доступны через словарь request.form. Рекомендуется проверять метод запроса.

@app.route('/submit', methods=['GET', 'POST'])
def submit():
    if request.method == 'POST':
        name = request.form['name']
        return f'Привет, {name}!'
    return '''<form method="post">
                <input type="text" name="name">
                <button type="submit">Отправить</button>
              </form>'''

Flask на языке python (flask на python)

Типичная ошибка: обращение к request.form без проверки наличия ключа может вызвать KeyError. Используйте request.form.get('name', 'гость').

Как подключить базу данных SQLite через SQLAlchemy?

Flask-SQLAlchemy упрощает работу с ORM. Установка через pip install flask-sqlalchemy.

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)

with app.app_context():
    db.create_all()

Python manage py runserver (запуск сервера разработки django через manage.py runserver)

Типичная проблема: забыть создать контекст приложения (app.app_context()) перед операциями с базой. Вызов db.create_all() вне контекста вызовет RuntimeError. Также необходимо предварительно выполнить импорт моделей.

Как создать страницу для ошибки 404?

Flask предоставляет декоратор @app.errorhandler для кодов ошибок.

@app.errorhandler(404)
def not_found(error):
    return 'Страница не найдена', 404

Типичная ошибка: не возвращается код ошибки (404) - по умолчанию возвращается 200. Второй элемент кортежа задает HTTP статус.

Как разделить приложение на модули с помощью Blueprints?

Blueprints позволяют организовать маршруты в отдельные блоки. Создается объект Blueprint, а затем регистрируется в приложении.

# admin.py
from flask import Blueprint
admin = Blueprint('admin', __name__)

@admin.route('/dashboard')
def dashboard():
    return 'Панель администратора'

# app.py
from admin import admin
app.register_blueprint(admin, url_prefix='/admin')

Типичная ошибка: циклический импорт, если admin.py импортирует app. Решение вынести создание app в отдельный файл или использовать фабрику приложений.

Расширенные примеры работы с Flask

Пример 1: форма с валидацией и CSRF с помощью Flask-WTF

Flask-WTF интегрирует WTForms и обеспечивает защиту от CSRF. Установка: pip install flask-wtf.

Пример

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class NameForm(FlaskForm):
    name = StringField('Ваше имя', validators=[DataRequired()])
    submit = SubmitField('Отправить')

В маршруте:

Пример

@app.route('/form', methods=['GET', 'POST'])
def form():
    form = NameForm()
    if form.validate_on_submit():
        return f'Привет, {form.name.data}!'
    return render_template('form.html', form=form)

Шаблон form.html:

Пример

<form method="post">
    {{ form.hidden_tag() }}
    {{ form.name.label }} {{ form.name() }}
    {{ form.submit() }}
</form>

Результат: при отправке пустого поля появляется сообщение об ошибке. При успешной отправке приветствие.

(Браузер отобразит форму; при пустом поле - "This field is required.")

Типичная проблема: не установлен SECRET_KEY для CSRF. Необходимо добавить app.config['SECRET_KEY'] = 'секретный_ключ'.

Пример 2: управление схемой базы данных с Flask-Migrate

Flask-Migrate оборачивает Alembic для управления миграциями. Установка: pip install flask-migrate.

Пример

from flask_migrate import Migrate

migrate = Migrate(app, db)

Команды в терминале:

Пример

flask db init         # создать папку migrations
flask db migrate -m "initial"  # создать файл миграции
flask db upgrade      # применить миграции к БД

После изменения модели (например, добавления поля email) повторяются migrate и upgrade.

(Вывод в консоль: "INFO  [alembic....] Running upgrade ... -> ..." )

Типичная ошибка: при выполнении команд переменная окружения FLASK_APP должна указывать на приложение: export FLASK_APP=app.py (или set на Windows).

Пример 3: создание RESTful API с помощью Flask-RESTful

Flask-RESTful упрощает создание API. Установка: pip install flask-restful.

Пример

from flask_restful import Resource, Api

api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'message': 'Hello, World!'}

api.add_resource(HelloWorld, '/api/hello')

Тестирование через curl:

Пример

curl http://127.0.0.1:5000/api/hello
{"message": "Hello, World!"}

Типичная ошибка: не импортирован Resource или Api. Убедитесь, что пакет flask-restful установлен.

Flask на Python - comments

En
Flask на языке python (python)