Python Version:2.7.10
Django Version:1.9
REST framework 3.3.2


安装

pip install django

pip install djangorestframework



settings.py INSTALLED_APPS中引入rest_framework

INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01','rest_framework',]


创建model, 修改mdels.py

classBook(models.Model):name=models.CharField(max_length=100)title=models.CharField(max_length=100)author=models.CharField(max_length=100)


创建serializers.py

fromapp01.modelsimport*fromrest_frameworkimportserializersclassBookSerializer(serializers.Serializer):name=serializers.CharField(max_length=100)title=serializers.CharField(max_length=100)author=serializers.CharField(max_length=100)defcreate(self,validated_data):returnBook(**validated_data)defupdate(self,instance,validated_data):instance.email=validated_data.get('name',instance.name)instance.content=validated_data.get('title',instance.title)instance.created=validated_data.get('author',instance.author)returninstance


restore_object() 3.0以上版本不支持已经被create()和update()方法代替,源码如下:

('Serializer`%s.%s`hasold-styleversion2`.restore_object()`''thatisnolongercompatiblewithRESTframework3.''Usethenew-style`.create()`and`.update()`methodsinstead.'%(self.__class__.__module__,self.__class__.__name__))



创建基于类和函数的视图

fromdjango.shortcutsimportrender_to_responsefromdjango.httpimportHttpResponsefromapp01.formsimport*fromrest_framework.viewsimportAPIViewfromapp01.serializersimportBookSerializerfromapp01.modelsimport*fromrest_framework.responseimportResponsefromrest_frameworkimportgenericsfromrest_frameworkimportstatus#Createyourviewshere.classBookList(APIView):defget(self,request,format=None):books=Book.objects.all()ser=BookSerializer(books,many=True)returnResponse(ser.data)defpost(self,request,format=None):ser=BookSerializer(data=request.data)ifser.is_valid():ser.create(ser.validated_data).save()returnResponse(ser.data,status=status.HTTP_201_CREATED)returnResponse(ser.errors)classBookDetail(APIView):defget(self,request,num,format=None):b=Book.objects.get(id=num)ser=BookSerializer(b)returnResponse(ser.data)classGenericBookList(generics.ListCreateAPIView):queryset=Book.objects.all()serializer_class=BookSerializerdefpost(self,request,format=None):ser=BookSerializer(data=request.data)ifser.is_valid():ser.create(ser.validated_data).save()returnResponse(ser.data,status=status.HTTP_201_CREATED)returnResponse(ser.errors)defindex(request):returnrender_to_response('index.html')defhello(request):ifrequest.method=='POST':form=BookForms(request.POST)ifform.is_valid():data=form.cleaned_datatitle=data["title"]returnHttpResponse(title)form=BookForms()returnrender_to_response('1.html',{'form':form})


urls.py配置

fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromapp01.viewsimport*urlpatterns=[url(r'^admin/',admin.site.urls),url(r'^$',index),url(r'^hello/$',hello),url(r'^book/$',BookList.as_view()),url(r'^genericbook/$',GenericBookList.as_view()),url(r'^book/(\d+)',BookDetail.as_view()),]


APIView



generic通用视图



RESTfulRequest:GET/PUT/DELETE/POST/HEAD/OPTIONS

POST请求被定义为创建“从属资源”(拥有父资源的资源) (add)

参考文章:

http://www.lifelaf.com/blog/?p=156