Если POST-запросы по умолчанию защищены csrf. Какова цель использования @method_decorator(csrf_protect) в Django?

Я думаю, что все запросы POST, PUT, DELETE по умолчанию защищены CSRF в DRF. Но в некоторых обучающих видеороликах я видел, что они используют @method_decorator(csrf_protect) в некоторых представлениях на основе классов с запросами POST и DELETE, поэтому я сделал то же самое.

Но теперь я думаю, какова цель этого, если эти запросы по умолчанию защищены CSRF?

@method_decorator(csrf_protect, name='dispatch')
class LogoutView(APIView):
    def post(self, request, format=None):
        try:
            auth.logout(request)
            return Response({'success': 'Logged out.'})
        except Exception as e:
            print(e)
        return Response({'error': 'Something went wrong.'})

Они защищены промежуточным программным обеспечением.

willeM_ Van Onsem 06.05.2024 18:20

Что это значит?

Hero 06.05.2024 18:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, POST-запросы обычно защищены от подделки CSRF. Но это не сам Django, а CsrfViewMiddleware [Django-doc] . Таким образом, это промежуточное ПО должно находиться в настройке ПРОМЕЖУТОЧНОЕ ОБЕСПЕЧЕНИЕ [Django-doc] , и по умолчанию оно так и есть. Но вы можете удалить промежуточное программное обеспечение, например, если не хотите защищать его по умолчанию. В этом случае вы можете использовать декоратор @csrf_protect [Django-doc], чтобы сделать это только для определенного набора представлений.

Другими словами, вы можете добавить CsrfViewMiddleware к настройке MIDDLEWARE (и для нового проекта Django это так), и тогда все представления по умолчанию будут защищены CSRF, если вы не укажете это с помощью декоратора @csrf_exempt [Django -doc], или вы можете удалить промежуточное программное обеспечение и помечать только определенные представления, защищенные CSRF.

Отключение CSRF является обычным явлением для API, поскольку они обычно не работают с файлами cookie. Поэтому, если вы создаете приложение Django, которое, например, будет обслуживать приложение React или Vue, нередко удаляется значок CsrfViewMiddleware.

Другие вопросы по теме