Разработка веб-ресурсов с помощью Python: от простых решений до сложных систем

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

Введение

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

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

Наиболее эффективным решением для полноценного веб-сайта является фреймворк Django. Он включает ORM, админпанель, систему маршрутизации и шаблонов. Установка выполняется через pip:

pip install django

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

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

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

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

Добавление приложения в settings.py. Создание модели в models.py:

from django.db import models

class Article(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

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

Миграции и создание суперпользователя:

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

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

Регистрация модели в admin.py:

from django.contrib import admin
from .models import Article

admin.site.register(Article)

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

Создание view в views.py для отображения статей:

from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'main/article_list.html', {'articles': articles})

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

URLconf и шаблон. Типичные ошибки: забыть добавить приложение в INSTALLED_APPS, не выполнить миграции, проблемы со статическими файлами.

Проблема: статические файлы не отображаются в production. Решение: настроить STATIC_ROOT и использовать collectstatic.

Как сделать легковесный сайт на Flask?

Flask подходит для небольших проектов и API. Установка:

pip install flask

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

Минимальное приложение:

from flask import Flask
app = Flask(__name__)

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

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

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

Для шаблонов используется Jinja2. Создание папки templates и файла index.html. Типичная ошибка: не указать template_folder. Проблема с отладкой: не включен debug.

Проблема: импорт шаблонов не работает. Решение: убедиться, что папка templates находится внутри приложения.

Как разработать асинхронное API на FastAPI?

FastAPI обеспечивает высокую производительность и автоматическую документацию. Установка:

pip install fastapi uvicorn

Django python создание приложения (создание веб-приложения на django)

Пример GET-эндпоинта:

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
def read_root():
    return {'Hello': 'World'}

библиотека django python (библиотека django для веб-разработки на python)

Запуск: uvicorn main:app --reload. Документация доступна по /docs. Типичная ошибка: не установлен uvicorn, забыть указать reload.

Проблема: ошибка импорта Pydantic. Решение: установить pydantic отдельно (если не установлен).

Как создать статический сайт из Markdown с Pelican?

Pelican генерирует статические HTML-файлы из Markdown или reStructuredText. Установка:

pip install pelican markdown

Инициализация проекта: pelican-quickstart. Создание статьи в папке content. Команда для генерации: pelican content. Типичная ошибка: неправильный формат имени файла (должен содержать дату). Проблема: не отображаются изображения. Решение: настроить STATIC_PATHS.

Проблема: отсутствие темы по умолчанию. Решение: скачать тему или использовать встроенную notmyidea.

Расширенные примеры кода

Django: Class-Based View с пагинацией и формой поиска

Создадим список статей с постраничной навигацией и формой поиска.

Пример
# views.py
from django.views.generic import ListView
from .models import Article

class ArticleListView(ListView):
    model = Article
    template_name = 'main/article_list.html'
    context_object_name = 'articles'
    paginate_by = 5

    def get_queryset(self):
        queryset = super().get_queryset()
        q = self.request.GET.get('q')
        if q:
            queryset = queryset.filter(title__icontains=q)
        return queryset
При GET-запросе /articles/?q=python вернет статьи, содержащие 'python' в заголовке. Пагинация доступна как page_obj.

Шаблон (фрагмент):

Пример
<form method="get">
    <input type="text" name="q">
    <button type="submit">Поиск</button>
</form>
{% for article in articles %}
    <h3>{{ article.title }}</h3>
{% endfor %}
<div class="pagination">
    <span>{% if page_obj.has_previous %}...{% endif %}</span>
</div>

Flask: Приложение с базой данных SQLAlchemy и формами WTForms

Настройка Flask с расширениями.

Пример
from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SECRET_KEY'] = 'secret'
db = SQLAlchemy(app)

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)

class ArticleForm(FlaskForm):
    title = StringField('Заголовок', validators=[DataRequired()])
    content = TextAreaField('Содержание', validators=[DataRequired()])
    submit = SubmitField('Сохранить')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = ArticleForm()
    if form.validate_on_submit():
        article = Article(title=form.title.data, content=form.content.data)
        db.session.add(article)
        db.session.commit()
        return redirect('/')
    articles = Article.query.all()
    return render_template('index.html', form=form, articles=articles)

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)
После запуска на главной странице форма для добавления статьи и список всех статей. Данные сохраняются в SQLite.

FastAPI: Асинхронный веб-сервис с фоновыми задачами и валидацией

Пример использования BackgroundTasks и Pydantic.

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

app = FastAPI()

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

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = False

@app.post('/items/')
async def create_item(item: Item, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, f'Created item {item.name}')
    return {'item': item}

@app.get('/items/{item_id}')
def read_item(item_id: int, q: str = None):
    return {'item_id': item_id, 'q': q}
При POST-запросе с JSON-телом происходит создание записи в логе (фоново). GET /items/1?q=test возвращает параметры. Документация на /docs.

Pelican: Статический блог с плагинами и кастомной темой

Настройка pelicanconf.py:

Пример
SITENAME = 'Мой блог'
SITEURL = ''
PATH = 'content'
TIMEZONE = 'Europe/Moscow'
DEFAULT_LANG = 'ru'
THEME = 'themes/custom'
PLUGIN_PATHS = ['plugins']
PLUGINS = ['sitemap', 'feed']

Создание статьи content/2024-01-15-post1.md:

Пример
Title: Первая статья
Date: 2024-01-15 10:20
Category: Новости

Текст статьи на русском языке.

Команда генерации: pelican content. Результат: папка output с HTML-файлами.

После открытия index.html в браузере отображается список статей.

Создание сайта на Python - comments

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