Django Rest Framework 删除 csrf

django

1个回答

写回答

Ellie56

2025-07-10 01:55

+ 关注

Django
Django

使用Django Rest Framework(DRF)开发Web应用程序时,默认情况下会启用CSRF保护,以防止跨站请求伪造攻击。然而,在某些情况下,我们可能需要禁用CSRF保护,特别是当我们构建基于API的无状态应用程序时。本文将介绍如何在DRF中删除CSRF保护,并提供相应的案例代码。

在DRF中禁用CSRF保护可以通过几个简单的步骤完成。首先,打开项目的设置文件(settings.py),找到MIDDLEWARE部分。在这里,您将看到'Django.middleware.csrf.CsrfViewMiddleware'这一行。这是负责处理CSRF保护的中间件。要禁用CSRF保护,只需将该行注释掉或删除掉。

Python

MIDDLEWARE = [

...

# 'Django.middleware.csrf.CsrfViewMiddleware',

...

]

完成此更改后,CSRF保护将被完全禁用,并且您的DRF应用程序将不再需要CSRF令牌来验证请求。

接下来,让我们看一个具体的案例。假设我们正在构建一个简单的任务管理应用程序,其中包含任务的增删改查功能。为了简化示例,我们只关注删除任务的功能。

首先,我们需要定义一个任务模型(models.py):

Python

from Django.db import models

class Task(models.Model):

title = models.CharField(max_length=100)

description = models.TextField()

completed = models.BooleanField(default=False)

def __str__(self):

return self.title

接下来,我们创建一个基于DRF的API视图(views.py)来处理任务的删除请求:

Python

from rest_framework import generics

from .models import Task

from .serializers import TaskSerializer

class TaskDeleteView(generics.DestroyAPIView):

queryset = Task.objects.all()

serializer_class = TaskSerializer

在这里,我们使用DRF的DestroyAPIView来处理删除请求。我们指定了任务模型的查询集和相应的序列化器。

最后,我们需要定义一个任务序列化器(serializers.py):

Python

from rest_framework import serializers

from .models import Task

class TaskSerializer(serializers.ModelSerializer):

class Meta:

model = Task

fields = '__all__'

现在,我们已经完成了删除任务的API视图和序列化器的设置。要测试删除功能,我们可以使用Postman或其他HTTP请求工具发送DELETE请求到/api/tasks//的URL,其中是要删除的任务的ID。由于我们已经禁用了CSRF保护,我们不需要提供CSRF令牌。

希望本文能够帮助您了解如何在DRF中删除CSRF保护,并提供了一个简单的案例来演示删除功能的实现。请记住,在实际的生产环境中,禁用CSRF保护可能会增加安全风险,因此请谨慎使用。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号