/
PetrovSA
/
python-dev-course
Обзор
Документация
Войти
/
PetrovSA
/
python-dev-course
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Part 8 - FastAPI/L16/L16_3/main.py
96 строк
4 KB
PetrovSerega
Initial commit
08 май 2026, 17:14
08 май 2026, 17:14
9e45db8
Код
Авторство
О чём код?
# uvicorn L16_3.main:app --reload from fastapi import FastAPI from fastapi.responses import HTMLResponse app = FastAPI() # region Возврат HTML. Пример 1: Динамическое содержимое HTML @app.get("/check_value/{value}", response_class=HTMLResponse) async def check_value(value: int): if value > 10: message = f"<p style='color:green; font-size: 32px;'>Число '{value}' больше десяти.</p>" else: message = f"<p style='color:red; font-size: 32px;'>Число '{value}' меньше или равно десяти.</p>" return f"<h1>Результат проверки</h1>{message}" # endegion # region Шаблонизатор Jinja2. Пример 1: Простой шаблон jinja2 # Подключаем необходимые модули # TemplateResponse требует обязательный параметр 'request' from fastapi import Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates # Указываем путь к папке, где лежат .html файлы templates = Jinja2Templates(directory="L16_3/templates") @app.get("/hello", response_class=HTMLResponse) def hello(request: Request, name: str = ""): # Аргументы TemplateResponse: # 1. request — обязательный объект запроса для Jinja2 # 2. name — имя файла-шаблона в папке templates # 3. context — словарь с данными, которые будут доступны внутри HTML return templates.TemplateResponse( request=request, name="hello.html", context={"name": name} ) # endegion # region Создание простых страниц. Пример 1: Список книг # Временное хранилище книг в памяти books_db = [ {"id": 1, "title": "Война и мир", "author": "Лев Толстой"}, {"id": 2, "title": "Преступление и наказание", "author": "Фёдор Достоевский"}, ] # Маршрут для отображения списка книг @app.get("/books", response_class=HTMLResponse) async def show_books(request: Request): # Передаём список книг в шаблон return templates.TemplateResponse( request=request, name="books/books.html", context={"books": books_db} ) # Обработка GET-запроса для отображения формы создания записи @app.get("/books/new", response_class=HTMLResponse) async def new_book_form(request: Request): return templates.TemplateResponse(request=request, name="books/new_book.html") # Обработка POST-запроса (отправка формы) from fastapi import Form from fastapi.responses import RedirectResponse # Обработка POST-запроса, которые приходит с данными формы создания записи @app.post("/books", response_class=HTMLResponse) async def create_book(title: str = Form(...), author: str = Form(...)): # Генерируем новый ID (максимальный существующий + 1) new_id = max((book["id"] for book in books_db), default=0) + 1 books_db.append({"id": new_id, "title": title, "author": author}) # Перенаправляем пользователя на страницу со списком книг return RedirectResponse(url="/books", status_code=303) # endegion # region from fastapi.staticfiles import StaticFiles # mount() делает папку доступной по URL /static app.mount("/static", StaticFiles(directory="L16_3/static"), name="static") # endregion