- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Django 和 Django-Rest-Framework 为一个与学校相关的小型项目编写 API。我正在尝试找出权限。
我正在为我的 View 使用 APIView,并希望在不编写更多 View 的情况下为每个处理程序方法设置不同的权限。
这是我拥有的博客模块的 View 之一:
(此 View 用于/posts/
)
from .serializers import *
from django.db.models import Case, When
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import permission_classes
from rest_framework import status, permissions
# Create your views here.
class PostList(APIView):
"""
API Endpoint to List Posts
METHODS: GET, POST
"""
@permission_classes([permissions.AllowAny,])
def get(self, request, format=None):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@permission_classes([permissions.IsAuthenticated])
def post(self, request, format=None):
serializer = PostCreationSerializer(data=request.data)
if serializer.is_valid():
obj = serializer.save()
data = serializer.data
data["id"] = obj.id
return Response(data, status=status.HTTP_201_CREATED)
return Response(status=status.HTTP_400_BAD_REQUEST)
当前的默认设置是 permissions.IsAuthenticated
,但更改它不一定有帮助,因为我仍然需要单独更改一些权限。
所以我应该能够在未对 /posts/
进行身份验证的情况下发出 GET 请求并获取所有帖子的列表,而我应该从对 /的 POST 请求中获得 401帖子/
。但是,即使是 GET 请求也会返回 401 状态代码。
正确的方法是什么...如果有的话。
编辑:虽然我提供了我自己问题的答案,但我仍然想知道是否有更正确的方法来解决这个问题。
最佳答案
我想出了一个解决方案,但我不确定这是最好的方法。
首先,我们创建一个APIView的子类:
from rest_framework.views import APIView
class CustomAPIView(APIView):
def get_permissions(self):
# Instances and returns the dict of permissions that the view requires.
return {key: [permission() for permission in permissions] for key, permissions in self.permission_classes.items()}
def check_permissions(self, request):
# Gets the request method and the permissions dict, and checks the permissions defined in the key matching
# the method.
method = request.method.lower()
for permission in self.get_permissions()[method]:
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
然后我们使用这个 CustomAPIView
写出 View ,并为 permission_classes
使用字典,其中键是方法。
例子:
# Create your views here.
class PostList(CustomAPIView):
"""
API Endpoint to List Posts
METHODS: GET, POST
"""
permission_classes = {"get": [permissions.AllowAny], "post": [permissions.IsAuthenticated]}
def get(self, request, format=None):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request, format=None):
serializer = PostCreationSerializer(data=request.data)
if serializer.is_valid():
obj = serializer.save()
data = serializer.data
data["id"] = obj.id
return Response(data, status=status.HTTP_201_CREATED)
return Response(status=status.HTTP_400_BAD_REQUEST)
关于python - 如何使用 APIView 设置每个处理函数的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907644/
内容概要 ApiView+JsonResponse编写接口 ApiView+Response编写接口 ApiView源码解析 Request对象源码分析
我正在使用 Django Rest Framework 并使用 APIView 和序列化器形式添加新数据。我想在表单中添加一些帮助文本作为工具提示。由于表单是自动生成的,我需要一些帮助来了解如何将其添
我制作了一个 API 并想制作 swagger 文档。我不为此开发任何序列化。 Views.py class DeliveryView(APIView): renderer_classes =
我正在使用 Django 和 Django-Rest-Framework 为一个与学校相关的小型项目编写 API。我正在尝试找出权限。 我正在为我的 View 使用 APIView,并希望在不编写更多
我正在使用 Django 和 Django-Rest-Framework 为一个与学校相关的小型项目编写 API。我正在尝试找出权限。 我正在为我的 View 使用 APIView,并希望在不编写更多
我试图了解 vb.net 中的一些 WinAPI,但找不到用于 vb6 的 API 查看器工具。 VS2015 有没有更简单的东西? 是否有类似的方法将 WinAPI 代码从工具导入到 vb.net
我正在使用 APIView用于获取和发布项目。 我想使用 Django Rest Framework 为我的 API 实现分页,但它不起作用。 我想每页显示 10 个项目,但是当我这样做时 api/v
我需要更新 code字段与 patch APIView 中的方法. 到目前为止我有这个: class UserDetailView(APIView): def patch(self, requ
我正在尝试使用 Django Rest Framework 制作 APIView。当我将 View 与 url 相关联时,出现此错误: AssertionError: basename argumen
有什么区别APIView 类(class)和 View 集类(class) ? 我正在关注 Django REST-framework官方文档。我认为它缺乏示例。 你能用一个合适的例子来解释上面的区别
我是 Django 新手,我对 Django apiview 的自定义方法有点困惑。在ApiView中,如何创建自定义方法以及如何从axios调用。 例如 这是我的观点 class TimeSheet
我正在尝试将 Swagger 集成到我的 Django Rest Framework API 中。我安装了相关的软件包并按照 Github 页面的快速入门指南进行操作。不过我遇到了一些问题。 Swag
我有一个 APIView 类,用于显示所有租金以及发布和删除等。现在我想要搜索功能,所以我尝试使用 DjangoFilterBackend,但它不起作用。我在文档中看到,它已与 ListAPIView
我有一个权限类来检查 obj.account 是否等于 request.user.profile.account: class IsOwner(permissions.BasePermission):
有什么优势 View 集 , 模型 View 集 和 APIView . django-rest-framework 文档中没有说清楚,也没有说什么时候使用ViewSet、ModelViewSet和A
我正在尝试将 json 数据发布到我的 Django Rest Framework APIView。当我使用 DRF api 发布表单时一切正常,但是当我尝试使用外部应用程序(在我的例子中是 Angu
假设我想在 APIView.get 中返回一个包含 2 个属性的(非模型)对象,其中一个是模型对象,另一个是二进制图像 我尝试了几种方法,但在序列化程序方面遇到了问题。 谢谢! 序列化器: class
在 Django Rest Framework 中,是否可以在 APIView 类中调用自定义方法,类似于 .get() 或 .post() 将被调用。 我知道路由器可以使用 @action() 或
我有一个非常简单的APIView,但我不知道如何在这里设置分页。在这种情况下,我选择一个具有给定 pk 的 Event,然后我获得分配给此 Event 的所有 NewsItems。 paginatio
从下面看。我试图强制交易回滚。但是没有工作。数据仍然插入到数据库中。谁能给我正确的方法? class DocumentDetailView(APIView): def post(sel
我是一名优秀的程序员,十分优秀!