Основные Python веб-библиотеки для разработки сайтов и API

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

Обзор веб-библиотек Python

Для разработки веб-приложений на языке Python существует несколько популярных решений. Рассмотрим три основных подхода: лёгкий микрофреймворк Flask, полнофункциональный фреймворк Django и современный асинхронный FastAPI. Каждый вариант подходит для определённых задач, и выбор зависит от требований проекта.

Flask - минималистичная веб-библиотека

Как запустить простой веб-сервер с одной страницей?

Flask предоставляет только самое необходимое для создания веб-приложения. Ниже приведён минимальный пример.

from flask import Flask

app = Flask(__name__)

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

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

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

После запуска (команда python app.py) сервер будет доступен по адресу http://127.0.0.1:5000. Flask автоматически обрабатывает GET-запросы к корневому маршруту.

Типичные ошибки:

  • Ошибка импорта ModuleNotFoundError: No module named 'flask' - решение: установить Flask командой pip install flask.
  • Порт 5000 уже занят - используйте другой порт, например app.run(port=8080).
  • Проблемы с кодировкой при возврате не-ASCII символов - добавьте заголовок Content-Type или используйте строку с jsonify.

Цели использования:

  • Быстрое прототипирование малых приложений и API.
  • Микросервисы с минимальными зависимостями.
  • Обучение основам веб-разработки.

Django - многофункциональный веб-фреймворк

Как создать полноценный сайт с админ-панелью и базой данных?

Django включает ORM, шаблонизатор, систему маршрутизации, аутентификацию и административный интерфейс. Для начала создадим проект.

django-admin startproject myproject
cd myproject
python manage.py runserver

Fast api python (fastapi для python)

По умолчанию сервер запускается на порту 8000. Для создания приложения внутри проекта выполняется команда:

python manage.py startapp myapp

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

Пример простого представления в myapp/views.py:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Привет от Django!")

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

Маршрут прописывается в myapp/urls.py, а затем подключается к корневому файлу urls.py.

Распространённые проблемы:

  • Ошибка django.core.exceptions.ImproperlyConfigured - проверьте настройки DATABASES в settings.py.
  • Проблемы с миграциями - выполните python manage.py makemigrations и migrate.
  • Конфликты статических файлов в режиме разработки - используйте django.contrib.staticfiles.

Когда выбирать Django:

  • Крупные проекты с множеством связанных моделей (CRM, соцсети).
  • Требуется встроенная админка для управления контентом.
  • Командная разработка со стандартизированной структурой.

FastAPI - производительный асинхронный фреймворк

Как создать асинхронный API с автоматической документацией?

FastAPI основан на Starlette и Pydantic, поддерживает асинхронные обработчики и автоматически генерирует OpenAPI-схему. Пример:

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
async def root():
    return {'message': 'Привет от FastAPI'}

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app)

После запуска документация доступна по адресу http://127.0.0.1:8000/docs.

Возможные сложности:

  • Ошибка RuntimeError: You must use async with - убедитесь, что все асинхронные вызовы обёрнуты в async/await.
  • Проблемы с CORS - добавьте CORSMiddleware.
  • Использование синхронных библиотек (например, SQLAlchemy) внутри асинхронных функций может блокировать цикл событий - применяйте run_in_executor или используйте асинхронные драйверы.

Области применения FastAPI:

  • Высоконагруженные API и микросервисы с большим числом параллельных запросов.
  • Проекты, где важна автоматическая валидация данных и документация.
  • Интеграция с современными фронтенд-фреймворками через REST или WebSocket.

Расширенные примеры использования

Flask: работа с формами и сессиями

Пример веб-приложения с формой входа и сохранением сессии.

Пример
from flask import Flask, render_template_string, request, session, redirect, url_for

app = Flask(__name__)
app.secret_key = 'some-secret-key'

# Шаблон для формы
form_template = '''
<form method="post">
    <input name="username" placeholder="Имя">
    <input type="password" name="password">
    <button type="submit">Войти</button>
</form>
'''

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        # Логика проверки (упрощённо)
        if username == 'admin' and password == 'secret':
            session['user'] = username
            return redirect(url_for('profile'))
    return render_template_string(form_template)

@app.route('/profile')
def profile():
    if 'user' in session:
        return f'Привет, {session["user"]}!'
    return redirect(url_for('login'))

if __name__ == '__main__':
    app.run()
Результат: при GET-запросе на /login отображается форма. После ввода корректных данных (admin/secret) пользователь перенаправляется на /profile, где отображается имя.

Django: создание модели и использование шаблона

Создадим модель Article с полями заголовка и содержания, затем отобразим список статей.

Пример
# myapp/models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title
Пример
# myapp/views.py
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all().order_by('-published')
    return render(request, 'articles.html', {'articles': articles})
Пример

<h1>Список статей</h1>
{% for article in articles %}
  <h2>{{ article.title }}</h2>
  <p>{{ article.content }}</p>
  <hr>
{% endfor %}

После выполнения миграций и добавления нескольких записей через админку, откроется страница со списком.

Вывод в браузере: заголовки и содержимое всех сохранённых статей в порядке от новых к старым.

FastAPI: валидация данных с Pydantic и работа с параметрами пути

Создадим API для управления списком задач (TODO).

Пример
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Task(BaseModel):
    id: int
    title: str
    completed: bool = False

tasks = []

@app.post('/tasks', response_model=Task)
async def create_task(task: Task):
    tasks.append(task)
    return task

@app.get('/tasks/{task_id}', response_model=Task)
async def get_task(task_id: int):
    for t in tasks:
        if t.id == task_id:
            return t
    raise HTTPException(status_code=404, detail='Task not found')

@app.get('/tasks', response_model=List[Task])
async def list_tasks(completed: bool = None):
    if completed is None:
        return tasks
    return [t for t in tasks if t.completed == completed]
Запрос POST /tasks с телом {"id": 1, "title": "Изучить FastAPI"} вернёт созданную задачу. GET /tasks/1 вернёт задачу с id=1. GET /tasks?completed=false вернёт все незавершённые задачи.

FastAPI: WebSocket-подключение

Пример
from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket('/ws')
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f'Эхо: {data}')
После подключения через клиент WebSocket (например, JavaScript) сервер будет отправлять обратно полученное сообщение с префиксом 'Эхо:'.

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

En
веб библиотека python (python)