-1 : rest規範html
0: 它是基於Django的,幫助咱們快速開發符合RESTful規範的接口框架:對rest-framework框架的認識:https://www.cnblogs.com/GGGG-XXXX/articles/9260702.htmlpython
1 :使用restframework的cbv的流程:https://blog.csdn.net/NightCharm/article/details/80405479(restful架構)django
https://www.cnblogs.com/GGGG-XXXX/articles/9675911.html(老師博客)
1 繼承APIview: from rest_framework.views import APIView
2 先走本身類的as_view方法, 沒有走父類APIview的as_view方法, APIview中有as_view方法, 返回csrf_exempt(view), --view = super(APIView, cls).as_view(**initkwargs)
3 執行父類的as_view方法, 返回view函數, 執行view函數, 返回self.dispatch
4 從本身類中找dispatch,沒有, 找父類的dispatch方法, 有,執行, request = self.initialize_request(request, *args, **kwargs), 獲取到新的request, 進到 initialize_reques放回一個Request類, 舊的request放在_request裏.而後走try: 執行相應的get或者post方法.
2 : APIview和View的區別:
1 APIview重寫了as_view和dispatch方法
2 在dispatch中從新封裝了request, :
新的request: Request()
舊的request: _request
3 get請求的數據:
request.query_params, 在Request類中能夠看到(源碼)
4 post請求的數據:
request.data
3 : django的序列化:
初版: 用values以及JsonResponse實現:
注意:
1: 使用json.dumps時加上ensure_ascil不會出現亂碼
res = json.dumps(ret, ensure_ascii=False)
2: 使用JsonResponse能夠序列化時間類型, 若是不是字典, 加上safe= false
return HttpResponse(JsonResponse(ret, safe=False, json_dumps_params={"ensure_ascii": False}))json
3: dumps和JsonResponse的區別: dumps繼承jsonencode, jsonresponse繼承encode類,自定義了一個default類, 能夠處理時間類型.
第二版: 用django的serializes實現的序列化:
缺點: 不能序列化外鍵關係, 其次, 表名也會渲染到頁面上, 不太好
第三版: 使用restframework: restframwork專門處理序列化的組件:serializers組件, 類比於model.
1 先建一個包, 並註冊app
2 下載rest_framework: pip3 install djangorestframework 並在setting中註冊.
3 建立路由, 走視圖函數, 對queryset數據序列化, 藉助序列化器, 在包下面建立serializers.py文件,
4 在py文件中寫法: api
from rest_framework import serializers class PublisherSerializer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=32) class AuthorSerializer(serializers.Serializer): id = serializers.IntegerField() name = serializers.CharField(max_length=32) class BookSerializer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=32) pub_time = serializers.DateField() category = serializers.CharField(source='get_category_display') publisher = PublisherSerializer() authors = AuthorSerializer(many=True)
5 在views的使用, 向聲明序列化器,使用序列化器序列化queryset, 把模型對象放入序列化器進行字段匹配,restful
匹配上的字段進行序列化, 匹配不上的捨棄. 序列化好的數據放在ser_obj.data中,架構
from django.shortcuts import render,HttpResponsefrom rest_framework.response import Response #引入Response from rest_framework.views import APIView #引入 APIView from rest_framework import serializers #用rest_framework本身的serializers from django.views import View from api_demo.models import * class Bookserializers(serializers.Serializer): title=serializers.CharField(max_length=32) price=serializers.IntegerField() class BookView(APIView):#注意這裏使用的是APIView不是View def get(self,request,*args,**kwargs): booklist=Book.objects.all() temp=Bookserializers(booklist,many=True)#若是傳入的是多個值,因爲queryset是多個對象的集合,many=True,默認False print(">>>>",temp) print("-------",temp.data) #獲得的是一種orderDict數據類型的數據 return Response(temp.data) #必需要用Response發送,發送其中的data就能夠