优化前和优化后的代码,融在一起,能看看进化的过程。

MODELS.PY

  1. from django.db import models
  2. from pygments.lexers import get_all_lexers
  3. from pygments.styles import get_all_styles
  4.  
  5. LEXERS = [item for item in get_all_lexers() if item[1]]
  6. LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
  7. STYLE_CHOICES = sorted((item, item) for item in get_all_styles())
  8.  
  9. class Snippet(models.Model):
  10. created = models.DateTimeField(auto_now_add=True)
  11. title = models.CharField(max_length=100, blank=True, default='')
  12. code = models.TextField()
  13. linenos = models.BooleanField(default=False)
  14. language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
  15. style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
  16.  
  17. class Meta:
  18. ordering = ('created',)

URLS.PY

  1. from django.conf.urls import url
  2. from rest_framework.urlpatterns import format_suffix_patterns
  3. from snippets import views
  4.  
  5. urlpatterns = [
  6. url(r'^snippets/$', views.snippet_list),
  7. url(r'snippets/(?P<pk>[0-9]+)/$', views.snippet_detail),
  8. ]
  9.  
  10. urlpatterns = format_suffix_patterns(urlpatterns)

VIEWS.PY

  1. from django.http import HttpResponse
  2. from rest_framework import status
  3. from rest_framework.decorators import api_view
  4. from rest_framework.response import Response
  5. from django.views.decorators.csrf import csrf_exempt
  6. from rest_framework.renderers import JSONRenderer
  7. from rest_framework.parsers import JSONParser
  8. from snippets.models import Snippet
  9. from snippets.serializers import SnippetSerializer
  10.  
  11. class JSONResponse(HttpResponse):
  12.  
  13. def __init__(self, data, **kwargs):
  14. content = JSONRenderer().render(data)
  15. kwargs['content_type'] = 'application/json'
  16. super(JSONResponse, self).__init__(content, **kwargs)
  17.  
  18. @csrf_exempt
  19. def snippet_list_old(request):
  20. if request.method == 'GET':
  21. snippets = Snippet.objects.all()
  22. serializer = SnippetSerializer(snippets, many=True)
  23. return JSONResponse(serializer.data)
  24. elif request.method == 'POST':
  25. data = JSONParser().parse(request)
  26. serializer = SnippetSerializer(data=data)
  27. if serializer.is_valid():
  28. serializer.save()
  29. return JSONResponse(serializer.data, status=201)
  30. return JSONResponse(serializer.errors, status=400)
  31.  
  32. @csrf_exempt
  33. def snippet_detail_old(request, pk):
  34. try:
  35. snippet = Snippet.objects.get(pk=pk)
  36. except Snippet.DoesNotExist:
  37. return HttpResponse(status=404)
  38.  
  39. if request.method == 'GET':
  40. serializer = SnippetSerializer(snippet)
  41. return JSONResponse(serializer.data)
  42. elif request.method == 'PUT':
  43. data = JSONParser().parse(request)
  44. serializer = SnippetSerializer(snippet, data=data)
  45. if serializer.is_valid():
  46. serializer.save()
  47. return JSONResponse(serializer.data)
  48. return JSONResponse(serializer.errors, status=400)
  49. elif request.method == 'DELETE':
  50. snippet.delete()
  51. return HttpResponse(status=204)
  52.  
  53. @api_view(['GET', 'POST'])
  54. def snippet_list(request, format=None):
  55. if request.method == 'GET':
  56. snippets = Snippet.objects.all()
  57. serializer = SnippetSerializer(snippets, many=True)
  58. return Response(serializer.data)
  59. elif request.method == 'POST':
  60. serializer = SnippetSerializer(data=request.data)
  61. if serializer.is_valid():
  62. serializer.save()
  63. return Response(serializer.data, status=status.HTTP_201_CREATED)
  64. return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  65.  
  66. @api_view(['GET', 'PUT', 'DELETE'])
  67. def snippet_detail(request, pk, format=None):
  68. try:
  69. snippet = Snippet.objects.get(pk=pk)
  70. except Snippet.DoesNotExist:
  71. return Response(status=status.HTTP_404_NOT_FOUND)
  72.  
  73. if request.method == 'GET':
  74. serializer = SnippetSerializer(snippet)
  75. return Response(serializer.data)
  76. elif request.method == 'PUT':
  77. serializer = SnippetSerializer(snippet, data=request.data)
  78. if serializer.is_valid():
  79. serializer.save()
  80. return Response(serializer.data)
  81. return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  82. elif request.method == 'DELETE':
  83. snippet.delete()
  84. return Response(status=status.HTTP_204_NO_CONTENT)

