Django REST 框架 - 教程 - 困惑



我在教程中介绍了序列化程序(serializers.Serializer而不是serializers.ModelSerializer),我对一件事感到困惑。

首先,我们将数据序列化为 Python 原生数据类型:

>>> snippet = Snippet(code="print('hello' + ' world'n)")
>>> snippet.save()
>>> serializer = SnippetSerializer(snippet)
>>> serializer.data
{'style': 'friendly', 'code': "print('hello' + ' world'n)", 'language': 'python', 'title': '', 'pk': 2, 'linenos': False}

这里的问题是,我们没有在语言或样式字段中发送任何选择字段选项。

如果我们看一下serializer对象,那么它包括我们拥有的所有选择:

>>> serializer
SnippetSerializer(<Snippet: Snippet object>):
    pk = IntegerField(read_only=True)
    title = CharField(allow_blank=True, max_length=100, required=False)
    code = CharField(style={'base_template': 'textarea.html'})
    linenos = BooleanField(required=False)
    language = ChoiceField(choices=[('abap', 'ABAP'), ('abnf', 'ABNF'), ('ada', 'Ada'), ('adl', 'ADL'), ('agda', 'Agda'), ('ahk', 'autohotkey'), ('alloy', 'Alloy'), ('antlr', 'ANTLR'), ('antlr-as', 'ANTLR With ActionScript Target'), ('antlr-cpp', 'ANTLR With CPP Target'), ('antlr-csharp', 'ANTLR With C# Target'), ('antlr-java', 'ANTLR With Java Target'), ('antlr-objc', 'ANTLR With ObjectiveC Target'), ('antlr-perl', 'ANTLR With Perl Target'), ('antlr-python', 'ANTLR With Python Target'), ('antlr-ruby', 'ANTLR With Ruby Target'), ('apacheconf', 'ApacheConf'), ('apl', 'APL'), ('applescript', 'AppleScript'), ('arduino', 'Arduino'), ('as', 'ActionScript'), ('as3', 'ActionScript 3'), ('aspectj', 'AspectJ'), ('aspx-cs', 'aspx-cs'), ('aspx-vb', 'aspx-vb'), ('asy', 'Asymptote'), ('at', 'AmbientTalk'), ('autoit', 'AutoIt'), ('awk', 'Awk'), ('basemake', 'Base Makefile'), ('bash', 'Bash'), ('bat', 'Batchfile'), ('bbcode', 'BBCode'),....

所以我的问题是,为什么我们不发送serializer对象。为什么只发送不包含选择选项的serializer.data。客户端如何知道必须从哪些选项中进行选择?

我也可能对客户端在本教程中的位置感到困惑。有些东西还没有完全点击它如何为我工作。

选项方法

OPTIONS 方法允许客户端确定与资源关联的选项和/或要求或服务器的功能,而无需暗示资源操作或启动资源检索。 — RFC7231,第 4.3.7 节。

如果希望 JS 具有该资源的元信息,则可能需要实现 OPTIONS 方法,让 JS 处理返回的元数据,然后调整用于创建新实例的窗体。

如果你遵循上面链接的 Django REST 框架文档,你将能够自定义元数据中返回的内容以满足你的需求。

我不知道

,为什么django restframework如此混乱和复杂。我已经在其他框架中制作了几个 API,并且对它们有更好的控制。但是在这里,我必须阅读很多文档才能理解,但仍然不清楚。例如,参见 laravel Api 框架,它非常方便和安全,一切都被煮熟了,因此我们不必考虑太多设置、导入等,只需要专注于业务逻辑和 API 响应格式。

最新更新