是否可以在 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.py
和 permissions.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 中自动生成表单?