views.py

  1. # get所需的
  2. from snippets.serializers import SnippetSerializer
  3. from rest_framework.views import APIView
  4. from rest_framework.response import Response # 是drf的response
  5. # post所需的
  6. from snippets.models import Snippet
  7. from django.http import Http404
  8. from rest_framework import status
  9. class SnippetList(APIView):
  10. """
  11. 这是SnippetList接口的一些描述信息
  12. List all snippets, or create a new snippet.
  13. """
  14. def get(self, request, format=None):
  15. """获取"""
  16. snippets = Snippet.objects.all()
  17. snippets_serializer = SnippetSerializer(snippets, many=True)
  18. return Response(snippets_serializer.data)
  19. def post(self, request, format=None):
  20. serializer = SnippetSerializer(data=request.data) # drf的request,可以直接取出用户过来的body数据 / post数据
  21. if serializer.is_valid():
  22. serializer.save()
  23. return Response(serializer.data, status=status.HTTP_201_CREATED)
  24. return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.py

  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. from rest_framework import serializers
  4. from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
  5. class SnippetSerializer(serializers.Serializer):
  6. id = serializers.IntegerField(read_only=True) # read_only先不管
  7. title = serializers.CharField(required=False, allow_blank=True, max_length=100)
  8. code = serializers.CharField(style={'base_template': 'textarea.html'})
  9. linenos = serializers.BooleanField(required=False)
  10. language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
  11. style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')
  12. def create(self, validated_data):
  13. """
  14. Create and return a new `Snippet` instance, given the validated data.
  15. """
  16. return Snippet.objects.create(**validated_data) # 将前端传递的数据,直接
  17. def update(self, instance, validated_data):
  18. """
  19. Update and return an existing `Snippet` instance, given the validated data.
  20. """
  21. instance.title = validated_data.get('title', instance.title)
  22. instance.code = validated_data.get('code', instance.code)
  23. instance.linenos = validated_data.get('linenos', instance.linenos)
  24. instance.language = validated_data.get('language', instance.language)
  25. instance.style = validated_data.get('style', instance.style)
  26. instance.save()
  27. return instance

snippets/urls.py

  1. from django.urls import path, include
  2. from django.conf.urls import url
  3. from snippets import views
  4. app_name = 'snippets'
  5. urlpatterns = [
  6. # path('', views.index, name="index"),
  7. path('snippets', views.SnippetList.as_view(), name="snippets"),
  8. ]

urls.py

  1. from django.contrib import admin
  2. from django.urls import path,include
  3. from django.conf.urls import url
  4. urlpatterns = [
  5. path('app01/', include("app01.urls")),
  6. path('app02/', include("app02.urls")),
  7. path('app03/', include("app03.urls")),
  8. path('app04/', include("app04.urls")),
  9. path('app05/', include("app05.urls")),
  10. path('app06/', include("app06.urls")),
  11. path('app07/', include("app07.urls")),
  12. path('app08/', include("app08.urls")),
  13. path('snippets/', include("snippets.urls")),
  14. path('admin/', admin.site.urls),
  15. url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
  16. ]

添加数据

  1. [
  2. {
  3. "id": 1,
  4. "title": "",
  5. "code": "foo = \"bar\"\n",
  6. "linenos": false,
  7. "language": "python",
  8. "style": "friendly"
  9. },
  10. {
  11. "id": 2,
  12. "title": "",
  13. "code": "print \"hello, world\"\n",
  14. "linenos": false,
  15. "language": "python",
  16. "style": "friendly"
  17. }
  18. ]

http://www.django-rest-framework.org/tutorial/1-serialization/#using-modelserializers

  1. # 使用ModelSerializer,类似modelform, http://www.django-rest-framework.org/tutorial/1-serialization/#using-modelserializers
  2. class SnippetSerializer(serializers.ModelSerializer):
  3. class Meta:
  4. model = Snippet
  5. # fields ="__all__"
  6. fields = ('id', 'title', 'code', 'linenos', 'language', 'style')

嵌套


