Django REST框架 - 教程 - 困惑

时间:2016-06-10 15:23:43

标签: python django serialization django-rest-framework

我正在查看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。客户端如何知道哪些选项可供选择?

我可能也会对客户端在本教程中的位置感到困惑。有些东西还没有完全点击,这对我有用。

2 个答案:

答案 0 :(得分:2)

OPTIONS方法

  

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

如果您希望JS在该资源上拥有meta information,您可能希望实现OPTIONS方法,让JS进程返回元数据,然后调整表单以创建新实例。 / p>

如果您按照上面链接的Django REST Framework文档进行操作,您就可以自定义元数据中返回的内容以满足您的需求。

答案 1 :(得分:0)

我不知道,为什么django restframework如此混乱和复杂。我在其他框架中制作了多个Apis,并更好地控制了它们。但是在这里我必须阅读很多文档以了解但仍然不清楚。例如,请参阅laravel Api框架,它非常方便并且可以确保所有内容都已完成,因此我们无需花太多时间进行设置,导入等,只需专注于业务逻辑和API响应格式。