【发布时间】:2018-10-09 22:26:22
【问题描述】:
我有一个简单的 DRF 列表视图,想写一些与 POST 请求有关的权限。这导致在发出GET 请求时出错。这让我意识到我的权限类在未提交的请求上被多次调用。这是我的文件。
permissons.py:
class IsDummy(permissions.BasePermission):
def has_permission(self, request, view):
print("\n{}\n".format(request.method))
if request.method in permissions.SAFE_METHODS:
return True
return False
views.py:
class UserListView(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsDummy]
仅当我在可浏览 api 上从浏览器提交请求时才会出现此问题。当我在列表 url 提交 GET 请求时,我会从IsDummy 权限类中的打印语句将以下内容打印到终端:
GET
POST
POST
OPTIONS
当我通过邮递员提交GET 或OPTIONS 请求时,我看到了我实际使用的单一、适当的请求方法。
似乎列出的第一个方法总是我使用的实际方法,我不知道额外的POSTs 和OPTION 是从哪里来的。更奇怪的是,尽管POST 请求显然应该导致IsDummy.has_permission 返回False,但页面将在所有这些之后正常加载。
chrome 开发工具仅显示提交了一个 GET 请求,因为它似乎只发生在可浏览的 api 中,我确信它与此有关,但我无法弄清楚我搞砸了什么为实现这一目标而努力。
【问题讨论】:
-
browser api是一个可以添加\更新\删除实例的signle页面,当你询问这个页面时,drf会检查所有需要的权限,看看相应的模块是否需要显示
标签: python django django-rest-framework