设置认证的方案 与 限制对未登录用户的访问

1)使用全局配置

默认使用的是SessionAuthentication

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_AUTHENTICATION_CLASSES': (
  3. 'rest_framework.authentication.SessionAuthentication',
  4. 'rest_framework.authentication.BasicAuthentication',
  5. )
  6. }

2)使用装饰器

函数视图使用装饰器

  1. @api_view(['GET'])
  2. @authentication_classes((SessionAuthentication, BasicAuthentication))
  3. @permission_classes((IsAuthenticated,))
  4. def example_view(request, format=None):
  5. content = {
  6. 'user': unicode(request.user), # `django.contrib.auth.User` 实例。
  7. 'auth': unicode(request.auth), # None
  8. }
  9. return Response(content)

3)使用基于类的视图

  1. from rest_framework.authentication import SessionAuthentication, BasicAuthentication
  2. from rest_framework.permissions import IsAuthenticated
  3. from rest_framework.response import Response
  4. from rest_framework.views import APIView
  5. class ExampleView(APIView):
  6. authentication_classes = (SessionAuthentication, BasicAuthentication)
  7. permission_classes = (IsAuthenticated,)
  8. def get(self, request, format=None):
  9. content = {
  10. 'user': unicode(request.user), # `django.contrib.auth.User` 实例。
  11. 'auth': unicode(request.auth), # None
  12. }
  13. return Response(content)

未认证和禁止的响应

当未经身份验证的请求被拒绝时,有下面两种不同的错误代码可使用,与身份验证方案一一对应

HTTP 401 未认证(对应,BasicAuthentication
HTTP 403 无权限(默认使用,对应SessionAuthentication

image.png

Session认证

需要保证在请求中包含有效的CSRF Token

https://docs.djangoproject.com/zh-hans/4.0/ref/csrf/

相关文档

https://q1mi.github.io/Django-REST-framework-documentation/api-guide/authentication_zh/