优化listview: http://www.django-rest-framework.org/tutorial/3-class-based-views/

  1. ListAPIView get
  2. RetrieveAPIView get
  3. DestroyAPIView delete
  4. UpdateAPIView update
  5. ListCreateAPIView get/post
  6. RetrieveUpdateAPIView get/put/patch
  7. RetrieveDestroyAPIView get/delete
  8. RetrieveUpdateDestroyAPIView get/put/patch/delete

分页


  1. REST_FRAMEWORK = {
  2. 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
  3. 'PAGE_SIZE': 1
  4. }

使用api

django的serializers的更多相关文章

  1. django序列化 serializers

    Django的序列化工具让你可以将Django的模型‘翻译’成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 一.序列化数据 Django为我们提供了一个强大 ...

  2. django restframework Serializers

    序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型,然后可以将它们轻松地呈现为 JSON,XML 或其他内容类型.序列化器还提供反序列化,在首次验证传入数据之后,可以将 ...

  3. django rest_framework Serializers 序列化组件

    为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...

  4. Django的serializers使用

    Serializer 在这里通过一个验证用户身份的例子说明rest_framework中serializer.Serializer的使用. 编写serializer Serializer的使用不需要依 ...

  5. Django的Serializers的使用

    Serializer 在这里通过一个验证用户身份的例子说明rest_framework中serializer.Serialize的使用. 编写serializer Serializer的使用不需要依赖 ...

  6. 第六章:Django 综合篇 - 9:序列化 serializers

    Django的序列化工具让你可以将Django的模型'翻译'成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 一.序列化数据 Django为我们提供了一个强大 ...

  7. Django REST framework+Vue 打造生鲜超市(四)

    五.商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django res ...

  8. Django中Q搜索的简单应用

    本节涉及: 1.Q搜索在前后端的设计 2.Django中Queryset对象的序列化(由后端扔给前端的数据必然会经过序列化) 3.前端动态地构造表格以便显示(动态创建DOM对象) 思路: 用户通过前端 ...

  9. Django知识总结(三)

    拾伍 ● Ajax技术 一 ● Ajax定义 Ajax: 异步的 JavaScript 和 XML (Asynchronous+Javascript+XML) 通过Ajax, 我们可以在不重新加载整个 ...

随机推荐

  1. Windows内存放血篇,突破物理内存的CopyOnWrite

      本篇以x86(开启PAE) 以及x64 Win7系统 不借助微软API突破内存的写拷贝机制进行讲述 https://bbs.pediy.com/thread-222949.htm   0x01 B ...

  2. WP8.1学习系列(第二十五章)——控件样式

      XAML 框架提供许多自定义应用外观的方法.通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visua ...

  3. c++ 单步查看汇编代码【转】

    form here 用gdb 查看汇编代码, 采用disassemble 和 x 命令. nexti, stepi 可以单步指令执行 如下例: ---------------------------- ...

  4. linux 文件编码问题

    iconv -f UTF- -t gb18030 file_input -o file_output 上述命令不一定有用. 大概了解下文件编码,和vim里面的编码情况. 1 字符编码基础知识 字符编码 ...

  5. 【大数据系列】在windows下连接linux 下的hadoop环境进行开发

    一.下载Eclipse并安装 二.下载exlipse的hadoop plugin 三.打开Map Reduce视图 Window --> Perspective --> Open pers ...

  6. servlet相关 jar包位置 BAE上部署web应用

    1手动编译servlet工程: 要编译servlet,则类路径classpath中必须包括Servlet API 的相关类,如果使用的web容器是Tomcat,则这些类通常封装在在tomcat的lib ...

  7. path 与classpath针对JAVA来说

    Path 路径,是java编译时需要调用的程序(如java,javac等)所在的地方CLASSPATH 类的路径,在编译运行java程序时,如果有调用到其他类的时候,在classpath中寻找需要的类 ...

  8. LeetCode 13 Roman to Integer(罗马数字转为整数)

    题目链接 https://leetcode.com/problems/roman-to-integer/?tab=Description   int toNumber(char ch) { switc ...

  9. html中相关知识点的汇总

    1. Input的size与maxlength属性的区别 maxlength="500",表示input输入框中最多够输入500个字符.W3C标准指出maxlength规定文本字段 ...

  10. js json转字符串

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ &quo ...