我正在使用django-rest-framework。我遇到的问题是POST和GET方法的url是相同的,但是我想拥有不同的权限,具体取决于调用的方法。现在我使用基于类的视图,我无法弄清楚如何根据方法设置不同的权限。我想要的是,如果用户是POST和GET的管理员,如果用户经过身份验证而不是他们只能获取,并且如果用户未经过身份验证,他们就无法做任何事情。
class CategoryList(generics.ListCreateAPIView):
queryset = QuestionCategory.objects.all()
serializer_class = QuestionCategorySerializer
permission_classes = (permissions.IsAuthenticated,)
答案 0 :(得分:3)
只是更新。
您可以覆盖' get_permissions'而不是' get_queryset'。
例如:
const records = [
{
value: 24,
gender: "BOYS"
},
{
value: 42,
gender: "BOYS"
},
{
value: 85,
gender: "GIRLS"
},
{
value: 12,
gender: "GIRLS"
},
{
value: 10,
gender: "BOYS"
}
]
function someFunction() {
return records.reduce(function(sum, record){
if(record.gender == 'BOYS') return sum + record.value;
else return sum;
}, 0);
}
console.log(someFunction())
请注意' get_permission'返回权限实例列表,而不是类。
答案 1 :(得分:2)
您可以在函数中编写它来覆盖默认函数来实现这一点。
使用self.request
执行此操作
class CategoryList(generics.ListCreateAPIView):
serializer_class = QuestionCategorySerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
# this function used to get queryset
# override this to judge request method
if self.request.method == 'POST':
self.permission_classes = (permissions.IsAdminUser,)
return QuestionCategory.objects.all()
中编写post
或generic view
方法
答案 2 :(得分:1)
我知道派对迟到了 - 但我最近不得不弄清楚同样的事情,并且在文档或互联网上找不到任何帮助。这就是我最终想出来的 - 希望它可以帮助其他可能遇到同样问题的人:
from request_admin.models import Rep
from request_admin.serializers import RepSerializer
from rest_framework import generics
from rest_framework import permissions
from rest_framework import mixins
from django.core.exceptions import PermissionDenied
class RepList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
paginate_by = 10
queryset = Rep.objects.all()
serializer_class = RepSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() == False:
raise PermissionDenied
return self.create(request, *args, **kwargs)
的django doc
的django doc
这是mixins
的django doc