django-rest-framework学习之Requests and Responses--2017年4月13日

Requests and Responses ---- REST framework的核心
【1】Request objects
HttpRequest 核心功能是request.data获取请求的主体 (类似request.POST )
requests.data #适用各种数据,可以用于POST PUT和PATCH方法
【2】Response objects
return Response(data) #给与客户端请求的内容类型
【3】Status codes
REST framework 为每个状态码提供了明确清晰的标识符,例如HTTP_400_BAD_REQUEST
【4】Wrapping(封装) API views
APIView 类基础视图
@api_view()函数基础视图
【5】实施
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from myLesson.models import MyLesson
from myLesson.serializers import MyLessonSerializer
 
@api_view(['GET','POST'])
def MyLesson_list(request,format=None):
    """
    List all MyLesson,or create a new MyLesson   
    """
    if request.method == 'GET':
        myLesson = MyLesson.objects.all()
        serializer = MyLessonSerializer(myLesson,many=True)
        return Response(serializer.data)
 
    elif request.method == 'POST':
        serializer = MyLessonSerializer(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 MyLesson_detail(request,pk,format=None):
    """
    Retrieve,update or delete a myLesson instance
    """
    try:
        myLesson = MyLesson.objects.get(pk=pk)
    except MyLesson.DoesNotExit:
        return Response(status=status.HTTP_404_NOT_FOUND)
 
    if request.method == 'GET':
        serializer = MyLessonSerializer(myLesson)
        return Response(serializer.data)
 
    elif request.method == 'PUT':
        serializer = MyLessonSerializer(myLesson,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':
        myLesson.detele()
        return Response(status=status.HTTP_204_NO_CONTENT)
 
 
#views.py
def MyLesson_list(request, format=None):
def MyLesson_detail(request, pk, format=None):
 
#urls.py
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = format_suffix_patterns(urlpatterns)
 
我们可以用Accept header来控制Response的格式
 
http http://127.0.0.1:8000/snippets/ Accept:application/json  # Request JSON
http http://127.0.0.1:8000/snippets/ Accept:text/html         # Request HTML
 
或者加一个格式后缀
 
http http://127.0.0.1:8000/snippets.json  # JSON suffix
http http://127.0.0.1:8000/snippets.api 

posted on 2017-04-13 18:49  jingbostar  阅读(144)  评论(0)    收藏  举报

导航