是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?

Posted

技术标签:

【中文标题】是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?【英文标题】:Is it possible to trace back 403 error during ajax request in Django Rest Framework? 【发布时间】:2018-04-03 11:01:05 【问题描述】:

我正在尝试使用 DRF 进行 ajax 调用,并且每次都收到:

[20/Oct/2017 13:35:24] "OPTIONS /test/ HTTP/1.1" 403 82

我无法理解这个错误的原因(我通过装饰器和中间件禁用了 csrf)。是否可以在 Django 中引发异常而不是 403 响应以找出哪个中间件和哪个代码行返回 403 错误?

【问题讨论】:

为什么是HTTP方法OPTIONS?你在做跨域AJAX吗? 对不起,我不知道 HTTP 方法 OPTIONS。你能给我一个文档链接吗?我出于调试目的进行跨域请求(同时在前端和后端编写代码)。我用我的 DRF 后端午餐,然后在 IDE(NetBeans)中用我的前端午餐,然后查看结果。 可以分享一下吗? 推测错误可能是由于Auth设置不正确造成的。您应该检查设置、视图、authentication.pypermissions.py 是否存在 【参考方案1】:

403 被禁止。这可能是由于您使用的权限类而发生的。如果您使用基于函数的视图(FBV)添加装饰器并将权限设置为AllowAny,如果其基于类的视图(CBV)使用权限类到 AllowAny 。比如

FBV

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response

# ...

@api_view(['GET'])
@permission_classes((AllowAny,))
def test_view(request, format=None):
    # ...
    # you code  
    # ...
    return Response(content)

CBV

from rest_framework.views import APIView
from rest_framework.permissions import AllowAny
from rest_framework.response import Response

# ...

class TestView(APIView):

    permission_classes = (AllowAny,)

    def get(self, request, format=None):
        # ...
        # you code  
        # ...
    return Response(content)

【讨论】:

以上是关于是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?的主要内容,如果未能解决你的问题,请参考以下文章

从 Django django-rest-framework 视图有条件地返回 JSON 或 HTML 响应

是否可以在 django rest 框架序列化程序中使用重用 django 表单进行验证?

是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?

django-rest-framework - 在可浏览的 API 中自动生成表单?

在 django-rest-framework 中,是不是可以同时使用 oauth 和 session 身份验证?

rest framework之解析器