我正在查看Tutorials中的序列化程序(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
。客户端如何知道哪些选项可供选择?
我可能也会对客户端在本教程中的位置感到困惑。有些东西还没有完全点击,这对我有用。
答案 0 :(得分:2)
OPTIONS方法允许客户端确定与资源关联的选项和/或要求,或服务器的功能,而不会暗示资源操作或启动资源检索。 - RFC7231,第4.3.7节。
如果您希望JS在该资源上拥有meta information,您可能希望实现OPTIONS方法,让JS进程返回元数据,然后调整表单以创建新实例。 / p>
如果您按照上面链接的Django REST Framework文档进行操作,您就可以自定义元数据中返回的内容以满足您的需求。
答案 1 :(得分:0)
我不知道,为什么django restframework如此混乱和复杂。我在其他框架中制作了多个Apis,并更好地控制了它们。但是在这里我必须阅读很多文档以了解但仍然不清楚。例如,请参阅laravel Api框架,它非常方便并且可以确保所有内容都已完成,因此我们无需花太多时间进行设置,导入等,只需专注于业务逻辑和API响应格式。