Обычно нет. Я не на 100%, это дословно относится к Sql-Server, но в Postgres планировщик запросов оставляет за собой право изменять порядок внутренних соединений по своему усмотрению. Исключение составляют случаи, когда вы достигаете порога, за которым слишком сложно исследовать изменение их порядка.
В Python декоратор - это функция, которая принимает функцию в качестве аргумента и возвращает декорированную функцию. Синтаксис @login_required
можно преобразовать в:
def add_media(request):
...
add_media = login_required(add_media)
Поэтому, если вы примените декоратор вручную (как в первом фрагменте), он должен сгенерировать тот же эффект.
Подход в вашем первом фрагменте следующий. полезно, если вы хотите использовать как декорированные, так и недекорированные версии вашего представления.
Как отмечали другие, они действительно эквивалентны. Если вы хотите использовать этот подход, следует учесть еще два момента:
Выполнение этого в urls.py отделяет требование входа в систему от места в коде, где определяется декорируемая вещь. Из-за этого вы (или другие сопровождающие) можете забыть, что функция была оформлена.
Поскольку вы применяете безопасность в файле URL-адресов, кто-то может ошибочно добавить другой URL-адрес, указывающий на ту же функцию, но забудьте обернуть функцию в login_required, что приведет к дыре в безопасности.
Надеюсь, что это поможет.
Да, они такие же. Декораторы - это синтаксический сахар для обертывания функции в другую. Так что в любом случае вы оборачиваете login_required
вокруг views.add_media
.