获取 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的主要内容,如果未能解决你的问题,请参考以下文章