декоратор login_required в django

Обычно нет. Я не на 100%, это дословно относится к Sql-Server, но в Postgres планировщик запросов оставляет за собой право изменять порядок внутренних соединений по своему усмотрению. Исключение составляют случаи, когда вы достигаете порога, за которым слишком сложно исследовать изменение их порядка.

17
задан Konstantin 20 May 2009 в 18:58
поделиться

3 ответа

В Python декоратор - это функция, которая принимает функцию в качестве аргумента и возвращает декорированную функцию. Синтаксис @login_required можно преобразовать в:

def add_media(request):
  ...
add_media = login_required(add_media)

Поэтому, если вы примените декоратор вручную (как в первом фрагменте), он должен сгенерировать тот же эффект.

Подход в вашем первом фрагменте следующий. полезно, если вы хотите использовать как декорированные, так и недекорированные версии вашего представления.

31
ответ дан 30 November 2019 в 11:13
поделиться

Как отмечали другие, они действительно эквивалентны. Если вы хотите использовать этот подход, следует учесть еще два момента:

  1. Выполнение этого в urls.py отделяет требование входа в систему от места в коде, где определяется декорируемая вещь. Из-за этого вы (или другие сопровождающие) можете забыть, что функция была оформлена.

  2. Поскольку вы применяете безопасность в файле URL-адресов, кто-то может ошибочно добавить другой URL-адрес, указывающий на ту же функцию, но забудьте обернуть функцию в login_required, что приведет к дыре в безопасности.

Надеюсь, что это поможет.

9
ответ дан 30 November 2019 в 11:13
поделиться

Да, они такие же. Декораторы - это синтаксический сахар для обертывания функции в другую. Так что в любом случае вы оборачиваете login_required вокруг views.add_media .

3
ответ дан 30 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: