码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-16 18:35:43      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

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

 

MODELS.PY

from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles

LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())


class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default=‘‘)
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES, default=python, max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default=friendly, max_length=100)

    class Meta:
        ordering = (created,)

 

URLS.PY

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views

urlpatterns = [
    url(r^snippets/$, views.snippet_list),
    url(rsnippets/(?P<pk>[0-9]+)/$, views.snippet_detail),
]

urlpatterns = format_suffix_patterns(urlpatterns)

 

VIEWS.PY

from django.http import HttpResponse
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer


class JSONResponse(HttpResponse):

    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs[content_type] = application/json
        super(JSONResponse, self).__init__(content, **kwargs)

@csrf_exempt
def snippet_list_old(request):
    if request.method == GET:
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return JSONResponse(serializer.data)
    elif request.method == POST:
        data = JSONParser().parse(request)
        serializer = SnippetSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data, status=201)
        return JSONResponse(serializer.errors, status=400)

@csrf_exempt
def snippet_detail_old(request, pk):
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == GET:
        serializer = SnippetSerializer(snippet)
        return JSONResponse(serializer.data)
    elif request.method == PUT:
        data = JSONParser().parse(request)
        serializer = SnippetSerializer(snippet, data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data)
        return JSONResponse(serializer.errors, status=400)
    elif request.method == DELETE:
        snippet.delete()
        return HttpResponse(status=204)


@api_view([GET, POST])
def snippet_list(request, format=None):
    if request.method == GET:
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)
    elif request.method == POST:
        serializer = SnippetSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view([GET, PUT, DELETE])
def snippet_detail(request, pk, format=None):
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == GET:
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)
    elif request.method == PUT:
        serializer = SnippetSerializer(snippet, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    elif request.method == DELETE:
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

 

SERIALIZER.PY

from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES


class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = (id, title, code, linenos, language, style)


class SnippetSerializerOld(serializers.Serializer):
    pk = serializers.IntegerField(read_only=True)
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    code = serializers.CharField(style={base_template: textarea.html})
    linenos = serializers.BooleanField(required=False)
    language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default=python)
    style = serializers.ChoiceField(choices=STYLE_CHOICES,default=friendly)

    def create(self, validated_data):
        return Snippet.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.title = validated_data.get(title, instance.title)
        instance.code = validated_data.get(code, instance.code)
        instance.linenos = validated_data.get(linenos, instance.linenos)
        instance.language = validated_data.get(language, instance.language)
        instance.style = validated_data.get(style, instance.style)
        instance.save()
        return instance

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/aguncn/p/5193239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!