Практическое руководство: создание веб-приложений на Python 3

Раздел: Веб-разработка -> Веб-разработка

Основные фреймворки для веб-приложений на Python 3

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

FastAPI - современный фреймворк для создания API на Python 3. Он использует асинхронность и автоматически генерирует OpenAPI-документацию. Установка:

pip install fastapi uvicorn

создание сайтов python django (создание веб-сайтов на django с использованием python)

Пример простого приложения:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
    return {"message": "Hello World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

Python web django (web-фреймворк django)

Запуск:

uvicorn main:app --reload

Python web flask (web-фреймворк flask)

Типичные проблемы:

  • Ошибка импорта - проверьте установку зависимостей.
  • Несовместимость версий Python (нужна 3.7+).
  • CORS - для доступа с других доменов используйте fastapi.middleware.cors.

Цель использования: FastAPI подходит для высоконагруженных API, микросервисов, проектов с автоматической документацией.

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

Flask - легковесный микрофреймворк, простой в освоении. Установка:

pip install flask

Python web server (web-сервер на python)

Пример приложения с шаблоном:

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)

Python 3 веб приложение (веб-приложение на python 3)

Типичные проблемы:

  • Ошибка 404 - проверьте пути маршрутов.
  • Проблемы с шаблонами - убедитесь, что папка templates существует.
  • Режим отладки не включается - установите переменную окружения FLASK_ENV=development.

Цель использования: Flask хорош для небольших сайтов, прототипов, приложений с простой логикой.

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

Django - полноценный фреймворк с ORM, админкой и многим другим. Установка:

pip install django

Python веб сервисы (веб-сервисы на python)

Создание проекта и приложения:

django-admin startproject mysite
cd mysite
python manage.py startapp blog

примеры python веб (примеры веб-разработки на python)

Пример модели и админки:

# blog/models.py
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title
# blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)

создание сайта на python (создание сайта на python)

Применение миграций:

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Типичные проблемы:

  • Ошибка при создании суперпользователя - используйте createsuperuser.
  • Проблемы с миграциями - удалите базу данных и выполните миграции заново.
  • Несоответствие версий Python (Django 4 требует Python 3.8+).

Цель использования: Django подходит для крупных проектов, новостных сайтов, интернет-магазинов, где нужна админка и ORM.

- Python django практика (практика django на python)

Расширенные примеры веб-приложений на FastAPI

Пример 1. FastAPI с SQLAlchemy и SQLite

Установка:

Пример
pip install fastapi uvicorn sqlalchemy databases

Код приложения (main.py):

Пример
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

class ItemDB(Base):
    __tablename__ = "items"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String)
    created_at = Column(DateTime, default=datetime.utcnow)

Base.metadata.create_all(bind=engine)

app = FastAPI()

class ItemCreate(BaseModel):
    name: str
    description: str

class ItemResponse(ItemCreate):
    id: int
    created_at: datetime
    class Config:
        orm_mode = True

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.post("/items/", response_model=ItemResponse)
async def create_item(item: ItemCreate):
    db = next(get_db())
    db_item = ItemDB(name=item.name, description=item.description)
    db.add(db_item)
    db.commit()
    db.refresh(db_item)
    return db_item

@app.get("/items/{item_id}", response_model=ItemResponse)
async def read_item(item_id: int):
    db = next(get_db())
    item = db.query(ItemDB).filter(ItemDB.id == item_id).first()
    if not item:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

Результат (запуск и тест через curl):

$ uvicorn main:app --reload
INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

$ curl -X POST "http://localhost:8000/items/" -H "Content-Type: application/json" -d '{"name":"Тестовый предмет","description":"Описание"}'
{"id":1,"name":"Тестовый предмет","description":"Описание","created_at":"2025-04-01T12:00:00"}

$ curl "http://localhost:8000/items/1"
{"id":1,"name":"Тестовый предмет","description":"Описание","created_at":"2025-04-01T12:00:00"}

Пример 2. FastAPI с WebSocket

Код приложения с чатом через WebSocket:

Пример
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from typing import List

app = FastAPI()

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []
    async def connect(self, websocket: WebSocket):
        await websocket.accept()
        self.active_connections.append(websocket)
    def disconnect(self, websocket: WebSocket):
        self.active_connections.remove(websocket)
    async def broadcast(self, message: str):
        for connection in self.active_connections:
            await connection.send_text(message)

manager = ConnectionManager()

@app.websocket("/ws/{client_id}")
async def websocket_endpoint(websocket: WebSocket, client_id: int):
    await manager.connect(websocket)
    try:
        while True:
            data = await websocket.receive_text()
            await manager.broadcast(f"Client #{client_id}: {data}")
    except WebSocketDisconnect:
        manager.disconnect(websocket)
        await manager.broadcast(f"Client #{client_id} left the chat")

Результат (тестирование через JavaScript в браузере):

// Открытие соединения в консоли браузера:
let ws = new WebSocket("ws://localhost:8000/ws/1");
ws.onmessage = function(event) { console.log(event.data); };
ws.send("Привет, мир!");
// Вывод: Client #1: Привет, мир!

Пример 3. FastAPI с фоновыми задачами (BackgroundTasks)

Код приложения с отправкой email в фоне:

Пример
from fastapi import FastAPI, BackgroundTasks
from pydantic import BaseModel
import time

app = FastAPI()

def write_log(message: str):
    with open("log.txt", mode="a") as log:
        log.write(f"{time.ctime()}: {message}\n")

class Notification(BaseModel):
    email: str
    subject: str
    body: str

@app.post("/send-notification/")
async def send_notification(notification: Notification, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, f"Email to {notification.email}: {notification.subject}")
    # Здесь можно добавить реальную отправку email
    return {"status": "Notification will be sent in background"}

Результат (запрос и содержимое файла log.txt):

$ curl -X POST "http://localhost:8000/send-notification/" -H "Content-Type: application/json" -d '{"email":"test@example.com","subject":"Привет","body":"Текст"}'
{"status":"Notification will be sent in background"}

$ cat log.txt
Wed Apr  1 12:05:00 2025: Email to test@example.com: Привет

Веб-приложение на Python 3 - comments

En
Python 3 веб приложение (python)