Django Rest Framework 如何禁用身份验证和授权

Gas*_*sim 7 python django django-rest-framework

我试图建立一个系统Django,而无需使用任何电池- auth,admin等系统使用Django的API REST框架。

但是,当我尝试请求 API 时,我不断收到此错误:

Model class django.contrib.auth.models.Permission doesn't declare an explicit
app_label and isn't in an application in INSTALLED_APPS.
Run Code Online (Sandbox Code Playgroud)

我根本不想使用django.contrib.auth。我在 DRF API View 类中执行了以下操作:

class NewsPostView(APIView):
    permission_classes = None

    def get(self, request, format=None):
        posts = NewsPost.objects.all()
        serializer = NewsPostSerializer(posts, many=True)
        return Response([])
Run Code Online (Sandbox Code Playgroud)

但是,我仍然遇到相同的错误。如何从 DRF 禁用身份验证?

Gas*_*sim 9

我已经解决了我的问题。在@Linovia 的回复之后,我检查了 DRF 的文档等并更改了以下属性:

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': [],
    'DEFAULT_PERMISSION_CLASSES': [],
    'UNAUTHENTICATED_USER': None,
}
Run Code Online (Sandbox Code Playgroud)

一切都奏效了。

  • 这应该是公认的答案。另外,您可以明确表明此配置位于 REST_FRAMEWORK 设置内。具体来说,REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES':[],'DEFAULT_PERMISSION_CLASSES':[],'UNAUTHENTICATED_USER':无,} (2认同)

Ane*_*R S 6

使用AllowAny而不是None. 而且您的回复似乎返回空列表。用于serializer.data检索数据

from rest_framework.permissions import AllowAny

class NewsPostView(APIView):
    permission_classes = (AllowAny,)

    def get(self, request, format=None):
        posts = NewsPost.objects.all()
        serializer = NewsPostSerializer(posts, many=True)
        return Response(data=serializer.data)
Run Code Online (Sandbox Code Playgroud)