SERIALIZER.PY

  1. from rest_framework import serializers
  2. from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
  3.  
  4. class SnippetSerializer(serializers.ModelSerializer):
  5. class Meta:
  6. model = Snippet
  7. fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
  8.  
  9. class SnippetSerializerOld(serializers.Serializer):
  10. pk = serializers.IntegerField(read_only=True)
  11. title = serializers.CharField(required=False, allow_blank=True, max_length=100)
  12. code = serializers.CharField(style={'base_template': 'textarea.html'})
  13. linenos = serializers.BooleanField(required=False)
  14. language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
  15. style = serializers.ChoiceField(choices=STYLE_CHOICES,default='friendly')
  16.  
  17. def create(self, validated_data):
  18. return Snippet.objects.create(**validated_data)
  19.  
  20. def update(self, instance, validated_data):
  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

REST_FRAMEWORK加深记忆-第二次练习官方文档2的更多相关文章

  1. REST_FRAMEWORK加深记忆-第二次练习官方文档

    我想,其它几个基于PYTHON的REST API模块概念都差不多吧. 先深入搞定这个吧. 前几次练习完了有一些印象,并且在工作中实践过一个,现在多弄几次,玩熟悉点. Serializers.py __ ...

  2. REST_FRAMEWORK加深记忆-极致抽象,极致完结

    余下的就是静心看官方文档了. 这个是最抽象的了. urls.py """tutorial URL Configuration The `urlpatterns` list ...

  3. Mysql优化(出自官方文档) - 第二篇

    Mysql优化(出自官方文档) - 第二篇 目录 Mysql优化(出自官方文档) - 第二篇 1 关于Nested Loop Join的相关知识 1.1 相关概念和算法 1.2 一些优化 1 关于Ne ...

  4. 【AutoMapper官方文档】DTO与Domin Model相互转换(中)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  5. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  6. Hui之Hui.js 官方文档

    基础 // 判断值是否是指定数据类型 var result = hui.isTargetType("百签软件", "string"); //=>true ...

  7. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

  8. TestNG官方文档中文版(2)-annotation

    TestNG的官方文档的中文翻译版第二章,原文请见 http://testng.org/doc/documentation-main.html 2 - Annotation 这里是TestNG中用到的 ...

  9. Spring 4 官方文档学习(十二)View技术

    关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...

随机推荐

  1. 从源码看java中Integer的缓存问题

    在开始详细的说明问题之前,我们先看一段代码 public static void compare1(){ Integer i1 = 127, i2 = 127, i3 = 128, i4 = 128; ...

  2. Linux命令行提示符设置

    我们使用Linux系统时接触最多的是它的命令行窗口,很多时候我们都需要在命令行上输入命令,在输入的命令前都会有提示符,一般系统默认的提示符形式是:[username@host 工作目录]$. 其实,我 ...

  3. php 获取数组第一个值的方法分享

    以下是对使用php实现获取数组第一个值的方法进行了详细的分析介绍,需要的朋友可以过来参考下 reset (PHP 3, PHP 4, PHP 5)reset -- 将数组的内部指针指向第一个单元 说明 ...

  4. localStorage变更事件当前页响应新解

    html5的localStorage相信大家都是很熟悉了,但是在chrome等支持该对象的浏览器中(ie10除外),如果你监听 storage变更事件你就会发现,当数据发生变化时本页是监听不到stor ...

  5. .NET SDK和下载

    http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx .NET SDK和下载 您可以通过下载.NET框架针对包和软件开发工具包,并使用它们与Visual ...

  6. WPF中的瀑布流布局(TilePanel)控件

    最近在用wpf做一个metro风格的程序,需要用到win8风格的布局容器,只能自己写一个了.效果如下 用法 : <local:TilePanel                          ...

  7. EWOULDBLOCK = EAGAIN

    #define EAGAIN 11 /* Try again */ #define EINTR 4 /* Interrupted system call */ #define EWOULDBLOCK ...

  8. JDBC ----常用数据库的驱动程序及JDBC URL:

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar  驱动类的名字:oracle.jdbc.driver.OracleDriver  JDBC URL ...

  9. Entity Framework(一) 映射

    ADO.NET Entity Framework通过Modeel First和DataBase First,提供了几个把数据库表映射到对象上的曾.通过Database First,可以从一个数据库架构 ...

  10. 什么是Hadoop,怎样学习Hadoop

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上:而且它 ...