一、快速实例

Quickstart

http://www.cnblogs.com/yuanchenqi/articles/8719520.html

restful协议

     ----  一切皆是资源,操作只是请求方式

     ----book表增删改查
         /books/                 books
         /books/add/             addbook
         /books/(\d+)/change/    changebook
         /books/(\d+)/delete/    delbook

    ----book表增删改查  url里面不能出现动词!!
         /books/     -----get            books      -----  返回当前所有数据
         /books/     -----post           books      -----  返回提交数据

         /books/(\d+)-----get            bookdetail -----  返回当前查看的单条数据
         /books/(\d+)-----put            bookdetail -----  返回更新数据
         /books/(\d+)-----delete         bookdetail -----  返回空


    http://www.cnblogs.com/yuanchenqi/articles/8719520.html
    http://www.django-rest-framework.org/tutorial/quickstart/#quickstart


         class  Books(View):
              def get(self,request):
                  pass  # 查看所有书籍

              def post(self,request):
                  pass  # 添加书籍


         class  BooksDetail(View):
              def get(self,request,id):
                  pass  # 查看具体书籍

              def put(self,request,id):
                  pass  # 更新某本书籍

              def delete(self,request,id):
                  pass  # 删除某本书籍

http://www.django-rest-framework.org/tutorial/quickstart/#quickstart
restframework(Django)  app
pip install django
pip install djangorestframework

    ----针对数据:json

    (1)Django的原生request:

          浏览器   -------------  服务器

          "GET url?a=1&b=2 http/1.1\r\user_agent:Google\r\ncontentType:urlencoded\r\n\r\n"
          "POST url http/1.1\r\user_agent:Google\r\ncontentType:urlencoded\r\n\r\na=1&b=2"

          request.body: a=1&b=2
          request.POST:
                       if contentType:urlencoded:
                             a=1&b=2----->{"a":1,"b":2}

    (2)restframework 下的APIView:

    (3)
    class PublishSerializers(serializers.Serializer):
            name=serializers.CharField()
            email=serializers.CharField()

        PublishSerializers(queryset,many=true)
        PublishSerializers(model_obj)


---------------------------

    总结:
        1 reuqest类----源码

        2 restframework 下的APIView--源码

          url(r'^books/$', views.BookView.as_view(),name="books")#  View下的view

          books/一旦被访问: view(request) ------APIView: dispatch()

        3 def dispatch():

              构建request对象
              self.request=Request(request)
              self.request._request
              self.request.GET  # get
              self.request.data # POST  PUT

              分发----if get请求:
                    if request.method.lower() in self.http_method_names:
                        handler = getattr(self, request.method.lower(),
                                         self.http_method_not_allowed)
                    else:
                        handler = self.http_method_not_allowed

                    response = handler(request, *args, **kwargs) # self.get(request, *args, **kwargs)

                    return response

        4 序列化类
            # from django.core import serializers
            # ret=serializers.serialize("json",publish_list)

            restframework下的序列类  BookModelSerializers
                将queryset或者model对象序列成一json数据
                    bs=BookModelSerializers(book_list,many=True,context={'request': request})
                    bs=BookModelSerializers(book,context={'request': request})

                还可以做校验数据,json-------》queryset/model-->记录

                    bs=BookModelSerializers(data=request.data)
                    if bs.is_valid():
                        print(bs.validated_data)
                        bs.save() # 重写create方法
        5 操作数据:

            以Book表为例
                class BookView(APIView):
                    # 查看所有书籍
                    def get(self,request):
                        book_list=Book.objects.all()
                        bs=BookModelSerializers(book_list,many=True,context={'request': request})
                        return Response(bs.data)

                    # 添加一本书籍
                    def post(self,request):
                        # post请求的数据
                        bs=BookModelSerializers(data=request.data)
                        if bs.is_valid():
                            print(bs.validated_data)
                            bs.save()# create方法
                            return Response(bs.data)
                        else:
                            return Response(bs.errors)

                class BookDetailView(APIView):
                    # 查看一本书籍
                    def get(self,request,id):

                        book=Book.objects.filter(pk=id).first()
                        bs=BookModelSerializers(book,context={'request': request})
                        return Response(bs.data)
                    # 更新一本书籍
                    def put(self,request,id):
                        book=Book.objects.filter(pk=id).first()
                        bs=BookModelSerializers(book,data=request.data)
                        if bs.is_valid():
                            bs.save()
                            return Response(bs.data)
                        else:
                            return Response(bs.errors)
                    # 删除某一本书籍
                    def delete(self,request,id):
                        Book.objects.filter(pk=id).delete()

                        return Response()

restframework
    1 APIView
    2 序列组件
    3 视图、
    4 组件(认证权限频率)
    5 数据解析器
    6 分页和Response
笔记

相关文章: