Создано: 14.08.2026 58 просмотров
✓ Проверено юристом 14.08.2026

Titan - Отзывы, как вернуть деньги

Предупреждение о рисках. Остерегайтесь мошенников: перед переводом средств всегда проверяйте компанию, наличие у неё лицензий, условия сотрудничества и возможные риски. Помните: злоумышленники часто выдают себя за регулируемых брокеров. Полный текст — в Risk Disclaimer.

Чат с Gemini

обьясни как получить один get с базы fast api

и как работает

def get_one_db(review_id: int, db: Session):

return db.query(Review).filter(Review.id == id).first()

Главное, что стоит заметить в вашем коде: в функции описан параметр review_id, но внутри фильтра используется перемнная id. Из-за этого вы получите ошибку NameError: name 'id' is not defined (или сравнение со встроенной функцией Python id).

Ниже подробно разберем, как работает эта функция, и как связать её с маршрутом (эндпоинтом) в FastAPI.

1. Как работает функция get_one_db

Исправленный вариант функции выглядит так:

Python

from sqlalchemy.orm import Session
from models import Review # Ваша модель SQLAlchemy

def get_one_db(review_id: int, db: Session):
return db.query(Review).filter(Review.id == review_id).first()

Вот что происходит пошагово:

  1. db.query(Review): SQLAlchemy формирует базовый SQL-запрос SELECT * FROM reviews (обращается к таблице, за которую отвечает модель Review).
  2. .filter(Review.id == review_id): Добавляет в SQL-запрос условие WHERE reviews.id = <значение_review_id>.
  3. .first(): Выполняет запрос к БД и возвращает первую найденную запись в виде объекта Review.
    • Если запись найдена — возвращается объект модели.
    • Если записи с таким id нет — возвращается None.

2. Как применить это в FastAPI

Чтобы клиент (например, фронтенд) мог получить эту отзыв по HTTP GET-запросу, создается эндпоинт в FastAPI.

Вот полный рабочий пример с обработкой ситуации, когда объект не найден (ошибка 404):

Python

from fastapi import FastAPI, Depends, HTTPException, status
from sqlalchemy.orm import Session

# Импорты вашей сессии БД и функции CRUD
from database import get_db
from models import Review

app = FastAPI()

# CRUD-функция (исправленная)
def get_one_db(review_id: int, db: Session):
return db.query(Review).filter(Review.id == review_id).first()

# GET эндпоинт
@app.get("/reviews/{review_id}")
def read_review(review_id: int, db: Session = Depends(get_db)):
# 1. Запрашиваем данные из базы
review = get_one_db(review_id=review_id, db=db)

# 2. Если запись не найдена, возвращаем HTTP 404
if review is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Отзыв не найден"
)

# 3. Если запись есть, FastAPI автоматически сериализует её в JSON
return review

Как это работает вместе:

  • {review_id} в пути (@app.get("/reviews/{review_id}")): Передает ID из URL (например, /reviews/5) в параметр функции read_review.
  • db: Session = Depends(get_db): Внедряет сессию базы данных (Dependency Injection) на время выполнения запроса и автоматически закрывает её после завершения.

Показать, как переписать этот запрос на современный стиль SQLAlchemy 2.0 (async/await)?Да

def get_one_review(review_id: int, db: Session):

return db.query(Review).filter(Review.id == review_id).first()

@router.get('review_id}', response_model=ReviewOut, status_code=status.HTTP_204_NO_CONTENT)

def get_one(review_id: int, db: Session = Depends(get_db)):

one_review = crud.review.get_one_review(review_id=review_id, db=db)

if not one_review:

raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)

return None

В представленном коде есть три критические ошибки, из-за которых эндпоинт либо не запустится, либо вернет не то, что ожидается:

  1. Синтаксическая ошибка в декораторе пути: Написано 'review_id}' вместо '/{review_id}' (пропущены открывающая фигурная скобка { и слэш /).
  2. Конфликт status_code=204 и response_model: Код ответа 204 No Content по стандарту HTTP запрещает возвращать какое-либо тело ответа (body). Из-за этого вы возвращаете return None, но при этом объявили response_model=ReviewOut. Для получения объекта нужно использовать статус 200 OK.
  3. Возврат None вместо объекта: Вы получаете one_review из базы, но в конце делаете return None, поэтому клиент никогда не получит данные отзыва.

Исправленный код

Вот как должен выглядеть рабочий эндпоинт для получения одного отзыва:

Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session

# ... ваши импорты (crud, get_db, ReviewOut и т.д.) ...

router = APIRouter()

# 1. Исправлен путь: добавлен '/' и '{'
# 2. Убран status_code=204 (по умолчанию будет 200 OK)
@router.get("/{review_id}", response_model=ReviewOut)
def get_one(review_id: int, db: Session = Depends(get_db)):
one_review = crud.review.get_one_review(review_id=review_id, db=db)

if not one_review:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Отзыв не найден"
)

# 3. Возвращаем найденный объект вместо None
return one_review

Что изменилось и почему:

Проблема в вашем кодеКак исправленоПочему это важно@router.get('review_id}')@router.get("/{review_id}")FastAPI не сможет спарсить переменную пути без { и /. Вы увидите ошибку при старте сервера.status_code=204Убрано (default 200 OK)Статус 204 означает «Успешно, но данных нет». Если нужно вернуть объект, должен быть статус 200.return Nonereturn one_reviewЕсли вернуть None, клиент получит пустое тело, даже если запись была успешно найдена в БД.

расскажи детальней не понял

Конфликт status_code=204 и response_model: Код ответа 204 No Content по стандарту HTTP запрещает возвращать какое-либо тело ответа (body). Из-за этого вы возвращаете return None, но при этом объявили response_model=ReviewOut. Для получения объекта нужно использовать статус 200 OK.

Давайте разберем этот момент детально на простых жизненных примерах и техническом устройстве HTTP.

1. Что вообще такое статус 204 No Content?

Каждый ответ от сервера состоит из двух главных частей:

  1. Заголовки (Headers) — служебная информация (статус ответа, тип данных, куки).
  2. Тело ответа (Body) — сами данные, которые мы передаем (JSON, HTML, картинка).

HTTP-статус 204 No Content буквально переводится как:

«Сервер успешно обработал ваш запрос, но ему абсолютно нечего сказать или отправить обратно в теле ответа».

По спецификации протокола HTTP, если сервер отправляет статус 204, он ОБЯЗАН прислать пустое тело ответа.

Аналогия из жизни:

  • Статус 200 (OK): Вы спрашиваете у официанта: «Принесите мне меню». Официант говорит «Вот ваше меню» (200 OK) и дает вам в руки папку с меню (Тело ответа / Body).
  • Статус 204 (No Content): Вы говорите официанту: «Уберите со стола грязную салфетку». Официант убирает её и просто кивает («Сделано!»204 No Content). Ему не нужно ничего вам вручать в ответ.

2. Где возник конфликт в вашем коде?

Вот что происходит, когда вы пишете одновременно status_code=204 и response_model=ReviewOut:

Python

@router.get('/{review_id}', response_model=ReviewOut, status_code=status.HTTP_204_NO_CONTENT)

Вы создали противоречие:

  1. response_model=ReviewOut говорит FastAPI:
    «Я хочу, чтобы этот эндпоинт возвращал JSON-объект (отзыв), и он должен соответствовать схеме ReviewOut».
  2. status_code=status.HTTP_204_NO_CONTENT говорит FastAPI и браузеру:
    «Этот эндпоинт НИКОГДА не возвращает никакие данные в теле ответа».

FastAPI видит статус 204 и просто вырезает всё тело ответа. Поэтому, если бы вы написали return one_review, FastAPI все равно принудительно отправил бы клиенту пустой ответ, проигнорировав ваш one_review.

3. Когда реально используется статус 204?

Статус 204 используется только тогда, когда клиенту не нужно возвращать объект.

Типичные примеры:

  • Удаление (DELETE): Клиент отправляет DELETE /reviews/5. Сервер удаляет отзыв из базы. Возвращать сам отзыв уже не нужно — его больше нет. Сервер отвечает 204 No Content.
  • Обновление настройки (PATCH / PUT): Вы нажали кнопку «Включить темную тему». Сервер сохранил параметр в базе. Ему не нужно слать вам обратно кучу данных, он просто отвечает 204 No Content («Запрос принят, в б

Оценка брокера сформирована по единой методологии — регуляция, ликвидность, скорость вывода средств и отзывы пользователей. Подробнее — в Редакционной политике и Методологии оценки.

Часто задаваемые вопросы (FAQ)

При первой задержке или отказе в выводе прекратите любые дополнительные платежи и зафиксируйте текущий статус. Первоочередной шаг — правовая фиксация фактов: сохраните банковские выписки, историю заявок в личном кабинете и переписку с поддержкой. Далее проводится аналитический аудит условий соглашения (T&C), чтобы определить, имеет ли место техническая задержка или намеренное нарушение регламента со стороны платформы.
Оставив заявку, вы получаете понятную дорожную карту и независимую оценку ситуации:
  • Экспертное резюме: в каких именно пунктах брокер отступил от собственных правил (T&C) или регламента регулятора.
  • Пошаговый план: куда и в каком формате направить досудебную претензию для официального урегулирования.
  • Инструкция по фиксации: какие выписки, чеки и скриншоты нужно сохранить прямо сейчас, пока не закрыт доступ к кабинету.
Проект не занимается прямым возвратом средств и не оказывает платное юридическое сопровождение. Ни одна независимая структура не может дать 100% гарантию возврата, так как итоговое решение всегда принимают официальные инстанции (банк, регулятор, суд). Мы гарантируем бескомпромиссно детальный аудит ваших документов, точную фиксацию каждого процедурного нарушения брокера и формирование исчерпывающей доказательной базы,с которой ваши шансы на успешное урегулирование становятся максимально высокими.
Для первичного анализа ситуации и подготовки рекомендаций достаточно предоставить:
  • Регламент: Клиентский регламент / Пользовательское соглашение (T&C) брокера.
  • Скриншоты: личного кабинета (баланс, история заявок на вывод, отклоненные транзакции).
  • Выписки: чеки или банковские выписки, подтверждающие факт и даты переводов.
  • Переписку: диалоги со службой поддержки или менеджерами {broker}.
Анна Кислицкая —  compliance
Анна Кислицкая ·

Брокер не выводит депозит?

Бесплатная правовая консультация!

Отзывы (0)

Пока что нет отзывов. Будьте первым!

Оставить отзыв

Ответим в течение дня

Отправляя запрос, вы соглашаетесь с Политикой обработки персональных данных и Пользовательским соглашением. Аналитическая оценка процедурных отклонений проводится профильными специалистами проекта CheckAllBrokers (FIN CONSULTING LIMITED). Процедура носит информационно-аудиторский характер и не является оказанием платных юридических или финансовых услуг.

SSL-шифрование. Полная конфиденциальность.

Sergey Сергей Буров
Аналитик финансово-правовых рисков и спорных ситуаций

Здравствуйте! 👋 Я Сергей Буров. Есть вопросы по брокеру?

Сейчас