获取 403(禁止)React + Django

Posted

技术标签:

【中文标题】获取 403(禁止)React + Django【英文标题】:Getting 403 (Forbidden) React + Django 【发布时间】:2021-07-11 16:16:06 【问题描述】:

当我尝试删除或编辑任务(待办事项)时,我收到DELETE http://127.0.0.1:8000/api/tasks/4/ 403 (Forbidden)。但是,当我只想完成任务时,一切正常。也许是CORS中的问题。我在 INSTALLED_APPS 中有“corsheaders”,在 MIDDLEWARE 中有“corsheaders.middleware.CorsMiddleware”

序列化器.py

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = ('pk', 'title', 'created_at', 'is_done')

settings.py

CORS_ALLOW_METHODS = [
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
]

CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",
    "http://127.0.0.1:8000",
]

App.js

function removeTodo(id)
        axios.delete(`http://127.0.0.1:8000/api/tasks/$id`)
    

【问题讨论】:

【参考方案1】:

在views.py 中我没有创建@api_view(['DELETE']) 等。并将其添加到urls.py 视图.py

@api_view(['GET'])
def taskList(request):
    tasks = Task.objects.all().order_by('-id')
    serializer = TaskSerializer(tasks, many=True)
    return Response(serializer.data)

@api_view(['POST'])
def taskCreate(request):
    serializer = TaskSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()

    return Response(serializer.data)

@api_view(['DELETE'])
def taskDelete(request, pk):
    task = Task.objects.get(id=pk)
    task.delete()

    return Response('Item successfully delete!')

【讨论】:

【参考方案2】:

在你的 settings.py 中添加:

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        
    )

这是可行的,因为通过这些设置,我们可以使用 Django 的标准 django.contrib.auth 权限或允许未经身份验证的用户进行只读访问。

【讨论】:

以上是关于获取 403(禁止)React + Django的主要内容,如果未能解决你的问题,请参考以下文章

运行 apache 时出现禁止的 403 错误

Django - 403 禁止 CSRF 验证失败

django 403 禁止 - 重定向到登录

Django 403 禁止错误

Django/gunicorn/nginx: 403 禁止

django ajax 发布 403 被禁止