【问题标题】:Which style of Django Rest Framework should I be using我应该使用哪种风格的 Django Rest Framework
【发布时间】:2017-06-02 14:11:30
【问题描述】:

(我用的是最新的django/python/DRF)

我的 API 端点是应用程序内部的。它们与我在系统中的模型不匹配。我见过两种使用 API 视图的技术。

第一个使用方法,就像我正在使用的那样:

@api_view(['GET', 'POST'])
@authentication_classes([JSONWebTokenAuthentication])
def myApiEndPoint(request):
    """
    This text is the description for this API.
    """

    if request.method == 'GET':
        return Response("ok get", status=status.HTTP_200_OK)
    elif request.method == 'POST':
        return Response("ok post", status=status.HTTP_200_OK)

第二个使用类定义,如 DRF 文档

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

第二种方式看起来更整洁有序。但是:

  1. 我可以将它用于非特定模型的验证吗?
  2. 如何在这种情况下定义每个类的权限和身份验证类?

谢谢

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:
    1. 是的
      • 根据Serializer(不是ModelSerializer)创建序列化程序,并将您的自定义字段验证放在那里
      • 不要使用ModelViewSet 作为基类,而是使用viewsets.GenericViewSetGET 创建一个名为list 的方法,为POST 创建一个名为create 的方法以获取更多信息检查视图集docs
    2. 很简单:

    只需在您的视图集中定义这些变量:(也可以查看 authenticationpermissions 的文档

    class UserViewSet(GenericViewSet):
        permission_classes = [AllowAny, ] # or any other permission class
        authentication_classes = [JSONWebTokenAuthentication, ] # or any other authentication class
    

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2015-03-15
      • 2020-07-04
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多