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 установлен.