django-rest-framework - 在可浏览的 API 中自动生成表单?

问题描述 投票:0回答:4

不确定我是否使用了正确的词汇。在 django-rest-framework 免费提供的可浏览 api 中,我想知道是否有一种方法可以自动生成类似于我们定义 ModelForms 的表单。在某些情况下,这将使我们能够更轻松地测试 API 的输入。 我目前正在使用 ModelSerializers 和通用视图 APIView,以防产生影响。

我已阅读文档(此时已阅读多次),但没有看到任何地方提到它。

screenshot

forms django-models python-2.7 django-rest-framework
4个回答
19
投票

如果您使用通用的基于类的视图,您将免费获得它。尝试以用户之一身份登录 http://restframework.herokuapp.com 上的实时教程,以便您可以创建一些片段。例如用户:'max',密码:'max'。

任何子类化

GenericAPIView
并设置
serializer_class
的视图都会获得该行为,因为 REST 框架可以确定表单的外观。

例如:

screenshot of form input

(注意屏幕截图底部的表单输入)

如果您只是从

APIView
工作,您将获得通用内容输入(例如 json),就像您包含屏幕截图一样,这也很有用,但不如表单那么方便。


6
投票

创建一个适合您想要的表单输入字段的序列化器类,并将其设置在 APIView 上,如下所示;

class MyView(APIView):
    serializer_class = MySerializer  # Used for the form in the browsable api

效果非常完美。

基于模型的序列化器类示例:

from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel

0
投票
class MyApiView(APIView):
    """My Demo API View"""
    serializer_class = serializers.MySerializers

确保您使用名称“serializer_class”,而不是任何其他名称,例如serializers_class。

使用确切的“serializer_class”将在可浏览的 API 中自动生成表单


0
投票
  1. 确保你的
    FormParser
    中有
    REST_FRAMEWORK["DEFAULT_PARSER_CLASSES"]
    (如果你没有声明这个参数,则不需要)
REST_FRAMEWORK = {
    # ...
    "DEFAULT_PARSER_CLASSES": [
        # ...
        "rest_framework.parsers.FormParser",
        # ...
    ]
    # ...
}
  1. 在 ViewSet 中声明
    serializer_class
    属性或定义
    get_serializer_class
    方法。
class SomeInsaneViewSet(GenericViewSet, CreateModelMixin):
    # ...
    serializer_class = SomeModelSerializer
    # ...
class SomeInsaneViewSet(GenericViewSet, CreateModelMixin):
    # ...
    def get_serializer_class(self):
        match self.action:
            case "create": return SomeModelSerializer
        return None
    # ...
© www.soinside.com 2019 - 2024. All rights reserved.